排查SELinux故障

08-17

你终有一天会被 SELinux 阻止你访问所需的东西,而且要解决这个问题。SELinux 拒绝某个文件、进程或资源被访问的基要原因有数个:

1 一个被错误标签的文件

2 一个进程在错误的 SELinux 安全性脉络下运行

3 政策出错。某个进程要访问一个在编写政策时意料不到的文件,并产生错误信息

4 一个入侵的企图。

头三个情况我们可以处理,而第四个正正是预期的表现。

先安装setroubleshoot 组件。有的资料说他是默认安装的,但在我的CentOS5.5上没有。

yum install setroubleshoot

日志档是排除任何疑难的关键,而 SELinux 亦不例外。SELinux 缺省会通过 Linux 审计系统(auditd)将日志写在 /var/log/audit/audit.log 内,而这项务服缺省为启用的。假若 auditd 并未运行,信息将会被写进 /var/log/messages。SELinux 的日志都被标签有 AVC 这个关键字,方便它们从其它信息中过滤出来。

由 CentOS 5 起,你可以用 SELinux 排除疑难工具协助你分析日志档,将它们转换为供人阅读的格式。这个工具包含一个以可读格式显示信息及解决方案的图像界面、一个桌面通报图示、与及一个长驻进程(setroubleshootd),它负责查阅新的 SELinux AVC 警告并传送至通报图示(不运行 X 服务器的话可设置以电邮通报)。SELinux 排除疑难工具是由 setroubleshoot 组件所提供,并缺省会被安装。这个工具可以从「系统」选单或命令行引导:

sealert -b

不运行 X 服务器的人可以通过命令行产生供人阅读的报告:

sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt