在 CentOS 里提到 “context 出错”,最常见的是 SELinux 的 file context(文件上下文)问题,也可能是 PAM / login 的 SELinux context,或者是 Docker/Kubernetes 的 context。下面按常见情况给你排查和处理办法。
ausearch -m avc -ts recent
# 或
dmesg | grep avc
通常会看到类似:
type=AVC msg=audit(...): denied { read } for pid=... comm="httpd"
scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:default_t:s0
说明 文件 context 不对。
ls -Z /path/to/file
正常示例:
system_u:object_r:httpd_sys_content_t:s0
✅ 自动修复(最安全)
restorecon -Rv /path/to/dir
✅ 手动设置
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
# 重新加载策略
load_policy
# 或
setenforce 1
查看当前模式:
getenforce
Enforcing:严格模式(可能报错)Permissive:只记录不拦截Disabled:关闭临时切换:
setenforce 0 # Permissive
setenforce 1 # Enforcing
⚠️ 不建议长期 disabled,可先 Permissive 排错。
如果你遇到:
Unable to get valid context for user
解决:
semanage login -l
修复用户 context:
semanage login -a -s unconfined_u username
或编辑:
vi /etc/selinux/targeted/contexts/users/unconfined_u
如果是:
error: context deadline exceeded
通常是:
检查:
kubectl config get-contexts
kubectl config current-context
你可以直接告诉我:
我可以给你精确命令,不用你一个个试。