首页/安全/安全加固速查/SELinux 强制模式(Enforcing)
主机加固基线90 条

SELinux 强制模式(Enforcing)

SELinux 强制访问控制可在进程被攻破后限制其越权范围(例如 Web 进程读不到 /etc/shadow);运行状态应为 Enforcing,配置持久化默认值同样要改。

安全加固速查安全更新于 2026-10-13

SELinux 挡住了什么

传统权限模型是自主访问控制:只看属主与权限位,进程一旦拿到 root 就等于畅通无阻。SELinux 在进程和资源上打安全上下文标签,由策略决定“哪个进程能访问哪类资源”,构成强制访问控制(MAC)。它的价值在失陷之后:Web 进程即使被攻破,也读不到 /etc/shadow、改不了系统二进制、连不到不该连的端口。基线要求运行时与配置文件两处都处于 Enforcing。

基本信息

加固项强制访问控制开启
适用平台Linux(RHEL/CentOS/Fedora、AlmaLinux、Rocky 等 SELinux 系)
权限要求root
达标判据getenforce 输出 Enforcing,且 /etc/selinux/config 中 SELINUX=enforcing
注意setenforce 只改运行时,重启后回到配置文件的值

典型使用场景

  • 等保与 CIS 基线核查“强制访问控制”条款
  • 公网 Web 服务器失陷后的横向移动阻隔
  • 排查“服务明明配置正确却报权限拒绝”的问题
  • 从 Permissive 切到 Enforcing 前的策略收敛评估
  • 容器宿主机上限制容器逃逸后的越权范围

核查与切换

核查与切换
getenforce            # 当前运行模式
sestatus | head -8    # 模式、配置文件值、策略版本与挂载点概览
setenforce 1          # 临时切 Enforcing,仅本次运行有效
sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
grep '^SELINUX=' /etc/selinux/config   # 持久化确认

三种模式对照

模式行为适用阶段
Enforcing拒绝违规访问并记录 AVC 日志生产达标状态
Permissive只记录不拒绝,等于观察模式切换前评估与排障期,不可长期停留
Disabled完全关闭,标签机制不生效不达标,也失去事后审计线索
配置文件 vs 运行时配置文件决定重启后的值两者不一致会导致“重启后变回去了”的困惑
从 Permissive 切 Enforcing 前先审 AVC 记录(/var/log/audit/audit.log 或 journalctl -t setroubleshoot),直接切换可能让业务立刻中断。正确顺序是先在 Enforcing 下小流量验证、处理策略拒绝(调整文件上下文或用 audit2allow 生成策略),确认干净后再全量切换。
常见的“关掉 SELinux 就好了”其实多数是上下文问题:手工 cp 文件、挂载到非标准目录、或修改了端口配置,都会让标签与策略不匹配。先用 ls -Z、restorecon -Rv 修复上下文,必要时再补策略;把 disabled 当万能手段会永久丢掉一层防护。

易错点

  • setenforce 只改运行时,重启即恢复配置文件的值,两处必须一起改并复核
  • 排障时把 SELINUX=disabled 当常规手段,永久失去一层防护和审计线索,正确做法是收集 AVC 后修正上下文或补策略
  • 在不是 XFS/ext4 这类支持标签的文件系统上折腾标签,机制根本不生效,先确认挂载点是否带 selinux 或 context 参数
  • 从 Disabled 直接切 Enforcing 而没有触发文件系统重新打标(如 touch /.autorelabel 后重启),会出现大面积拒绝

数据来源与参考

  • Red Hat 文档:使用 SELinux
  • CIS Linux Benchmark:Ensure SELinux is not disabled

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌