getenforce返回Enforcing表示SELinux正在强制拦截权限;需明确选择临时切Permissive模式(setenforce 0)或永久禁用(改/etc/selinux/config为SELINUX=disabled并重启)。

getenforce 返回 Enforcing,说明 SELinux 正在强制拦截权限——这不是“关不关”的问题,而是你得明确:**临时切宽容模式,还是永久卸载策略加载**。两者目的、效果、风险完全不同。
怎么确认当前 SELinux 状态
别猜,直接查:
运行 getenforce —— 输出 Enforcing 表示正在拦;Permissive 表示只记录不拦截;Disabled 才是真正没加载。
更全的信息用 sestatus,它会告诉你当前模式、配置文件设定值、策略类型等。
setenforce 0 是临时切换,不是“关闭”
setenforce 0 只是把当前运行的 SELinux 模式从 Enforcing 切成 Permissive,它:
- 不修改任何配置文件
- 重启后自动恢复为
Enforcing - 仍会往
/var/log/audit/audit.log写 AVC 拒绝日志(只是不阻断) - 某些服务(比如
httpd或容器运行时)在Permissive下可能仍因标签不匹配而异常
注意:setenforce 1 是开强制模式,不是“关”——网上有些教程写反了,踩坑点就在这儿。
永久禁用必须改 /etc/selinux/config 并重启
真正让 SELinux 不再加载,得编辑配置文件并重启:
- 用
vim /etc/selinux/config(或vi、nano)打开 - 找到
SELINUX=enforcing这一行(注意大小写,不是selinux=) - 把它改成
SELINUX=disabled(不是permissive) - 保存退出(
vim下按Esc→ 输入:wq→ 回车) - 必须执行
reboot或init 6,光 reload 不生效
补充:部分旧系统也认 /etc/sysconfig/selinux,但 CentOS 7 官方路径是 /etc/selinux/config;如果两个文件都存在,以 /etc/selinux/config 为准。
改完重启后验证是否真禁用
重启后别信自己记性,立刻验证:
- 运行
getenforce—— 必须输出Disabled(不是Permissive) - 运行
sestatus——SELinux status:后面必须是disabled,且Loaded policy name:为空或显示nil - 检查
/sys/fs/selinux目录是否存在:如果已禁用,该挂载点通常不存在或为空
容易忽略的一点:有些自动化脚本或 Ansible role 会用 sed 替换配置,但若没处理好注释行(比如 #SELINUX=enforcing),可能替换失败却不报错——建议改完手动 cat /etc/selinux/config | grep SELINUX 确认值。


















