在 CentOS 上遇到 “context 报错”,通常和 SELinux 安全上下文(security context) 有关。下面按常见场景给你排查和解决思路。
典型报错:
SELinux is preventing ... from read access on the file
type=AVC ... scontext=... tcontext=... tclass=file
或 ls -Z 看到 context 异常:
ls -Z /var/www/html
解决:
# 恢复默认 context
restorecon -Rv /var/www/html
# 或修改指定 context
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
restorecon -Rv /data/web
报错示例:
Permission denied (SELinux context)
快速判断:
getenforce
# Enforcing / Permissive / Disabled
临时验证是否是 SELinux 问题:
setenforce 0
如果能启动,说明就是 context / policy 问题。
正式解决:
# 查看拒绝日志
ausearch -m AVC -ts recent
# 生成并应用策略
sealert -a /var/log/audit/audit.log
或:
grep nginx /var/log/audit/audit.log | audit2why
例如 nginx 监听 8888 被拒绝:
semanage port -l | grep http
添加端口:
semanage port -a -t http_port_t -p tcp 8888
NFS / 外部盘常见:
mount -o context="system_u:object_r:httpd_sys_content_t:s0" /dev/sdb1 /data
或在 /etc/fstab:
/dev/sdb1 /data ext4 context="system_u:object_r:httpd_sys_content_t:s0" 0 0
# 查看 SELinux 状态
sestatus
# 查看文件 context
ls -Z
ps -Z
# 恢复 context
restorecon -Rv 目录
# 查看 AVC 拒绝
ausearch -m AVC
sealert -a /var/log/audit/audit.log
请把以下信息发我:
getenforce 输出我可以一步一步帮你修 ✅