Ubuntu 的 AppArmor 安全模块
介绍 AppArmor 是什么、Ubuntu 默认如何启用,服务被 AppArmor 拦截(denied)时怎么查日志、改策略,以及桌面版与服务器版的默认差异。
结论先行
AppArmor 是 Ubuntu 默认的强制访问控制(MAC)模块:给每个服务一份「profile」,限定它能读写哪些路径、起哪些子进程。多数情况下它在后台正常工作;你感知到它,通常是因为某个服务被拦截了(日志里的 denied 记录)。
基本状态查看
sudo aa-status # 已加载 profile 与计数
sudo aa-logprof # 交互把拒绝记录加进 profile
sudo aa-complain /usr/sbin/xxx # 临时改「提示不拦」模式调试
sudo aa-enforce /usr/sbin/xxx # 恢复「拦截」模式
被拦截时的排错链
sudo dmesg | grep apparmor或journalctl -k | grep apparmor找 denied 记录- 记录里会写明:被拦程序、被拒路径、用的哪份 profile
- 判断是「误伤」还是「确实该拦」:误伤 →
aa-logprof把该行加入允许;该拦 → 保持
永远不要为图省事把整个 profile 删掉;宁可精细加白名单。complain 模式长期挂着等于形同虚设。
桌面版与服务器版的默认差异
默认开启/关闭的具体行为以当期发行版说明为准,可用
aa-status实测当前机器状态。索引见 Ubuntu 索引页。