什么会导致程序在启动时突然读取 /etc/ld.so.preload ?

什么会导致程序在启动时突然读取 /etc/ld.so.preload ?

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,或者是否无关。无论如何,如果文件为空,只需将其删除即可。

相关内容