在 CentOS 中修改 SELinux 策略,通常分为临时调整、永久关闭/开启、修改布尔值、修改文件/端口上下文以及编写自定义策略几种情况。下面按常见使用场景说明。
getenforce
# Enforcing / Permissive / Disabled
sestatus
# 临时关闭(仅警告不拦截)
setenforce 0
# 临时开启
setenforce 1
编辑配置文件:
vi /etc/selinux/config
修改:
SELINUX=enforcing # enforcing | permissive | disabled
SELINUXTYPE=targeted # 一般不用改
⚠️ 改为 disabled 后必须重启系统才生效
很多服务问题可以通过布尔值解决。
getsebool -a
getsebool httpd_can_network_connect
setsebool httpd_can_network_connect on
setsebool -P httpd_can_network_connect on
常见示例:
httpd_can_network_connect:Apache 访问网络ftp_home_dir:FTP 访问用户家目录samba_export_all_rw:Samba 读写服务访问被拒,通常是上下文不对。
ls -Z /var/www/html
chcon -t httpd_sys_content_t /data/www
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
例如 Nginx 使用 8080:
semanage port -a -t http_port_t -p tcp 8080
查看:
semanage port -l | grep http
当不知道怎么改时,用 audit2why / audit2allow。
setenforce 0
访问服务、执行操作
ausearch -m avc -ts recent
ausearch -m avc -ts recent | audit2allow -M mypolicy
semodule -i mypolicy.pp
tail -f /var/log/audit/audit.log
# 或
journalctl -t setroubleshoot
httpd_sys_content_tsemanage portsetenforce 0 先验证如果你有具体场景(如 Nginx / MySQL / FTP / 自定义服务),可以告诉我,我可以直接给你对应的 SELinux 修改命令。