在 CentOS(以及 RHEL 系列)里,context 不一致通常指的是 SELinux 安全上下文(security context)不一致,这是一个非常常见的问题。下面从“是什么、为什么、怎么查、怎么修”四个角度说明。
SELinux 给每一个文件、进程、端口都打一个“标签”(context),格式类似:
user:role:type:level
例如:
system_u:object_r:httpd_sys_content_t:s0
所谓“context 不一致”,一般是指:
cp / mv / tar 等方式拷贝文件这是最常见原因。
cp 默认 不会保留原 contextmv 在同文件系统会保留旧 contexttar 解压如果不加 --selinux 也容易错✅ 例:
cp index.html /var/www/html/
新文件的 context 可能不是 httpd_sys_content_t
例如你把网站放到:
/srv/myweb/
但 SELinux 不知道这个目录该是什么类型。
例如:
不同系统、不同策略版本,context 可能不同。
期间创建的文件没有 context,开启后就会“异常”。
ls -Z /var/www/html/
ps -Z
ausearch -m AVC -ts recent
或
grep AVC /var/log/audit/audit.log
根据系统默认策略修复:
restorecon -Rv /var/www/html
chcon -t httpd_sys_content_t /srv/myweb/index.html
⚠️ 重启或 relabel 后可能失效。
semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
restorecon -Rv /srv/myweb
touch /.autorelabel
reboot
CentOS 中 context 不一致,本质是因为文件/目录的 SELinux 标签不符合系统策略预期,通常由拷贝、移动、自定义路径或策略变更引起。
如果你愿意,可以告诉我:
ls -Z 输出我可以直接帮你给出精准修复命令。