在 CentOS 上排查 SELinux 问题,通常可以按下面一套流程来做。我按**“先确认 → 再看日志 → 再分析 → 再处理”**来讲。
getenforce
可能结果:
Enforcing:强制模式(会拦截)Permissive:宽容模式(只记录不拦截)Disabled:已关闭查看详细状态:
sestatus
如果是排障,可临时改为 Permissive:
setenforce 0
如果问题消失,基本可以确定是 SELinux 引起。
⚠️ 重启后恢复,永久修改需改配置文件
永久修改(谨慎):
vi /etc/selinux/config
SELINUX=permissive
ausearch -m AVC -ts recent
或实时查看:
tail -f /var/log/audit/audit.log
典型 AVC 拒绝示例:
type=AVC msg=audit(...): avc: denied { read } for pid=...
CentOS 默认可能有:
sealert -a /var/log/audit/audit.log
如果没有:
yum install -y setroubleshoot-server
它会直接告诉你:
ausearch -m AVC -ts today
audit2why < /var/log/audit/audit.log
audit2allow -a
确认无误后:
audit2allow -a -M mypolicy
semodule -i mypolicy.pp
ls -Z /path/file
ps -Z | grep nginx
修正上下文:
restorecon -Rv /path
或修改上下文:
semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?"
restorecon -Rv /data
查看允许的端口:
semanage port -l | grep http
添加端口:
semanage port -a -t http_port_t -p tcp 8080
查看相关布尔值:
getsebool -a | grep ftp
开启:
setsebool -P ftp_home_dir on
如果你有具体报错或服务(如 Nginx / FTP / MySQL / SSH),可以把日志贴出来,我可以直接帮你定位。