为什么 apparmor 会杀死 dhclient?

为什么 apparmor 会杀死 dhclient?

我成功将 KVM 服务器升级到 20.04.1 LTS,但后来尝试通过 ssh 访问它时,没有到服务器的网络路由,而虚拟机仍然运行良好。登录到控制台后,我发现网桥丢失了 IPv4 地址,不再运行dhclient。这种情况反复发生,网桥在启动时会收到 IPv4,但似乎在第一次租约后就丢失了。发布后,dhclient -r br0我在日志中发现了以下内容:

audit: type=1400 audit(1611698389.262:14): apparmor="DENIED" operation="open" profile="/{,usr/}sbin/dhclient" name="/proc/1878/task/1881/comm" pid=1878 comm="dhclient" requested_mask="wr" denied_mask="wr" fsuid=0 ouid=0

我可以通过添加/proc/*/task/*/comm wr,来解决这个问题/etc/apparmor.d/local/sbin.dhclient。但是,首先,为什么 dhclient 需要对 /proc 的写访问权限……?我的备份服务器也是 20.04.1 LTS,没有这个也可以正常运行。

答案1

有报告称此错误:https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/1918410 并在 AppArmor 中修复https://gitlab.com/apparmor/apparmor/-/merge_requests/730使用好的字符串:

owner @{PROC}/@{pid}/task/[0-9]*/comm rw,

要解决此问题,请/etc/apparmor.d/sbin.dhclient使用文本编辑器编辑文件并向其中添加上述行。

答案2

AppArmor 不会终止 dhclient,它只会拒绝访问文件/proc/1878/task/1881/comm,并记录违规行为的发生。如果 AppArmor 终止了 dhclient,则消息将apparmor="KILLED"改为apparmor="DENIED"

如果 dhclient 在拒绝后退出,那是因为它将拒绝作为致命错误处理。

至于为什么 dhclient 要求访问该文件,它似乎想要更改某些线程的通信。您可以使用 man 5 proc 找到有关该文件的更多信息。

添加建议的规则通常是安全的。

相关内容