Bind9 ダイナミックゾーンの更新が Debian11 の Apparmor によって拒否されました。

Bind9 ダイナミックゾーンの更新が Debian11 の Apparmor によって拒否されました。

このチュートリアルで説明されているように、Debian11でchrootを使用してBinding 9をインストールしました。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問題はまだ同じです。 with コマンドを表示すると、apparmor_status正しい名前のプロセス ID が表示されるため、他の無効なプロセスが実行されていません。 chrootedがうまく機能することを期待していますnamed。このプロファイルの試行をオフにしたり完全に無効にしたりしても動的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,

**空の文字列が一致しないためです。

関連情報