このチュートリアルで説明されているように、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,
**
空の文字列が一致しないためです。