SELinux真正起作用需同时满足:运行模式为enforcing或permissive(非disabled)、SELINUXTYPE策略类型配置正确且已加载、内核参数未禁用SELinux;若原为disabled,必须touch /.autorelabel并重启以重标文件上下文。

要让 SELinux 真正起作用,必须让它运行在 enforcing 模式,并确保内核已加载、策略已正确应用。单纯改配置不重启、或跳过上下文重标,常导致服务启动失败、文件访问被拒——这不是配置错了,而是状态没真正就绪。
确认当前 SELinux 是否可用
别只看配置文件,先验证内核是否加载了 SELinux:
- 运行
getenforce:只返回Enforcing、Permissive或Disabled;若输出Disabled,说明模块未加载,setenforce会直接报错 - 运行
sestatus:重点看三行:
SELinux status: 必须是enabled(不是disabled)
Current mode: 当前实际运行模式
Configured mode: 配置文件设定的模式,和当前不一致说明需重启生效 - 如果
sestatus命令不存在,先安装工具:
RHEL/CentOS:yum install policycoreutils -y
Fedora/Rocky:dnf install policycoreutils -y
Ubuntu/Debian:apt install selinux-utils -y
临时切换到 enforcing 模式(测试用)
适用于已启用 SELinux 但当前是 permissive 的情况,可快速验证策略是否影响服务:
- 执行
setenforce 1,再运行getenforce确认输出为Enforcing - 该操作立即生效,但重启即失效,不修改任何配置文件
- 若执行时报错
Permission denied,说明 SELinux 实际处于 disabled 状态,需走永久启用流程
永久启用 enforcing 模式(生产环境标准操作)
这是真正启用强制访问控制的必要步骤,分三步闭环:
- 编辑主配置:
vi /etc/selinux/config,确保两行准确无误:SELINUX=enforcingSELINUXTYPE=targeted(推荐保留默认策略类型) - 检查 GRUB 内核参数是否禁用了 SELinux:
编辑/etc/default/grub,在GRUB_CMDLINE_LINUX行中移除selinux=0或enforcing=0
执行grub2-mkconfig -o /boot/grub2/grub.cfg(BIOS)或对应 EFI 路径(UEFI)更新引导 - 重启前,如原状态为
disabled,必须创建重标标记:touch /.autorelabel
重启后系统将自动遍历整个文件系统,为每个文件打上正确的安全上下文标签,耗时取决于磁盘大小
验证与排障关键点
重启后不能只看 getenforce,还要确认策略真正落地:
- 运行
sestatus -v,观察 “Policy from config file” 是否加载成功,“Loaded policy name” 是否为targeted - 查日志定位拦截原因:
ausearch -m avc -ts recent | audit2why,或直接看/var/log/audit/audit.log中的 AVC denied 记录 - 常见问题场景:
Web 服务无法读取网页文件 → 检查ls -Z /var/www/html,上下文应为httpd_sys_content_t
自定义端口(如 8080)绑定失败 → 运行semanage port -l | grep http_port_t,缺则添加:semanage port -a -t http_port_t -p tcp 8080











