首页/安全/安全加固速查/SELinux/AppArmor 策略变更审计

SELinux/AppArmor 策略变更审计

强制访问控制策略被关停或修改意味着防线降级:策略目录与 xattr 变更纳入审计,安全整改前后做对照。

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

为什么要审计强制访问控制

SELinux(RHEL/CentOS 系)与 AppArmor(Debian/Ubuntu 系)是内核层的强制访问控制,进程即使拿到 root 权限也要先过策略这一关。审计它的意义在于:策略被关停或放宽,等于防线静默降级,而这类动作常常是排障时的“临时处理”,事后很少有人主动恢复。

基本信息

适用平台RHEL/CentOS(SELinux)、Ubuntu/Debian(AppArmor)
审计对象/etc/selinux/、/etc/apparmor.d/、运行时状态目录
记录工具auditd(auditctl 加载规则、ausearch 回查)
高风险动作setenforce 0、修改 config、卸载或替换策略
验收要点策略变更能追溯到人、时间与原因

典型使用场景

  • 事件回溯:确认入侵过程中是否有人尝试关闭强制访问控制
  • 变更审计:谁在故障处理时把 SELinux 切到宽容模式、何时恢复
  • 等保检查:提供策略变更的审计记录与整改对照
  • 策略调试:记录放行操作,避免调试期的宽松策略长期留存
  • 合规取证:证明防护策略在考察周期内持续处于启用状态

审计规则与回查

审计规则与回查
# /etc/audit/rules.d/mac.rules:监控策略目录变更
-w /etc/selinux/ -p wa -k mac_policy
-w /sys/fs/selinux/ -p wa -k mac_policy          # SELinux 运行时状态
-w /etc/apparmor.d/ -p wa -k mac_policy          # AppArmor 策略目录
# 扩展属性变更(策略打标、放行操作常走这条路)
-a always,exit -F arch=b64 -S setxattr,removexattr,fsetxattr,fremovexattr -F auid>=1000 -F auid!=4294967295 -k mac_policy
# 加载规则并回查今天的命中
augenrules --load && ausearch -k mac_policy -ts today | tail -20

动作与监控覆盖对照

动作是否改文件文件监控能否发现
setenforce 0 切宽容不改文件不能,需查 getenforce
修改 /etc/selinux/config改文件可以
卸载或替换 AppArmor 策略改文件可以
运行中直接下发策略不改文件需审计系统调用与扩展属性
把 getenforce 与 aa-status 的输出纳入季度巡检:日志监控补不上“运行时被改、文件没动”这个盲区。
容器内通常看不到 /sys/fs/selinux,运行时规则的验收要在宿主机上做,容器里报“无事件”属预期。

日常巡检清单

  • 每季度确认 getenforce 返回 Enforcing、aa-status 未见异常的策略卸载
  • 核查 /etc/selinux/config 中的 SELINUX 值与运行时状态一致,避免重启后回退到宽容模式
  • 检查审计 key 的命中记录,确认每一次策略目录变更都有对应的工单与原因说明
  • 整改后验证业务行为,避免为了放行业务而长期停留在宽容模式

易错点

  • 把文件监控当成状态监控:setenforce 0 不动任何文件,只靠 -w 规则会漏掉最关键的那次动作
  • 审计规则只写进规则文件没有加载:augenrules --load 之后才生效,文件存在不等于规则在运行
  • 调试期临时放行没有工单留痕:事后无法区分“运维调试”和“攻击者关闭防线”
  • xattr 规则在部分文件系统或内核版本不产生事件:验收时先用 setfattr 触发一次,确认有记录再依赖它

数据来源与参考

  • CIS Linux Benchmark:MAC 审计
  • Red Hat SELinux 文档

相关工具

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