排查SELinux权限被拒问题时,应先确认策略类型和生效状态:查看/etc/selinux/config中SELINUXTYPE(如targeted)和SELINUX=enforcing,再检查编译策略文件(如policy.31)上下文是否为system_u:object_r:selinux_policy_t:s0,并用sestatus -b、ausearch和seinfo验证加载完整性。

排查 SELinux 权限被拒问题时,直接检查 /etc/selinux 目录下的策略相关文件是关键一步。这个目录本身不存放策略规则,但它指向当前生效的策略配置和策略文件位置,是整个排查链路的起点。
确认当前使用的策略类型和路径
/etc/selinux/config 是核心配置文件,决定系统启动时加载哪个策略。用以下命令查看:
cat /etc/selinux/config | grep "^SELINUXTYPE\|^SELINUX="- 重点关注
SELINUXTYPE=targeted(或minimum、mls)——这说明实际策略文件位于/etc/selinux/targeted/policy/或/usr/share/selinux/targeted/ -
SELINUX=enforcing表示策略正在生效;若为disabled,后续所有 SELinux 拒绝都与该机制无关
定位并检查编译后的二进制策略文件
SELinux 运行时加载的是编译后的二进制策略(policy.XX),不是文本规则。常见位置包括:
-
/etc/selinux/targeted/policy/policy.XX(XX 是版本号,如policy.31) -
/usr/share/selinux/targeted/policy.kern(内核策略模块) - 用
ls -lZ /etc/selinux/targeted/policy/查看其安全上下文是否为system_u:object_r:selinux_policy_t:s0,异常上下文可能导致策略加载失败
检查策略源码与自定义模块(如有)
若系统有本地定制策略,需检查:
-
/etc/selinux/targeted/modules/active/modules/:已启用的自定义模块(.pp 文件) -
/usr/local/share/selinux/或/var/lib/selinux/targeted/active/modules/:第三方或手动安装的模块 - 运行
semodule -l | grep -v "base\|core"列出非基础模块,确认是否有冲突或过期模块
验证策略完整性与加载状态
仅存在文件不代表策略被正确加载。执行:
-
sestatus -b:显示当前加载的策略名、布尔值状态及是否启用 MLS -
ausearch -m avc -ts today | head -5:确认拒绝日志是否真实来自当前策略(而非旧策略残留) -
seinfo -p /etc/selinux/targeted/policy/policy.* 2>/dev/null | head -3:快速验证策略文件可读且格式有效


















