AppArmor 是 Linux 上实用的 MAC 工具,适合快速为单个应用构建沙箱;需确认启用、生成策略、调试模式、生产加固四步完成部署。

AppArmor 是 Linux 上最实用的强制访问控制(MAC)工具之一,特别适合快速为单个应用构建沙箱环境。它不依赖复杂的标签系统,用纯文本策略文件就能限制程序能读什么、写什么、连什么网络、调用哪些系统资源。
一、确认 AppArmor 已启用并运行
不是所有发行版默认启用 AppArmor,即使已安装也要手动启动:
- 检查状态:
sudo apparmor_status—— 若提示“AppArmor not enabled”,需启用 - 启用服务:
sudo systemctl enable --now apparmor - 验证内核加载:
zcat /proc/config.gz | grep CONFIG_SECURITY_APPARMOR(若不可用,查/boot/config-$(uname -r))应显示y或m
二、为具体程序生成并加载策略
以一个 AppImage 应用或自研 CLI 工具为例,推荐从学习模式起步:
- 生成初始 profile:
sudo aa-genprof /path/to/your-app,按提示运行几次该程序,自动捕获行为 - 编辑策略文件:
sudo nano /etc/apparmor.d/usr.bin.your-app,补充关键规则,例如:owner @{HOME}/.config/your-app/** rw,/tmp/your-app-*.tmp rwk,deny /etc/shadow r,network inet tcp, - 重载策略:
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.your-app
三、策略调试与运行模式切换
刚写的策略容易误拦正常功能,建议分阶段验证:
- 临时切到 complain 模式(只记录不阻止):
sudo aa-complain /usr/bin/your-app - 复现操作后查看日志:
sudo dmesg | grep "apparmor.*DENIED"或journalctl | grep apparmor - 确认无误后切回 enforce 模式:
sudo aa-enforce /usr/bin/your-app - 批量管理:
sudo aa-unconfined查看未受保护进程;sudo aa-disable可临时停用某 profile
四、生产环境加固要点
面向服务类应用(如语音识别、本地 AI 工具链),需叠加多层约束:
- 绑定专用用户:创建无登录权限用户运行程序,再在 profile 中用
user=claw_agent显式限定 - 禁用危险能力:在 profile 开头添加
capability dac_override,→ 改为deny capability dac_override, - 路径白名单优先:避免通配符滥用,如用
/opt/myapp/{bin,lib}/** mr,替代/opt/** mr, - 配合 seccomp:AppArmor 控制资源路径,seccomp 过滤系统调用,二者互补不冲突


















