为什么要审计强制访问控制
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 的命中记录,确认每一次策略目录变更都有对应的工单与原因说明
- 整改后验证业务行为,避免为了放行业务而长期停留在宽容模式