为什么apparmor会杀死dhclient?

lna*_*ppa 5 server networking dhclient dhcp apparmor

我成功地将 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
Run Code Online (Sandbox Code Playgroud)

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

小智 5

为此报告了一个错误: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,
Run Code Online (Sandbox Code Playgroud)

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


小智 3

AppArmor 不会杀死 dhclient,它只是拒绝访问该文件/proc/1878/task/1881/comm,并记录发生的违规情况。如果 AppArmor 杀死了 dhclient,则该消息将apparmor="KILLED"取代apparmor="DENIED".

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

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

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