在 CentOS(以及 RHEL 系列)中,你说的 “context” 通常是指 SELinux 安全上下文(SELinux context)。当文件、目录或进程的 SELinux context 不正确时,可能会导致服务无法访问文件、权限被拒等问题。
下面按常见场景说明如何“修复 CentOS 的 context”。
ls -Z /path/to/file
ps -Z
示例:
ls -Z /var/www/html/index.html
# 正常应为:
# system_u:object_r:httpd_sys_content_t:s0
restorecon(推荐)如果文件原本应有默认 context,但被改错了:
restorecon -Rv /path/to/dir
示例:
restorecon -Rv /var/www/html
-R:递归-v:显示过程临时修改(重启或 restorecon 可能恢复):
chcon -t httpd_sys_content_t /var/www/html/index.html
⚠️ chcon 不持久,容易被 restorecon 覆盖。
如果目录是新创建的,需要永久生效:
semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
restorecon -Rv /data/www
查看已定义规则:
semanage fcontext -l | grep www
例如 httpd、mysqld 等:
systemctl restart httpd
ps -Z | grep httpd
如果 context 不对,可用:
restorecon -Rv /usr/sbin/httpd
semanage fcontext -a -t httpd_sys_content_t "/srv/web(/.*)?"
restorecon -Rv /srv/web
semanage fcontext -a -t public_content_t "/ftp(/.*)?"
restorecon -Rv /ftp
chcon -t bin_t /usr/local/bin/myscript.sh
getenforce
# Enforcing / Permissive / Disabled
查看审计日志:
ausearch -m avc -ts recent
# 或
tail -f /var/log/audit/audit.log
可以对比同类型目录:
ls -Z /var/www/html
ls -Z /your/dir
如果你能具体说明:
Permission denied + avc: denied)我可以给你精确的一条命令修复方案。