报错是这么冒出来的。CentOS 7.9 上应用被 SELinux 挡住,执行 setenforce 0 之后业务恢复,可机器一重启又变回 enforcing,故障原样复现,getenforce 显示 Enforcing。
中间走过弯路,把「改完 config 没确认,文件里还有一行被注释掉的 SELINUX=disabled 干扰判断」当成主因,改完现象没变。
排查方向其实有限,先把可能性排一排。setenforce 只改运行时的状态,/etc/selinux/config 里的 SELINUX 还是 enforcing。少数情况下是有人在 grub 里加过 selinux=0,后来被内核升级覆盖掉。
另外,容器里的 SELinux 状态跟随宿主机,改容器内配置无效。
第一件事是确认运行时和配置文件的差异
getenforce && grep -n '^SELINUX=' /etc/selinux/config
定位到底是哪条规则在拦
ausearch -m avc -ts today | tail -20
然后按规则放行而不是整体关掉
setsebool -P httpd_can_network_connect 1
剩下的就是确实要关时同时改配置文件
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config && reboot
恢复的判定其实很直接。重启后 getenforce 返回 Permissive 或 Disabled,应用正常启动,ausearch 里没有新的 AVC 拒绝,业务功能验证通过。
补一句。关 SELinux 是掩盖问题,能定位到具体规则就设布尔值或打标签;permissive 只记录不拦截,适合观察一段时间再决定。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
