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/named の OPTIONS を次のように編集する。(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. 参考サイト
以上。
Comments