必须先用sestatus确认SELinux是否启用,再用getenforce查当前模式;sestatus显示“SELinux status: enabled”才说明子系统已加载,否则所有SELinux功能均不生效。

当你在Linux服务器上遇到服务启动失败、文件访问被拒,或者日志里反复出现avc denied提示时,必须立刻确认SELinux当前处于哪种运行状态——是正在强制拦截(Enforcing)、仅记录不拦截(Permissive),还是根本没加载(Disabled)。
用getenforce命令快速查看当前模式
这是最轻量、最直接的方式,适合日常巡检或故障初判。
执行:getenforce
输出结果只有三种可能:【Enforcing】、【Permissive】 或 【Disabled】。注意:该命令不区分大小写但输出固定为全大写,且不显示配置文件设定值,只反映内核当前实际生效的模式。
用sestatus命令查看完整状态信息
这个命令能同时告诉你“现在是什么状态”和“下次重启会变成什么状态”,比getenforce更全面,排障时必用。
执行:sestatus
重点看两行:`Current mode` 显示当前运行模式,`Mode from config file` 显示 `/etc/selinux/config` 中设置的默认模式。如果这两行不一致,说明你之前用 `setenforce` 临时改过,但还没重启,配置文件还没生效。
加 `-v` 参数可展开进程与文件上下文详情,但普通检查不需要——它会让输出变长且干扰关键字段定位。
检查配置文件确认持久化设置
配置文件决定系统重启后的初始状态,和当前运行状态可能不同。必须核对,否则误以为关了SELinux,一重启问题重现。
执行:cat /etc/selinux/config | grep "^SELINUX="
你会看到类似 SELINUX=enforcing 的行。这里只认三个合法值:enforcing、permissive、disabled。注意大小写敏感,写成 Enforcing 或 DISABLED 都无效,系统会当作注释跳过,降级使用默认行为。
方法一:直接读取该行内容
方法二:用 grep -E "^(SELINUX=)" /etc/selinux/config 更精准匹配,避免被注释行干扰。
验证SELinux是否真正启用
第一步:运行 sestatus
第二步:观察第一行输出:SELinux status: 后面是 enabled 还是 disabled
第三步:若为 disabled,则无需再看模式——此时 getenforce 必然返回 Disabled,且所有策略、上下文、avc日志全部消失,SELinux子系统未加载。
这一步最关键:很多管理员只查 getenforce,发现是 Permissive 就以为“SELinux没起作用”,却忽略了 sestatus 显示 SELinux status: enabled,说明它仍在内存中运行并持续记录日志——这些日志正是后续调试策略规则的唯一依据。


















