首页/安全/安全加固速查/AppArmor 强制执行(aa-status)
主机加固基线90 条

AppArmor 强制执行(aa-status)

Ubuntu/Debian/SUSE 系的强制访问控制实现;核查已加载 profile 与 enforce 数量,确保 sshd、nginx 等关键服务处于 enforce 而不是 complain 观察态。

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

AppArmor 与两种模式

AppArmor 是 Ubuntu、Debian、SUSE 上基于路径的强制访问控制(MAC):它为每个程序挂一份 profile,声明该进程能访问哪些文件、目录与能力,超出范围的访问被拒绝。profile 有两种运行状态,enforce 会真正阻断违规访问,complain 只记录不阻断。加固重点就是确认 sshd、nginx、数据库等关键服务的 profile 处于 enforce,而不是长期停在 complain 观察态。

基本信息

适用平台Linux(Ubuntu/Debian/SUSE 系,RHEL 系等价物为 SELinux)
权限要求root(或 sudo)
常用工具aa-status、aa-enforce、aa-complain、apparmor_parser
profile 目录/etc/apparmor.d/
基线关键服务的 profile 处于 enforce mode

典型使用场景

  • 基线核查:统计已加载 profile 数与 enforce、complain 的分布
  • 排障收尾:把临时切到 complain 的 profile 切回 enforce
  • 自定义策略上线:为新部署的服务编写并加载 profile
  • 服务加固:限制 Web 服务只能读取站点目录,降低被入侵后的影响面
  • 合规检查:强制访问控制机制是否真正启用并生效

核查与单 profile 操作

核查与单 profile 操作
sudo aa-status | head -20                       # 各状态计数与 profile 列表
sudo aa-status --complaining | head              # 只看仍处于 complain 的项
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx    # 切换为强制模式
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx   # 排障时切回观察模式
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx  # 重载单个 profile
dmesg | grep -i apparmor | tail -5               # 查看 denied 记录定位越权访问

输出逐列读法

视图/字段含义正常与异常
profiles are loaded已加载的 profile 总数为零说明策略未加载或未启用
profiles are in enforce mode强制模式数量关键服务不在其中=策略未生效
profiles are in complain mode观察模式数量长期非零说明整改未闭环
processes are unconfined未受约束的进程数关键服务出现在此列需处置
dmesg 的 denied被拒绝的访问记录排障高价值线索,也可能是策略过严
complain 模式只记录不阻断,属于排障过渡态:生产机要定期核查是否遗留长期不放的 profile,那等于策略没有生效。

落地要点

  • aa-status 需要 root 权限,自动化巡检脚本要以 sudo 运行,否则输出不全
  • 自定义 profile 先在测试机以 complain 观察足够长时间,再切 enforce
  • 每次 profile 变更记入配置管理,便于回溯是谁在什么时候放开了哪条规则
  • 被拒绝的访问既可能是攻击行为,也可能是策略过严,结合业务日志判断
  • 确认内核已启用 AppArmor:部分发行版需要内核参数配合,否则策略只是摆设
同类的强制访问控制还有 SELinux:RHEL 系默认使用它,两者不要在同一台机器上重复配置,按发行版选一套并保持一致。

易错点

  • 把服务切到 complain 排障后忘记切回:策略长期不生效,安全假设全部落空
  • 自定义 profile 写错就切 enforce:服务直接起不来,需要先在测试机观察足够久
  • 巡检脚本不用 sudo 运行:aa-status 输出不全,误判为没有策略
  • 内核未启用 LSM 就以为策略生效:aa-status 无输出或报错时,先确认机制本身是否打开

数据来源与参考

  • Ubuntu 文档:AppArmor
  • apparmor(7) 手册

相关工具

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