在 CentOS(以及 RHEL 系列)中说到 context 异常,通常是指 SELinux 安全上下文(security context)异常。下面从“是什么、为什么会异常、常见表现、怎么排查和处理”几个角度说明。
CentOS 默认启用 SELinux,每个:
都有一个 安全上下文(context),格式类似:
user:role:type:level
例如:
system_u:object_r:httpd_sys_content_t:s0
SELinux 就是靠 type(类型) 来决定“谁可以访问谁”。
所谓“context 异常”,一般是指:
结果是:
cp / mv 破坏了 contextcp file /var/www/html/
mv file /var/www/html/
cp → 可能继承错误 contextmv → 保留原 context(更危险)正确方式:
cp -Z file /var/www/html/
restorecon -Rv /var/www/html
例如:
/home/user/web/index.html → /var/www/html
SELinux 会认为这是 user_home_t,而不是 httpd_sys_content_t
比如:
/data/www/data/www 是 default_tchcon -t httpd_sys_content_t /data
但:
restorecon /data
又变回去了
✅ 正确方式是用 semanage:
semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?"
restorecon -Rv /data
例如:
这些常常 不支持或忽略 SELinux context
type=AVC msg=audit(...): denied { read } for ...
ls -Z /var/www/html
ps -eZ | grep httpd
ausearch -m avc -ts recent
或:
sealert -a /var/log/audit/audit.log
setenforce 0
如果立刻正常 → 就是 context / 策略问题
restorecon -Rv /var/www/html
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
CentOS 中 context 异常,本质就是 SELinux 的安全标签不正确,导致“进程类型”和“文件类型”不匹配,从而被策略拒绝访问。
如果你愿意,可以告诉我:
ls -Z 输出我可以帮你精确分析是哪一类 context 问题。