CentOS 中 “context 丢失” 通常指 SELinux 安全上下文(Security Context)异常,比如:
unlabeled_t、null 或不正确SELinux is preventing ...ls -Z 看不到正确的 context下面按常见场景给你一套排查与修复方法。
ls -Z /path/to/file
正常示例:
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
异常示例:
-rw-r--r--. root root ?
或
unlabeled_t
getenforce
Enforcing:强制模式(需要修复)Permissive:仅警告Disabled:SELinux 未启用(context 问题影响小)restorecon(推荐)restorecon -v /path/to/file
restorecon -Rv /var/www/html
✅ 这是最安全、最推荐的方式
restorecon -Rv /
⚠️ 会遍历整个系统,大型服务器慎用
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
restorecon -Rv /home
restorecon -Rv /root
查看审计日志:
ausearch -m avc -ts recent
自动生成修复策略:
audit2allow -a
或临时允许:
setenforce 0
⚠️ 不建议长期关闭 SELinux
touch /.autorelabel
reboot
系统重启后会:
✅ 这是“终极修复方案”
rpm -Va selinux-policy-targeted
如有缺失:
yum reinstall selinux-policy-targeted
yum install policycoreutils-python-utils
semanage fcontext -l | grep httpd
| 现象 | 原因 | 解决 |
|---|---|---|
ls -Z 显示 ? |
context 丢失 | restorecon |
| 服务被 SELinux 阻止 | context 错误 | 修正 context |
| 迁移后无法访问 | context 未继承 | restorecon -R |
| 系统异常断电 | context 损坏 | /.autorelabel |
请告诉我:
ls -Z 输出我可以直接给你一条可复制执行的修复命令 ✅