在 CentOS(以及一般的 Linux 系统)里,“context 不一致”通常出现在 SELinux 场景中,也可以广义地指系统环境/配置上下文不一致。下面分常见情况解释“为什么会不一致”。
SELinux 给每个文件、进程、端口都打一个“安全标签”(context),格式类似:
unconfined_u:object_r:default_t:s0
系统策略依赖这些 context 来判断“谁可以访问什么”。
cp → 继承目标目录的 contextmv → 保留原 contexttar / rsync / scp → 可能不带正确 context例如:
mv /home/test.html /var/www/html/
结果:test.html 还是 home_t,而不是 httpd_sys_content_t
✅ 修复:
restorecon -Rv /var/www/html
新文件可能使用默认 context,而不是服务期望的 context。
例如:
yum update)ls -Z /var/www/html
ps -Z
semanage fcontext -l | grep www
查看 AVC 拒绝:
ausearch -m avc -ts recent
# 按策略重置
restorecon -Rv /path
# 永久规则
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
sudo 前后环境变量不同su - vs su表现:
:z / :Zdocker run -v /data:/data:Z
CentOS 中 context 不一致,90% 是因为 SELinux 标签没有随文件来源或系统变更而更新。
如果你能告诉我:
ls -Z 输出?我可以更精准地帮你定位和解决。