SELinux是集成在Linux内核中的强制访问控制(MAC)安全模块,在CentOS系统中默认随发行版提供。它通过对每一个进程、文件和端口打上安全标签,限制进程只能访问被策略允许的资源,从而弥补传统自主访问控制(DAC)的不足。当Web应用存在漏洞被入侵时,SELinux能阻止恶意进程读取/etc/shadow或写入系统目录。

SELinux的运行模式
SELinux共有三种模式,可通过配置文件或命令切换:
- Enforcing:强制模式,真正拦截违规操作并记录日志。
- Permissive:宽容模式,只记录不拦截,常用于调试。
- Disabled:关闭,系统不加载SELinux策略。
查看与开启SELinux
在CentOS中,先用命令确认当前状态:
# 查看SELinux运行状态 getenforce # 查看详细配置 sestatus
若当前为Disabled,需要修改配置文件并重启:
# 编辑配置文件 vi /etc/selinux/config # 将以下内容改为 SELINUX=enforcing SELINUXTYPE=targeted
管理布尔值开放服务权限
SELinux针对常见服务提供了布尔值开关,例如允许HTTPD访问网络:
# 开启httpd可发起网络连接 setsebool -P httpd_can_network_connect on # 查看相关布尔值 getsebool -a | grep httpd
修复文件安全上下文
当把网站文件放到非标准目录时,需重置安全上下文,否则Web进程会被拒绝读取:
# 递归恢复目录默认上下文 restorecon -Rv /srv/myweb # 临时修改上下文类型 chcon -t httpd_sys_content_t /srv/myweb/index.html
编写自定义策略模块
若日志审计发现合法业务被拦截,可基于审计日志生成策略模块:
# 从拒绝日志生成策略包 grep nginx /var/log/audit/audit.log | audit2allow -M mynginx semodule -i mynginx.pp
常见问题与建议
| 现象 | 原因 | 处理 |
|---|---|---|
| 服务启动失败无权限 | 上下文错误 | 使用restorecon修复 |
| 端口绑定被拒 | 端口未授权 | 用semanage port添加 |
| 调试时频繁报错 | 策略过严 | 先设Permissive观察 |
建议生产环境务必保持Enforcing模式,并定期查看/var/log/audit/audit.log中的AVC拒绝记录,逐步补全策略。通过SELinux的标签化管控,CentOS系统可实现最小权限运行,显著降低安全风险。