Apparmor 强制执行消息已开始出现在 Trisquel 7 计算机的系统日志中。受影响的程序在读取模式下请求open
该文件/etc/ld.so.preload
,但被 apparmor 策略拒绝。以下是该消息的第一个实例:-
May 8 21:25:54 box kernel: [928193.797140] type=1400 audit(1462739154.627:76): \
apparmor="DENIED" operation="open" profile="/usr/lib/NetworkManager/nm-dhcp-client.action" \
name="/etc/ld.so.preload" pid=13471 comm="nm-dhcp-client." requested_mask="r" \
denied_mask="r" fsuid=0 ouid=0
其他一些 apparmor 受限程序被拒绝相同的请求,包括 cupsd 和 mysqld。
apparmor 配置文件没有改变,这些消息以前从未出现过 - 所以看起来这些(也许还有其他非约束)程序突然开始尝试读取(空)文件/etc/ld.so.preload
。
我唯一的线索是那天早些时候我已经编译了马梅首次。在第一条消息出现之前,我运行了一台模拟机器,并让它在无人看管的情况下运行。在我返回主机后不久,主机就变得没有响应,我不得不在该消息后大约 20 分钟重置它。
那么这两件事是否有关联?我应该从哪里开始寻找为什么这些程序现在正在寻找预加载库?
答案1
所有程序都尝试打开/etc/ld.so.preload
,这种行为被嵌入到 Glibc 中。但他们只尝试打开它(如果它存在的话)(Glibc 首先调用access
)。
通常/etc/ld.so.preload
不存在,因此每个进程只调用access
,得到否定答案并继续前进。这不会触发 AppArmor 的任何内容。
但如果该文件存在,则进程调用open
从中读取。如果文件为空,动态链接不会受到影响,唯一的影响是性能受到非常轻微的影响。如果有一个 AppArmor 规则在某些程序打开文件时触发,那么您会收到这些警告。
我不知道编译 mame 是否最终会创建/etc/ld.so.preload
,或者是否无关。无论如何,如果文件为空,只需将其删除即可。