centos上配置selinux核心是遵循“默认拒绝、显式允许”原则,通过getenforce/sestatus确认状态,用semanage/chcon/audit2allow适配服务策略,禁用selinux不推荐。

CentOS 服务器上配置和管理 SELinux,核心是理解它“默认拒绝、显式允许”的安全逻辑,而不是简单开关了事。关键在于让策略适配你的服务,而不是绕过它。
确认状态与模式选择
先看当前是否启用及运行在哪种模式:
- 用 getenforce 查即时状态(Enforcing/Permissive/Disabled)
- 用 sestatus -v 看详细信息,包括策略类型(通常是 targeted)、布尔值开关、上下文等
- 生产环境建议设为 Enforcing;调试或排查问题时临时切到 Permissive(
setenforce 0),避免中断服务 - 永久设置修改
/etc/selinux/config中的SELINUX=enforcing,改完需重启生效
修复常见访问拒绝问题
服务起不来、文件读不了、端口连不上?大概率是安全上下文不匹配或端口未放行:
- 查拒绝记录:
ausearch -m avc -ts recent | head -20或sudo dmesg | grep -i avc - 看文件上下文:
ls -Z /path/to/file;对比正常路径(如/var/www/html的httpd_sys_content_t) - 修正目录标签:
semanage fcontext -a -t httpd_sys_content_t '/home/wwwroot(/.*)?',再restorecon -Rv /home/wwwroot - 开放自定义端口:
semanage port -a -t http_port_t -p tcp 8080(前提是已装policycoreutils-python-utils)
用 audit2allow 快速生成定制规则
当标准策略不满足需求(比如某脚本要访问特殊路径),别硬改策略,用日志驱动方式生成规则:
- 先切到 Permissive 模式:
setenforce 0 - 复现问题操作(如启动服务、访问页面)
- 提取拒绝日志:
ausearch -m avc -ts recent > avc.log - 生成并加载模块:
audit2allow -i avc.log -M myapp→ 得到myapp.pp,再semodule -i myapp.pp - 验证后切回 Enforcing:
setenforce 1
日常维护要点
SELinux 不是一次性配置,需要持续关注:
- 定期检查布尔值开关:
getsebool -a | grep httpd(如httpd_can_network_connect决定 Apache 是否能发起外连) - 更新系统或重装软件后,安全上下文可能丢失,用
restorecon -Rv /path重置 - 避免直接禁用 SELinux(
SELINUX=disabled),这等于卸掉防弹衣——真有兼容性问题,优先调策略而非关功能 - 所有变更建议在测试环境验证,尤其涉及网络服务、数据库、容器场景











