在 CentOS 里提到 “context 拒绝访问”,绝大多数情况是指 SELinux 安全上下文(security context)不匹配,导致进程被 SELinux 拒绝访问文件/端口/资源。下面从原因到排查、解决系统说明。
CentOS 默认启用 SELinux,每个:
都有一个 SELinux context(如 httpd_sys_content_t)。
当 进程 context ≠ 资源允许 context 时,SELinux 会 拒绝访问,即使 rwx 权限正常。
典型报错:
Permission denied
但 ls -l 显示权限没问题。
例如:
/data/wwwdefault_t✅ 正确应为:
httpd_sys_content_t
如:
SELinux 只允许默认端口 context。
如:
cp / tar / mvcontext 不会自动变。
如:
sudo ausearch -m avc -ts recent
或:
sudo tail -f /var/log/audit/audit.log
看到类似:
avc: denied { read } for pid=... comm="nginx"
sudo setenforce 0
如果 立刻恢复正常 → 就是 SELinux context 问题。
⚠ 测试后请恢复:
sudo setenforce 1
示例(Web 目录):
sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
sudo restorecon -Rv /data/www
查看 context:
ls -Z /data/www
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/data/upload(/.*)?"
sudo restorecon -Rv /data/upload
sudo semanage port -a -t ssh_port_t -p tcp 2222
查看:
sudo semanage port -l | grep ssh
sudo audit2why < /var/log/audit/audit.log
或生成策略:
sudo audit2allow -a
⚠ 不建议无脑 audit2allow -M 放行所有
# 临时
setenforce 0
# 永久(不推荐)
vi /etc/selinux/config
SELINUX=disabled
❌ 会降低系统安全性
ls -Z 看文件 contextps -Z 看进程 contextausearch -m avcsetenforce 0 测试semanage + restorecon如果你能告诉我:
audit.log 片段我可以直接给你 精确的一条命令解决方案。