![为什么 apparmor 会杀死 dhclient?](https://linux22.com/image/1179909/%E4%B8%BA%E4%BB%80%E4%B9%88%20apparmor%20%E4%BC%9A%E6%9D%80%E6%AD%BB%20dhclient%EF%BC%9F.png)
我成功将 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 找到有关该文件的更多信息。
添加建议的规则通常是安全的。