在 CentOS 上降低 SELinux 相关风险的正确思路
一 基线状态与最小变更原则
getenforce、sestatussetenforce 0(Permissive)或 setenforce 1(Enforcing)/etc/selinux/config 中设置 SELINUX=enforcing,SELINUXTYPE=targeted二 常见风险与处置对照表
| 风险场景 | 处置动作 | 关键命令示例 |
|---|---|---|
| 服务因权限被拒(AVC denied) | 先定位拒绝原因,再按最小权限修复:迁移到合规目录或修正类型;必要时用布尔值或生成最小策略模块 | ausearch -m avc -ts recent、sealert -a /var/log/audit/audit.log、semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"、restorecon -R /data/web、audit2allow -i /tmp/avc.log -M myapp_policy && semodule -i myapp_policy.pp |
| 文件或目录上下文错误 | 用 semanage fcontext 持久化设置类型,restorecon 应用;避免长期用 chcon |
ls -lZ、semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?"、restorecon -R /webdata |
| 需要临时放行功能(如 FTP 匿名写入) | 优先用布尔值精确开启,而非全局放宽 | `getsebool -a |
| 排障期间需要“只记录不拦截” | 切到 Permissive 而非 Disabled,排障完成回到 Enforcing | setenforce 0 → 排障 → setenforce 1 |
| 误以为“关掉 SELinux 更安全/更稳” | 保持 Enforcing;若必须关闭,仅作为最后手段,且需充分评估与变更窗口 | 编辑 /etc/selinux/config 为 SELINUX=disabled 并重启(不推荐) |
以上做法强调“启用—观察—分析—最小化授权”的闭环,既能恢复业务,又能把权限收紧到必要范围。
三 与防火墙和其他安全控制协同
/var/log/audit/audit.log,使用 ausearch、sealert 分析 AVC 拒绝,及时发现异常行为。四 快速排障与回退步骤
getenforce(返回 Enforcing/Permissive/Disabled)setenforce 0(排障用,勿长期)/etc/selinux/config 设置 SELINUX=enforcing 后重启ausearch -m avc -ts recent 或 grep "avc:.*denied" /var/log/audit/audit.logsemanage fcontext + restorecon 修正类型getsebool/setsebool -P 开关布尔值audit2allow -M xxx && semodule -i xxx.pp