首页/云/Docker 容器速查/AppArmor 与容器配置校验
资源与安全50 条

AppArmor 与容器配置校验

Ubuntu/Debian 上 Docker 默认加载 docker-default 的 AppArmor 策略:限制文件与能力访问,可自定义策略或按容器覆盖。

Docker 容器速查云更新于 2026-10-13

AppArmor 与容器

AppArmor 是 Ubuntu、Debian 等发行版默认启用的强制访问控制机制。宿主启用后 Docker 会给容器套用 docker-default 策略,限制文件与能力访问;也可以按容器指定自定义策略,或对特定容器临时放宽。

基本信息

默认策略docker-default,宿主启用 AppArmor 时自动应用
覆盖方式--security-opt apparmor=<策略名> 或 apparmor=unconfined
检查命令aa-status 查看已加载策略
适用平台Ubuntu、Debian、SUSE 等启用 AppArmor 的发行版
作用域策略由宿主加载,容器内无法修改

典型使用场景

  • 核对线上容器是否真的套用了默认策略
  • 需要更严格限制的业务,加载自定义策略后挂到容器上
  • 排障时临时用 unconfined 判断问题是否由策略引起
  • 安全基线检查:列出未启用策略的容器
  • 发行版迁移后确认强制访问控制的落地情况

检查与指定策略

检查与指定策略
sudo aa-status | head -20     # 查看已加载策略与处于 enforcing 的进程
docker run -d --security-opt apparmor=docker-default --name api app/api:1.4.2
docker inspect -f '{{json .HostConfig.SecurityOpt}}' api   # 核对容器的策略参数
docker run -d --security-opt apparmor=my-policy --name web nginx:1.27-alpine

检查要点

关注点正常表现异常表现
宿主策略aa-status 里能看到 docker-default未启用则该选项无效
容器参数inspect 里能看到 apparmor 项为空说明用的默认策略
访问行为按策略允许或拒绝被拒时留下审计记录
排障路径按日志定位具体规则盲目关策略难以定位根因
策略由宿主机加载,容器内无法修改;发行版默认策略已覆盖多数加固需求,自定义前先评估是否真的需要。
宿主机未启用 AppArmor(非 Debian 系常见)时该选项不生效,检查输出会明确提示,别默认策略已经生效。
自定义策略调试失败会让容器直接起不来,新策略先在测试机验证加载与运行,再推到生产。
被策略拒绝的访问通常写入系统审计日志,排障时先看日志里的具体规则名,再决定是改策略还是改应用行为。
同一宿主上不同容器可以用不同策略,但策略文件必须先加载到内核;策略缺失会导致容器启动时找不到策略而失败。

易错点

  • 宿主未启用 AppArmor 时该选项不生效,检查输出会明确提示,别默认策略已生效
  • 自定义策略调试失败会让容器直接起不来,新策略先在测试机验证加载与运行
  • 为排障改成 unconfined 后忘记改回来,会长期失去这层限制,临时放宽要落回编排
  • 策略文件未加载或丢失时容器启动会因找不到策略失败,部署顺序里要先下发策略

数据来源与参考

  • Docker 官方文档:AppArmor 与容器(docs.docker.com/engine/security/apparmor)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌