SELinux当前状态需用getenforce(返回Enforcing/Permissive/Disabled)或sestatus(显示运行态与配置态)确认;临时切换用setenforce 0(切至Permissive),永久禁用须修改/etc/selinux/config中SELINUX=disabled并重启。

getenforce 返回 Enforcing 时,SELinux 正在强制拦截权限——这不是“可选开关”,而是运行时策略引擎,直接关不掉,只能切模式或卸载策略。
怎么快速确认 SELinux 当前状态
别猜,直接跑命令:getenforce。它只返回三个值:Enforcing(拦一切)、Permissive(只记录不拦截)、Disabled(内核没加载策略)。
更全的信息用:sestatus,它会显示当前模式、配置文件设定、策略类型等。
注意:getenforce 和 sestatus 结果可能不一致——前者是运行时状态,后者包含配置文件预期值。
setenforce 0 是临时切换,不是关闭
setenforce 0 实际是把模式从 Enforcing 切到 Permissive,所有策略照常加载,只是不执行拒绝动作,只往 /var/log/audit/audit.log 写 AVC 日志。
常见误区:
-
setenforce 1是开强制,不是“开 SELinux”——SELinux 本身早就在运行 -
setenforce 0不影响已运行的进程,但新启动的服务会按Permissive模式走 - 重启后失效,完全不持久
永久禁用必须改 /etc/selinux/config 并重启
CentOS 7 的 SELinux 配置只认 /etc/selinux/config(不是 /etc/sysconfig/selinux,后者是软链接或旧路径,优先以 config 为准)。
关键操作只有一步:
- 用
vim /etc/selinux/config打开文件 - 找到
SELINUX=enforcing这行(注意大小写和等号两边无空格) - 改成
SELINUX=disabled——不是permissive,那是临时模式 - 保存退出:
:wq
改完不重启无效。必须执行
reboot 或 init 6,否则内核仍加载策略。
改完重启后仍显示 Enforcing?检查这些点
最常踩的坑不是操作错,而是判断错:
-
getenforce返回Enforcing但sestatus显示disabled→ 说明重启没成功,或 GRUB 启动参数里加了selinux=1 - 改的是
/etc/sysconfig/selinux而不是/etc/selinux/config→ CentOS 7 默认只读前者,但实际生效的是后者 - 用了
sed替换但没加-i参数,或路径写错(比如漏了/etc),导致文件根本没改 - 重启后进单用户模式或 init=/bin/bash,跳过了 SELinux 初始化流程
验证是否真禁用:重启后
getenforce 必须返回 Disabled,且 ls /sys/fs/selinux 应报 “No such file or directory”。


















