Debian 服务被 AppArmor 拦截(denied)?
服务装完或升级后功能异常,多为 AppArmor 策略把越权操作拒了。本文给出现象判断、切投诉模式定位拒绝路径、补规则后恢复的完整可复现路径。
简短答案
服务「起不来 / 功能被阉割 / 日志刷 denied」,根因是 AppArmor 策略没覆盖程序实际访问的路径或能力。可复现路径:aa-status 看策略状态 → 内核日志找 denied 记录 → 临时把该 profile 切 complain 模式收集被拒路径 → 补规则后恢复 enforce。
现象对照
| 现象 | 常见原因 |
|---|---|
| 服务 systemd 报 fail,日志有 apparmor DENIED | 策略缺路径或能力 |
| 服务能起但某功能无效 | enforce 模式拦截了越权访问 |
| 升级/重装软件后才出现 | 新程序路径不在旧 profile 内 |
Ubuntu 与 Debian 发行条目 覆盖的机器默认都启用 AppArmor,新装的 Debian 13.7 DVD 与 网络安装版 同理,装完即可复现本类问题。
排查步骤
sudo aa-status # 各 profile 的 enforce/complain 状态
journalctl -k | grep -iE 'apparmor|denied' | tail -50
sudo aa-complain /etc/apparmor.d/<profile> # 临时切投诉模式,只记录不拦截
复现故障、收集到被拒路径后,把规则补进 profile 再恢复:
sudo aa-enforce /etc/apparmor.d/<profile>
sudo apparmor_parser -r /etc/apparmor.d/<profile>
sudo systemctl restart <服务名>
自写程序没有现成 profile 时,用 sudo aa-genprof <程序> 交互式生成;属系统包自带的 profile 优先用 sudo aa-logprof 按日志增量修改,少手改文件。
操作小结
aa-status+ 内核日志确认 denied 记录与责任 profileaa-complain切投诉模式,复现故障收集被拒路径- 补路径/能力规则,
aa-enforce恢复并重启服务 - 系统包自带 profile 用
aa-logprof修改,便于后续升级覆盖