在 CentOS 里提到的 “context 错误”,绝大多数情况是指 SELinux 安全上下文(security context)错误,常见表现有:
Permission denied 但权限看起来是对的SELinux is preventing ... from ...ls -Z 看到文件 context 异常下面按最常见场景给你一套修复方法。
getenforce
Enforcing:SELinux 正在强制生效Permissive:只记录不拦截Disabled:不是 SELinux 问题查看文件上下文:
ls -Z /var/www/html/index.html
查看进程上下文:
ps -Z
查看 SELinux 拒绝日志:
ausearch -m avc -ts recent
# 或
grep AVC /var/log/audit/audit.log
restorecon -Rv /var/www/html
如果是新目录:
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
chcon -t httpd_sys_content_t /var/www/html/test.html
⚠️ chcon 重启或 restorecon 后可能失效
semanage fcontext -a -t httpd_sys_content_t "/srv/site(/.*)?"
restorecon -Rv /srv/site
setsebool -P ftpd_full_access on
semanage fcontext -a -t mysqld_db_t "/new/mysql(/.*)?"
restorecon -Rv /new/mysql
sealert -a /var/log/audit/audit.log
或直接按提示执行:
audit2why < /var/log/audit/audit.log
setenforce 0 # 临时关闭
确认问题是否 SELinux 导致。
生产环境不要长期关闭 SELinux
检查:
noacl / context= 挂载参数/home 但服务无权访问| 错误现象 | 原因 | 修复 |
|---|---|---|
| httpd 403 | 文件 context 不对 | restorecon |
| ssh 无法登录 | home 目录 context 错 | restorecon -Rv /home |
| docker 启动失败 | var lib 上下文错 | restorecon -Rv /var/lib/docker |
如果你能贴出 具体报错信息或命令,我可以给你精确的一条修复命令。