在 CentOS(以及一般 Linux)上排查 SELinux context(安全上下文) 问题,通常可以按下面思路来。
getenforce
sestatus
Enforcing:SELinux 正在强制生效(最常见问题来源)Permissive:只记录不拦截Disabled:不是 SELinux 问题ls -Z /path/to/file
或
ls -Zd /var/www/html
示例:
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
ps -eZ | grep httpd
示例:
system_u:system_r:httpd_t:s0 1234 ? 00:00:01 httpd
ls -Zd /var/www
ausearch -m AVC -ts recent
或实时看:
tail -f /var/log/audit/audit.log
常见关键字:
AVC deniedcomm="httpd"name="uploads"scontext=... tcontext=.../var/log/messages
/var/log/secure
(CentOS 6/7 可能在这)
yum install -y setroubleshoot-server
sealert -a /var/log/audit/audit.log
它会直接告诉你:
restorecon -Rv /var/www/html
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?"
restorecon -Rv /var/www/html/uploads
setenforce 0
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on
getenforce 确认状态ls -Z / ps -Z 看 contextausearch -m AVC 看拒绝sealert 分析restorecon 或 semanage fcontext 修复boolean如果你有 具体报错、服务名、文件路径,可以直接贴出来,我可以帮你精准定位是哪一条 SELinux 规则。