Debian 13 (trixie) - DNS サーバ BIND9 の chroot 化!

Updated:


Debian GNU/Linux 13 (trixie) に構築した DNS サーバを chroot 化する方法についての記録です。

以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)

0. 前提条件

  • Debian GNU/Linux 13.0.0 (trixie; 64bit) での作業を想定。
  • DNS サーバ BIND9 が構築済みであることを想定。
  • chroot ディレクトリは /var/bind9/chroot/ とする。
  • root ユーザでの作業を想定。

1. SystemD ユニットファイルの編集

bind9.service ファイルは以下のようになっているだろう。

File: /etc/systemd/system/bind9.service

[Unit]
Description=BIND Domain Name Server
Documentation=man:named(8)
After=network.target
Wants=nss-lookup.target
Before=nss-lookup.target

[Service]
Type=notify
EnvironmentFile=-/etc/default/named
ExecStart=/usr/sbin/named -f $OPTIONS
ExecReload=/usr/sbin/rndc reload
ExecStop=/usr/sbin/rndc stop
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=bind9.service

次に /etc/default/namedOPTIONS を次のように編集する。(IPv6 を使用しない例)

File: /etc/default/named

OPTIONS="-u bind -4 -t /var/bind9/chroot"

2. chroot ディレクトリの作成

# mkdir -p /var/bind9/chroot/{etc,dev,run/named,var/cache/bind,usr/share}

3. スペシャルファイルの作成

chroot 化に必要なスペシャルファイルを作成し、パーミッションを変更する。

# mknod /var/bind9/chroot/dev/null c 1 3
# mknod /var/bind9/chroot/dev/random c 1 8
# mknod /var/bind9/chroot/dev/urandom c 1 9
# chmod 666 /var/bind9/chroot/dev/{null,random,urandom}

4. ディレクトリの移動

元々の BIND ディレクトリを chroot 用ディレクトリへ移動する。
root hints ファイルも移動する。

# mv /etc/bind /var/bind9/chroot/etc
# mv /usr/share/dns /var/bind9/chroot/usr/share/

5. シンボリックリンクの作成

BIND を chroot 用ディレクトリにリンクするようシンボリックリンクを設定する。

# ln -s /var/bind9/chroot/etc/bind /etc/bind

6. localtime コピー

# cp /etc/localtime /var/bind9/chroot/etc/

7. 所有者・グループ・パーミッションの変更

# chown bind:bind /var/bind9/chroot/etc/bind/rndc.key
# chown bind:bind /var/bind9/chroot/run/named
# chmod 775 /var/bind9/chroot/{var/cache/bind,run/named}
# chgrp bind /var/bind9/chroot/{var/cache/bind,run/named}

8. AppArmor の設定

以下の内容のファイルを新規作成。

File: /etc/apparmor.d/local/usr.sbin.named

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

そして、変更を適用。

# systemctl reload apparmor

9. システムログの設定

rsyslog にログを出力するよう、以下の内容のファイルを新規作成。

File: /etc/rsyslog.d/bind-chroot.conf

$AddUnixListenSocket /var/bind9/chroot/dev/log

10. syslogd の再起動

システムログ設定を編集したので、syslogd を再起動。

# systemctl restart rsyslog

11. BIND の再起動

# systemctl restart named

12. 参考サイト


以上。





 

Sponsored Link

 

Comments