Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 061

AppArmor

审核人Cybersecurity entrepreneur & security researcher

AppArmor 是什么?

AppArmor基于路径的 Linux 强制访问控制系统,Ubuntu 和 SUSE 用其作为 SELinux 的简化替代方案,用于限制单个程序。


AppArmor 是一种 Linux Security Module (LSM),它通过以文件路径、capabilities 和网络原语表达的、面向每个程序的配置文件来实施强制访问控制,而非 SELinux 所用的 inode 标签。它源自 Immunix,由 SUSE 与 Canonical 维护,自 2000 年代后期起成为 Ubuntu 与 openSUSE 默认的 MAC 框架,并自内核版本 2.6.36 起进入主线内核。配置文件位于 /etc/apparmor.d,可加载为 enforce 模式或 complain(仅记录)模式,并配套 aa-genprof、aa-logprof、aa-easyprof 等辅助工具。其基于路径的设计通常比 SELinux 策略更易编写与审计,代价是对重命名、bind mount 与 chroot 的语义较弱。

在容器中,除非通过 --security-opt apparmor= 覆盖,否则 Docker 会为每个容器在 enforce 模式下生成并将 docker-default 配置文件加载到 tmpfs;它会阻止对 /proc/sysrq-trigger/sys 等敏感路径的写入,并与 seccomp 和已剥离的 capabilities 协同构成纵深防御。AppArmor 还被 snapd、libvirt、LXD 和 Firefox 使用。它的局限是实实在在的:由于规则匹配的是路径而非底层对象,硬链接与挂载技巧有时能绕过某个配置文件,而一个配置文件的优劣取决于其规则——过于宽泛的通配符(例如允许 /** rwk)会让其失去意义。CVE-2019-5736(runc 宿主机二进制覆写)表明,容器逃逸可能发生在默认配置文件未覆盖的区域,因此 AppArmor 会与 seccomp、用户命名空间和只读挂载叠加使用,而不是单独依赖它。

flowchart TB
  P[进程执行] --> K[内核 LSM 钩子]
  K --> Q{配置文件已加载?}
  Q -- No --> U[未受限:普通 DAC]
  Q -- Yes --> M{操作在配置文件中?}
  M -- enforce 模式 --> R{是否允许?}
  R -- Yes --> A[允许]
  R -- No --> D[拒绝 + 审计日志]
  M -- complain 模式 --> L[允许 + 记录违规]

典型的工作流程是先在 complain 模式下运行新的配置文件,实际使用一遍该应用,再用 aa-logprof 将记录到的访问转换为规则,然后切换到 enforce 模式。

示例

  1. 01

    Ubuntu 默认提供 Firefox、MySQL、Evince 的 AppArmor 配置文件。

  2. 02

    snapd 使用 AppArmor(配合 seccomp)隔离每个已安装的 snap 包。

常见问题

AppArmor 是什么?

基于路径的 Linux 强制访问控制系统,Ubuntu 和 SUSE 用其作为 SELinux 的简化替代方案,用于限制单个程序。 它属于网络安全的 密码学 分类。

AppArmor 是什么意思?

基于路径的 Linux 强制访问控制系统,Ubuntu 和 SUSE 用其作为 SELinux 的简化替代方案,用于限制单个程序。

如何防御 AppArmor?

针对 AppArmor 的防御通常结合技术控制与运营实践,详见上方完整定义。

AppArmor 还有哪些其他名称?

常见的别称包括: AA。

相关术语

另见