在 CentOS 中,SELinux 出问题(如权限拒绝、系统无法启动、服务异常)时,通常可以按下面步骤进行排查与修复。
getenforce
sestatus
常见状态:
Enforcing:强制模式(会拦截)Permissive:宽容模式(只记录不拦截)Disabled:已关闭setenforce 0
仅当前生效,重启后恢复
ausearch -m avc -ts recent
或
grep AVC /var/log/audit/audit.log
常见错误示例:
type=AVC msg=audit(...): denied { read } for pid=...
yum install -y setroubleshoot-server
sealert -a /var/log/audit/audit.log
它会给出具体修复命令,例如:
setsebool -P httpd_can_network_connect on
如果文件/目录权限异常:
restorecon -Rv /var/www/html
对整个系统修复(谨慎):
fixfiles onboot
# 或
touch /.autorelabel
reboot
查看:
getsebool -a | grep httpd
修改:
setsebool -P httpd_enable_homedirs on
grep httpd /var/log/audit/audit.log | audit2allow -M myhttpd
semodule -i myhttpd.pp
selinux=0
或
enforcing=0
touch /.autorelabel
reboot
vi /etc/selinux/config
修改为:
SELINUX=disabled
重启生效。
| 场景 | 修复 |
|---|---|
| Web 无法访问 | restorecon -Rv /var/www |
| FTP/NFS 异常 | setsebool -P |
| 服务启动失败 | sealert -a |
| 系统起不来 | enforcing=0 + autorelabel |
如果你能提供 具体报错信息或服务名称(如 Nginx / MySQL / FTP),我可以给你精确修复命令。