DNS: chroot-ed named

BIND は嫌いだが、仕事で使うこともあるのでインストールしてみた。 BIND のセキュリティは信頼していないので、非 root 権限かつ chroot は必須。 以下 Debian GNU/Linux 4.0 (正式リリース前) での話。 標準では chroot 環境が用意されないので構築する必要がある。

bind9 パッケージをインストールし、デーモン (named) を停止する。

# apt-get install bind9
...

/etc/init.d/bind9 stop

Stopping domain name service...: bind.

chroot 環境のディレクトリ階層を作る。 chroot 先は /var/lib/named とした。

# mkdir /var/lib/named

cd /var/lib/named

mkdir -p dev etc/bind var/cache/bind var/run/bind

cp -a /dev/null /dev/random dev/

chroot 環境に見せたいディレクトリをマウントするため、 /etc/fstab に以下のエントリを追加し、マウントする。

/etc/bind       /var/lib/named/etc/bind          none    bind    0       0
/var/cache/bind /var/lib/named/var/cache/bind    none    bind    0       0
/var/run/bind   /var/lib/named/var/run/bind      none    bind    0       0
# mount -a

rndc.key ファイルの所有ユーザーが意味もなく bind になっているので、 root 所有に変更しておく。

# chown root /etc/bind/rnds.key

chroot 環境からソケット経由で syslog にアクセスさせるため、 /etc/default/syslogdSYSLOG の値を以下のように変更し、 syslogd を再起動する。

SYSLOGD="-a /var/lib/named/dev/log"
# /etc/init.d/sysklogd restart
Restarting system log daemon: syslogd.

bind9 (named) を chroot させるため、 /etc/default/bind9OPTIONS の値を以下のように変更し、 デーモンを起動する。

OPTIONS="-u bind -t /var/lib/named"
# /etc/init.d/bind9 start
Starting domain name service...: bind.

デーモンが動作していることを確認する。

# rndc status
number of zones: 4
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running

host -t ns example.com 127.0.0.1

Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: example.com name server a.iana-servers.net. example.com name server b.iana-servers.net.

念の為、 非 root 権限で動作しているかどうかを ps コマンドの出力で、 chroot 環境で動作しているかどうかを /proc/named のプロセス ID/root で確認しておく。

以上でとりあえず動くが、 これだけでは named が CPU の数を知ることができず、 2 CPU 以上の環境でも found 1 CPU, using 1 worker thread (syslog より) と誤認識してしまう。 これを回避するにはディレクトリ /var/lib/named/proc を作成し、proc ファイルシステムをマウントして cpuinfo を見せてやる必要がある。 曖昧な記憶によると、過去に proc ファイルシステム関連の脆弱性があったような気がするので、 今回は止めておいた。

add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0

コメントを書く

Your email is never shared. * 印の項目は必須項目です。

*
*