getenforce直接显示selinux当前运行模式(enforcing/permissive/disabled),是轻量可靠的实时状态快照;sestatus则同时展示当前模式与配置文件设定值,避免重启后配置不生效;seinfo需加参数才输出策略元数据,否则无响应。

getenforce:三秒确认 SELinux 当前是否真在“管事”
直接运行 getenforce,它只输出一行:要么是 Enforcing,要么是 Permissive,要么是 Disabled。这是最轻量、最可靠的“实时状态快照”,不查配置、不读磁盘,只看内核当前执行策略的模式。
常见错误现象:getenforce 返回 Disabled,但 sestatus 显示 enabled —— 这说明 SELinux 内核模块已被卸载(比如用 selinux=0 启动参数),此时其他命令可能失效或行为异常。
-
Enforcing:策略正在生效,违规操作会被拒绝(如访问被标记为httpd_sys_content_t的文件却由非httpd_t进程发起) -
Permissive:策略仍在加载,但所有拒绝动作都被绕过,只记日志到/var/log/audit/audit.log或dmesg -
Disabled:SELinux 完全未启动,setenforce会报错Operation not supported
sestatus:看懂“配置 vs 实际”双状态,避免重启后翻车
sestatus 是唯一能同时告诉你“现在怎么跑”和“重启后打算怎么跑”的命令。关键字段有两组:Current mode(当前运行模式)和 Mode from config file(配置文件设定值)。
使用场景:排查“为什么我改了 /etc/selinux/config 却没生效?”—— 很可能 Current mode 是 Permissive,但 Mode from config file 是 enforcing,说明你只临时切过模式,还没重启。
- 加
-v可看到进程和文件上下文示例,适合调试 Web 服务权限问题 - 加
-b能列出所有布尔值开关(如httpd_can_network_connect),比翻文档快得多 - 注意
SELinux status: enabled≠Current mode: enforcing;前者只表示模块已加载,后者才决定是否拦截
seinfo:查策略细节时别被空输出坑住
seinfo 不是状态检查命令,而是策略元数据浏览器。它默认不输出任何内容,必须带参数才有信息,新手常以为命令坏了。
典型误操作:只输 seinfo,回车后光标闪半天没反应,其实它在等你指定要查什么。
-
seinfo -a:列出所有类型(type)、角色(role)、属性(attribute)—— 输出极长,建议配合less或grep -
seinfo -x -t httpd_t:查httpd_t域允许访问哪些类型(即它的“白名单”) - 若提示
Could not open policy handle,大概率是 SELinux 处于Disabled模式,或策略文件损坏(/sys/fs/selinux/policy不可读)
临时关 SELinux 的正确姿势:setenforce 0 ≠ 关闭 SELinux
setenforce 0 实际是切换到 Permissive 模式,不是关闭。SELinux 依然在运行、依然记录 AVC 拒绝日志、依然维护安全上下文——只是不拦你。
为什么这样做?因为很多故障(如 Nginx 无法读取自定义路径、容器挂载失败)需要先排除 SELinux 干扰,又不能贸然禁用(禁用需重启且破坏最小权限原则)。
- 执行后务必用
getenforce验证,别信“刚才敲了就一定成功” -
setenforce 0在重启后自动恢复原配置,不会持久化——这点常被运维忽略,导致上线后突然报错 - 若
setenforce 0报错Permission denied,说明你没用 root 权限,或当前已是Disabled模式(此时该命令不支持)
真正要关 SELinux,得改 /etc/selinux/config 里的 SELINUX=disabled 并重启;但除非你明确知道后果,否则只推荐用 Permissive 模式过渡。










