我怀疑我的 SELinux 配置有问题:使用 禁用 selinux 后我的问题就消失了setenforce 0
。我使用的是默认策略,没有任何修改。
如何查明 SELinux 配置中的确切问题?
答案1
SELinux 问题记录在审核日志中,通常位于/var/log/audit/audit.log
.如果您的系统上未安装auditd,SELinux 错误消息将打印在内核环形缓冲区中,并且可以使用dmesg
.
SELinux AVC(访问向量缓存)消息具有以下格式 [来源]:
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
也有可能没有错误消息。 SELinux 政策可能包含不审计规则,抑制特定访问的日志记录。唐塔审计可以通过以下方式禁用规则semanage
:
semanage dontaudit off
(你可能想转不审计解决问题后重新启用规则以减少日志噪音。)
通过描述拒绝访问的 AVC 消息,可以缩小可能的原因范围。 AVC 消息中用于故障排除的有用字段是通讯,小路,来源和目标 上下文:通讯包含进程的命令行名称,小路(对于文件)访问的是哪个文件,来源和目标情境安全标签。
分析错误消息audit2why
可以提供错误消息的人类可读的描述。默认策略的典型问题是由不正确的安全上下文引起的,如上面的消息所示,可以通过两个步骤进行调查:
源上下文和目标上下文是否正确?
SELinux 规则映射允许源安全上下文和目标安全上下文之间的访问。如果没有这样的规则,访问将被拒绝。在某些情况下,上下文可能不正确,导致访问被拒绝。
目标上下文不正确
文件可能具有不正确的安全上下文,例如,如果它们被移动(保留原始安全上下文)。用于
restorecon
将默认安全标签应用到文件。如果您没有使用文件的默认位置,则应该使用以下命令将文件标签规则添加到文件上下文数据库并随后
semanage
运行。restorecon
欲了解更多详情,请参阅问题:如何配置 SELinux 以允许守护进程使用非默认位置的文件?如果目标类型不是文件或目录(例如网络端口),则目标上下文可能使用
semanage
.源上下文不正确
大多数系统守护进程在受限域(源上下文)中运行,例如
httpd_
、smbd_t
等。如果守护进程在
init_t
域中运行,则要么没有针对它的目标策略,要么未启用策略模块,要么存在标记错误的可执行文件(入口点)。如果进程在unconfined_t
域中运行,则表明该进程是由用户启动的,而不是由 init 系统启动的。在这两种情况下通常不会出现任何错误,因为这两个域都几乎没有限制。进程的错误源上下文(在受限域中)将表明可执行文件的文件标签错误,可能是由于缺少 SELinux 策略模块。
上下文正确:策略不允许访问
需要修改策略以允许访问。常见的配置可能已经通过布尔选项来解决。
audit2allow
可以判断这样的布尔值是否存在,或者生成必要的策略模块以允许访问。