Bind9 动态区域更新在 Debian11 中被 Apparmor 拒绝

Bind9 动态区域更新在 Debian11 中被 Apparmor 拒绝

我在 Debian11 上使用 chroot 安装了 bind9,如本教程所述:https://wiki.debian.org/Bind9#Debian_Jessie_and_later

它工作正常,但一旦我打开动态区域更新,它就会失败,并在系统日志中显示以下原因:

Jul 18 19:22:52 NS kernel: [12161.968582] audit: type=1400 audit(1658164972.109:107): apparmor="DENIED" operation="open" profile="named" name="/var/bind9/chroot/" pid=18104 comm="named" requested_mask="r" denied_mask="r" fsuid=106 ouid=0

我认为这可能是缺少一些选项,/etc/apparmor.d/local/usr.sbin.named所以我添加了/var/bind9/chroot它,现在文件看起来像这样:

/var/bind9/chroot/** r,
/var/bind9/chroot/etc/bind/** r,
/var/bind9/chroot/usr/** rw,
/var/bind9/chroot/var/** rw,
/var/bind9/chroot/dev/** rw,
/var/bind9/chroot/run/** rw,

然后我重新启动了apparmor服务named,但问题还是一样。如果我查看 withapparmor_status命令,它会带来正确的命名进程 ID,因此不会有其他错误进程在运行。期待这一点,chrootednamed工作正常。如果我关闭此配置文件的强制执行或完全禁用apparmor,则动态更新也可以工作,但我想以某种方式修复此问题。

更新:

如果我修改/etc/apparmor.d/local/usr.sbin.named为:

/var/bind9/chroot/** r,
/var/bind9/chroot/etc/bind/** rw,
/var/bind9/chroot/usr/** rw,
/var/bind9/chroot/var/** rw,
/var/bind9/chroot/dev/** rw,
/var/bind9/chroot/run/** rw,

然后动态区域更新就可以工作了。但仍然会收到我之前注意到的错误消息,并在触发动态区域更新时准确收到该错误消息。为什么我收到这些消息有点烦人。

答案1

日志消息(已换行以方便阅读)

Jul 18 19:22:52 NS kernel: [12161.968582] audit: type=1400 audit(1658164972.109:107): \
    apparmor="DENIED" operation="open" profile="named" name="/var/bind9/chroot/" pid=18104 \
    comm="named" requested_mask="r" denied_mask="r" fsuid=106 ouid=0

指示该named进程试图读取该目录/var/bind9/chroot但被拒绝。

规则示例如下man 5 apparmor.d(强调我的):

当 AppArmor 查找目录时,所查找的路径名将以斜杠结尾(例如,/var/tmp/);否则它不会以斜杠结尾。只有与尾部斜杠匹配的规则才会匹配目录。一些例子,/tmp/没有一个与目录本身匹配, 是:

  /tmp/*
      Files directly in /tmp.

  /tmp/*/
      Directories directly in /tmp.

  /tmp/**
      Files and directories anywhere underneath /tmp.

  /tmp/**/
      Directories anywhere underneath /tmp.

换句话说,你的第一条规则

/var/bind9/chroot/** r,

只允许读取文件/var/bind9/chroot/目录中,但是读取目录列表不允许。这显然就是我们named想要做的。

要修复它,您需要添加一行:

/var/bind9/chroot/ r,

因为**不会匹配空字符串。

相关内容