最直接确认selinux当前是enforcing模式的方法是运行getenforce命令,若输出为enforcing则表示正在强制执行策略;sestatus可查看更详细的状态及配置来源,但需注意其“current mode”可能缓存,/sys/fs/selinux/enforce文件值(1=enforcing)才反映实时状态。

setenforce 0 是最直接的关闭方式,但它只是把 SELinux 切换到宽容模式(permissive),不是真正“关闭”,也不会影响重启后的行为。
怎么确认当前是强制模式?
运行 getenforce,如果输出是 Enforcing,说明正在强制执行策略。也可以用 sestatus 看更详细的模式和配置来源。
setenforce 0 为什么不能叫“关闭”?
SELinux 没有运行时“完全关闭”的状态:
- setenforce 0 → 进入 Permissive 模式:策略仍加载,但违规只记录不拦截
- setenforce 1 → 回到 Enforcing 模式
- 要真正禁用(Disabled),必须修改配置并重启
- 临时生效命令只有
setenforce 0和setenforce 1,没有setenforce off或类似写法 -
setenforce对 root 权限敏感,非 root 用户执行会报错Permission denied - 某些最小化安装或容器环境里,
setenforce命令可能根本不存在 —— 那说明内核编译时就没启用 SELinux 支持
永久禁用 SELinux(改配置 + 重启)
编辑 /etc/selinux/config,把 SELINUX=enforcing 改成 SELINUX=disabled:
- 注意不是注释掉那行,而是明确写 disabled
- 文件路径也可能是 /etc/sysconfig/selinux(软链接指向前者,但优先以 /etc/selinux/config 为准)
- 修改后必须重启,否则 getenforce 仍可能显示 Enforcing 或 Permissive
- 用
sed一行搞定:sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config - 改完别忘了验证:
grep "^SELINUX=" /etc/selinux/config应该只输出SELINUX=disabled - 重启后运行
getenforce,输出应为Disabled;sestatus中SELinux status:显示disabled
容易被忽略的关键点
很多人以为 setenforce 0 后再改配置就“稳了”,其实:
- 如果改完配置没重启,下次 reboot 后又回到 Enforcing
- SELINUXTYPE=targeted 这行不用动,它不影响是否启用,只控制策略范围
- sestatus -v 输出里 “Mode from config file: enforcing” 表示配置文件还没生效,别信这个字段,要看重启后的 getenforce 结果











