资讯动态

调查和解决 SELinux 问题

发布时间:2026/8/30 15:26:30 来源:尧图企业网站定制
对 SELinux 问题进行故障排除当应用因 SELinux 访问遭拒而意外失败时可以使用一些方法和工具来解决这些问题。在启用 SELinux 时最好先了解一些基本概念和行为。SELinux 由明确定义允许操作的目标策略组成。策略条目定义要交互的已标记进程和已标记资源。通过使用标签策略声明进程类型以及文件或端口上下文。策略条目定义一种进程类型、一个资源标签以及要允许的显式操作。操作可以是系统调用、内核函数或其他特定的编程例程。如果没有为特定的进程‑资源操作关系创建条目则操作将被拒绝。当某个操作被拒绝时该次尝试将与实用的上下文信息一起记录下来。红帽企业 Linux 为发行版中的几乎所有服务提供稳定的目标 SELinux 策略。因此正确配置了常见 RHEL 服务后很少会出现与之相关的 SELinux 访问问题。如果服务实施不正确或新应用具有不完整的策略就会出现 SELinux 访问问题。在进行广泛的 SELinux 配置更改之前请先考虑这些故障排除概念。大多数访问拒绝表明 SELinux 通过阻止不当操作来正常工作。评估遭拒的操作需要对正常的预期服务操作有所了解。最常见的 SELinux 问题是新的、复制的或移动文件具有不正确的上下文。当现有策略引用其位置时可以修复文件上下文。_selinuxman page 中记录了可选的布尔策略功能。实施布尔值功能通常需要设置额外的非 SELinux 配置。SELinux 策略不会取代或规避文件权限或访问控制列表限制。如果有常见的应用或服务出现故障并且已知该服务具有有效的 SELinux 策略首先查看该服务的_selinuxman page以验证正确的上下文类型标签。查看受影响的进程和文件属性以验证是否设置了正确的标签。监控 SELinux 违规setroubleshoot‑server软件包中的 SELinux 故障排除服务提供了诊断 SELinux 问题的工具。 当 SELinux 拒绝某一操作时会在/var/log/audit/audit.log安全日志文件中记录一条 Access Vector Cache (AVC) 消息。SELinux 故障排除服务会监控 AVC 事件并将事件摘要发送到/var/log/messages文件。AVC 摘要包括事件唯一标识符 (UUID)。使用sealert -l UUID命令来查看特定事件的综合报告详细信息。使用sealert -a /var/log/audit/audit.log命令来查看所有现有的事件。考虑在标准 Apache Web 服务器上执行以下示例命令序列的情况您将创建/root/mypage并将它移到默认的 Apache 内容目录 (/var/www/html)。然后在启动 Apache 服务后您将尝试检索文件内容。[roothost ~]# touch /root/mypage [roothost ~]# mv /root/mypage /var/www/html [roothost ~]# systemctl start httpd [roothost ~]# curl http://localhost/mypage !DOCTYPE HTML PUBLIC -//IETF//DTD HTML 2.0//EN htmlhead title403 Forbidden/title /headbody h1Forbidden/h1 pYou dont have permission to access this resource./p /body/htmlWeb 服务器不显示内容并且返回permission denied错误。AVC 事件记录到/var/log/audit/audit.log和/var/log/messages文件中。注意/var/log/messages事件消息中建议的sealert命令和 UUID。[roothost ~]# tail /var/log/audit/audit.log ...output omitted... typeAVC msgaudit(1649249057.067:212): avc: denied { getattr } for pid2332 commhttpd path/var/www/html/mypage devvda4 ino9322502 scontextsystem_u:system_r:httpd_t:s0 tcontextunconfined_u:object_r:admin_home_t:s0 tclassfile permissive0 ...output omitted... [roothost ~]# tail /var/log/messages ...output omitted... Apr 6 08:44:19 host setroubleshoot[2547]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/mypage. For complete SELinux messages run: sealert -l 95f41f98‑6b56‑45bc‑95da‑ce67ec9a9ab7 ...output omitted...sealert输出描述了事件并包括受影响的进程、访问的文件以及已尝试并被拒绝的操作。输出中包含更正文件标签的建议如果适用。其他建议描述了如何生成新的策略来允许被拒绝的操作。所给的建议仅可在适合您的情景时使用。在本例中所访问的文件位于正确的位置但没有正确的 SELinux 文件上下文。Raw Audit Messages 部分显示来自/var/log/audit/audit.log事件条目的信息。使用restorecon /var/www/html/mypage命令来设置正确的上下文标签。要以递归方式更正多个文件请对父目录使用restorecon -R命令。# 递归修复整个目录上下文 restorecon -R /var/www/html使用ausearch命令搜索/var/log/audit/audit.log日志文件中的 AVC 事件。使用-m选项指定 AVC 消息类型并使用-ts选项提供时间提示例如recent。# 查看最近的AVC拒绝日志 ausearch -m avc -ts recent使用 Web 控制台进行 SELinux 问题故障排除HEL Web 控制台包含用于对 SELinux 问题进行故障排除的工具。从左侧菜单中选择SELinux。SELinux 策略窗口会显示当前的执行状态。SELinux access control errors部分列出了当前的 SELinux 问题。单击字符以显示事件详细信息。单击solution details以显示所有事件详细信息和建议。您可以单击Apply the solution。更正问题后SELinux access control errors 部分应从视图中删除该事件。如果显示No SELinux alerts消息则表示您已更正了当前的所有 SELinux 问题。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价