在 CentOS 上出现 “Context 报错”,通常和 SELinux 安全上下文(Security Context) 有关,也可能是 systemd / PAM / 用户会话上下文 的问题。下面按最常见场景给你排查和解决方法。
SELinux: Invalid context
Permission denied
avc: denied
或文件访问异常,但权限本身是对的。
getenforce
Enforcing:强制模式(会拦截)Permissive:宽容模式(只记录)Disabled:关闭ls -Z
或
ls -Zd /path/to/dir
示例:
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0 test.txt
restorecon -Rv /path/to/dir
chcon -R -t httpd_sys_content_t /var/www/html
⚠️ chcon 重启后可能失效,推荐用 semanage
semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?"
restorecon -Rv /data
setenforce 0
永久关闭(需重启):
vi /etc/selinux/config
SELINUX=disabled
pam_selinux systemd: Unable to get valid context
或登录失败、无法切换用户。
id -Z
如果为空或报错:
semanage login -l
semanage login -a -s unconfined_u 用户名
或重置:
semanage login -d 用户名
systemctl status user@1000
Error: failed to start container: invalid security context
setenforce 0
chcon -Rt svirt_sandbox_file_t /data
| 场景 | 大概率是 |
|---|---|
| 文件访问被拒 | SELinux 文件 Context |
| SSH / su 登录失败 | 用户 / PAM Context |
| 服务启动失败 | systemd / SELinux |
| Docker 启动失败 | 容器 Context |
ausearch -m avc -ts recent
或
journalctl -xe | grep avc
请把以下信息发我:
getenforce 输出我可以直接给你一条可执行的修复命令 ✅