AppArmor 是 Ubuntu、Debian 默认启用的路径级 MAC 机制,通过白名单策略限制程序行为;需用 aa-status 检查状态,aa-autodep/aa-genprof 生成策略,apparmor_parser 加载,aa-complain/aa-enforce 切换模式,并持续用 aa-logprof 审计优化。

AppArmor 是 Ubuntu、Debian 等主流发行版默认启用的强制访问控制(MAC)机制,它通过路径级白名单策略限制程序行为,配置直观、调试友好,特别适合 AI 服务、Web 应用等需快速部署又兼顾安全的场景。
确认 AppArmor 状态与基础检查
加固前先确认系统是否启用并运行正常:
- 运行 sudo aa-status 查看当前加载的配置文件数量、处于 enforce/complain 模式的进程数,以及是否有未加载或冲突的策略
- 若输出提示 "apparmor module is not loaded",说明内核未启用 AppArmor,需检查 GRUB 启动参数是否含
apparmor=1 security=apparmor,并重启生效 - 执行 ls /etc/apparmor.d/ 查看已安装策略目录结构,标准路径下应有
abstractions/(通用规则库)、usr.sbin.*(守护进程)、local/(自定义覆盖)等子目录
为具体应用创建定制化配置文件
以部署 SenseVoice-small 或 Bidili Generator 这类本地 AI 服务为例,避免使用全局宽松策略:
- 先用 sudo aa-autodep /path/to/your/app 自动生成依赖路径骨架(如模型目录、日志路径、临时文件位置)
- 再用 sudo aa-genprof /path/to/your/app 启动交互式配置向导:运行程序、触发典型操作(上传音频、调用 API、保存结果),工具自动捕获并建议权限规则
- 生成的配置文件默认存于
/etc/apparmor.d/usr.bin.your-app,编辑时优先引用abstractions/python或abstractions/audio等已有抽象,而非重复写死路径 - 关键原则:只允许读取模型文件(
/opt/models/sensevoice/** r,),禁止写入;日志目录设为/var/log/sensevoice/** rwk,;网络仅绑定本地端口(network inet tcp,),不开放 raw socket 或 netlink
策略加载与运行模式切换
配置完成后需正确加载并验证效果:
- 执行 sudo apparmor_parser -r /etc/apparmor.d/usr.bin.your-app 重载单个策略(
-r表示替换已有规则) - 用 sudo aa-complain /usr/bin/your-app 切换到 complain 模式——记录所有违规但不阻止,适合上线前灰度观察
- 用 sudo aa-enforce /usr/bin/your-app 切回 enforce 模式正式生效;若服务启动失败,立即查
dmesg | grep apparmor或journalctl -t kernel | grep avc定位被拒操作 - 批量操作可用:sudo aa-disable --all 临时停用全部策略(调试用),sudo aa-enable --all 恢复
日常维护与审计要点
策略不是一次配置就一劳永逸,需结合运行反馈持续优化:
- 定期执行 sudo aa-logprof 分析
/var/log/audit/audit.log中的 AppArmor 日志,将高频出现的“拒绝但合理”的访问请求自动转化为新规则 - 更新模型或更换存储路径后,务必同步修改配置中对应路径,避免因路径变更导致策略失效
- 禁止在生产环境长期使用
abstractions/bash或abstractions/user-tmp等宽泛抽象,它们可能无意开放 shell 执行或任意临时文件写入能力 - 对多用户服务(如 Streamlit Web 界面),额外添加
capability dac_override,(仅当确需绕过文件属主检查时)并严格限定作用范围,不可全局启用


















