首页/安全/取证与溯源速查/AppArmor 拒绝日志核查
Linux 取证135 条

AppArmor 拒绝日志核查

AppArmor 以路径为核心的策略模型记录 profile 拒绝事件,常见于内核日志;被拒绝的进程与文件组合是排查线索。

取证与溯源速查安全更新于 2026-10-13

AppArmor 拒绝日志的价值

AppArmor 以路径为核心为程序加载策略文件,策略之外的访问会被拒绝,拒绝事件通常写入内核日志。日志中的 DENIED 行给出进程名、被拒绝的路径与请求的权限,能直接反映某个程序尝试访问了它本不该碰的文件,这类痕迹在常规文件系统日志里看不到。策略有两种模式:enforce 会真正阻断并记录,complain 只记录不阻断。取证时必须先确认各策略处于哪种模式,否则会把「仅记录」误读成「已被阻止」。

基本信息

检索方式dmesg | grep -i apparmor、journalctl -k
状态查看aa-status、/sys/kernel/security/apparmor
策略目录/etc/apparmor.d/
模式区别enforce 阻断并记录,complain 仅记录

典型使用场景

  • 确认某个服务是否尝试访问策略外的文件
  • 解释程序报权限错误但文件权限本身正常的原因
  • 排查容器内进程被宿主策略拦截的情况
  • 统计被拒绝最多的路径,判断程序行为异常
  • 评估把策略从 complain 切到 enforce 后的影响面

查看拒绝记录

查看拒绝记录
aa-status 2>/dev/null | head            # 列出已加载策略与各自模式
journalctl -k --since '2026-01-01' 2>/dev/null | grep -i 'apparmor.*DENIED' | tail -20
dmesg -T | grep -i apparmor | tail -10   # 带时间的内核环缓冲视图
grep -R 'complain' /etc/apparmor.d/ 2>/dev/null | head   # 找出仍处于仅记录模式的策略
cat /sys/module/apparmor/parameters/enabled 2>/dev/null   # 模块是否启用

DENIED 行读法

字段含义判读要点
profile触发拒绝的策略名对应到哪个程序的策略
operation被拒绝的操作,如 open、exec区分读取与执行尝试
name被访问的目标路径异常路径是定位重点
requested_mask请求的权限位如 r、w、x,反映访问意图
内核日志会轮转,早期拒绝事件可能已经不在环缓冲里;需要长期留证时应在策略层面调整审计与日志转发,而不是依赖现场回看。
complain 模式只记录不阻断,事件出现并不代表访问被成功阻止;判断实际效果必须结合 aa-status 显示的模式与程序后续行为。
容器内进程同时受容器自身与宿主策略约束,单看一层日志容易得出错误结论,排查时先确认策略加载在哪个命名空间。

易错点

  • 把日志轮转当成没有拒绝事件,遗漏真实存在的拦截记录
  • 把 complain 模式的记录当作已阻断,结论与事实相反
  • 只看容器内策略,忽略宿主侧叠加的约束
  • 切到 enforce 模式前未在测试环境验证,业务进程被阻断

数据来源与参考

  • AppArmor 官方文档(日志与 profile 模式)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌