在 CentOS 中出现 “context 错误”(通常和 SELinux 的 security context 相关),一般不是系统坏了,而是 SELinux 发现某个文件 / 进程的安全上下文不正确。
下面把常见原因和解决办法说清楚。
CentOS 默认开启 SELinux,每个:
system_u:object_r:httpd_sys_content_t:s0
当 SELinux 认为 上下文不匹配策略 时,就会拒绝访问,并出现 context 相关错误。
mv /home/test.html /var/www/html/
mv 不会改 context,导致:
wrong context
✅ 正确方式:
cp /home/test.html /var/www/html/
restorecon -Rv /var/www/html/
例如:
mkdir /data/web
默认 context 不是 httpd_sys_content_t
查看:
ls -Z /data/web
修复:
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
例如:
错误日志:
/var/log/audit/audit.log
setroubleshoot
常见于:
ausearch -m avc -ts recent
或:
grep denied /var/log/audit/audit.log
ls -Z 文件名
restorecon -Rv /路径
sealert -a /var/log/audit/audit.log
它会直接告诉你该执行哪条命令。
setenforce 0
⚠️ 只是排查用,重启后恢复
vi /etc/selinux/config
SELINUX=disabled
CentOS 的 context 错误,99% 是 SELinux 上下文不对,用
restorecon或semanage fcontext修复即可。
如果你愿意,可以把 具体的报错信息或日志贴出来,我可以帮你精确分析是哪一行 context 错了。