温馨提示×

centos context不生效咋办

小樊
43
2026-10-03 04:47:26
栏目: 智能运维

在 CentOS 上 SELinux 的 context(安全上下文)不生效,一般可以从下面几个方向排查和处理。


一、确认 SELinux 是否开启

getenforce
  • Enforcing:正常生效
  • Permissive:只记录不拒绝(看起来像“不生效”)
  • Disabled:context 根本不会起作用

如果是 Disabled,需要:

vi /etc/selinux/config

改:

SELINUX=enforcing

然后 必须重启系统。


二、确认 context 是否真的设置成功

ls -Z /path/to/file

或目录:

ls -Zd /path/to/dir

如果 context 不对,先手动设置:

chcon -t httpd_sys_content_t /var/www/html/index.html

⚠️ 注意:
chcon 只是临时生效,重启或 restorecon 可能覆盖。


三、使用 semanage 永久生效(推荐)

semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -Rv /web

验证:

matchpathcon /web

四、最常见“不生效”原因

1️⃣ 文件是后来复制 / 解压的

SELinux context 不会自动继承,需要:

restorecon -Rv /path

2️⃣ 用了 mv 而不是 cp

  • cp:会按目标目录 context
  • mv:保留原 context(常导致不生效)

解决:

restorecon -Rv /path

3️⃣ 在禁用 SELinux 时创建的文件

这些文件没有正确 context,需要:

restorecon -Rv /

五、排查是否真的被 SELinux 拦截

ausearch -m avc -ts recent

或实时看:

tail -f /var/log/audit/audit.log

如果有 AVC 拒绝,可快速允许(仅调试):

setsebool -P httpd_can_network_connect on

六、典型场景速查

场景 解决
Web 无法访问文件 httpd_sys_content_t + restorecon
FTP/NFS 文件无 context public_content_t
脚本不能执行 bin_t
端口不监听 semanage port -a -t http_port_t -p tcp 8080

如果你能贴一下:

  • CentOS 版本
  • 具体文件 / 服务
  • ls -Z 和报错信息

我可以直接帮你定位是哪一步没生效。

0 踩