在 CentOS(以及 RHEL 系列)中,SELinux(Security-Enhanced Linux) 是一种强制访问控制(MAC)安全机制。下面从查看状态、模式管理、策略与布尔值、文件上下文、端口、排错、关闭风险等方面系统说明如何管理 SELinux。
# 查看当前 SELinux 状态
getenforce
# 查看详细状态
sestatus
输出示例:
Enforcing:强制模式(拦截并记录)Permissive:宽容模式(只记录不拦截)Disabled:禁用重启后失效
# 临时改为 Permissive
setenforce 0
# 临时改为 Enforcing
setenforce 1
编辑配置文件:
vi /etc/selinux/config
常见配置:
SELINUX=enforcing
SELINUXTYPE=targeted
可选值:
enforcingpermissivedisabled⚠️ 改为 disabled 后必须重启系统才生效
⚠️ 从 disabled 改为 enforcing 可能需要重新打标签(见后文)
常见类型(SELINUXTYPE):
targeted(默认,保护常见服务)mls(多级安全,较少用)一般使用 targeted 即可。
布尔值用于控制服务行为。
getsebool -a
getsebool -a | grep httpd
setsebool httpd_can_network_connect on
setsebool -P httpd_can_network_connect on
ls -Z
ps -Z
chcon -t httpd_sys_content_t /var/www/html/index.html
restorecon -Rv /var/www/html
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -Rv /web
semanage port -l
semanage port -a -t http_port_t -p tcp 8080
/var/log/audit/audit.log
/var/log/messages
yum install setroubleshoot-server
sealert -a /var/log/audit/audit.log
grep httpd /var/log/audit/audit.log | audit2allow -M myhttp
semodule -i myhttp.pp
当系统从 disabled 切回 enforcing 时:
touch /.autorelabel
reboot
系统重启后会自动重新标记文件系统。
✅ 推荐:
Enforcingsetsebool -Psemanage 而非 chcon❌ 不推荐:
disabledaudit2allow如果你有具体场景(如 Nginx / MySQL / FTP / Docker / 自定义端口),我可以给你对应的 SELinux 配置示例。