[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

named を安全に立ち上げる

OpenBSD を見習って、Solaris や FreeBSD, NetBSD マシンでも、chroot させて、 かつ非 root ユーザの権限で named を動かしてみようと思います。

目次


1. 環境

OS は FreeBSD-4.1R と NetBSD-1.5, Solaris2.5.1 です。
bind は 9.1.0 あるいは 9.1.2, 9.1.3 です。
chroot 先は /var/named です。データの置場所は /etc/namedb と仮定し (chroot 前でいうところの /var/named/etc/namedb, 以下同様)、 secondary で primary からゾーン転送したデータを /etc/namedb/data に 置くものとします。
設定ファイルは、/etc/named.conf あるいは /etc/namedb/named.conf です。

2. 設定方法

2.1 ユーザの作成

まずは、named を動かすためのユーザとそのグループを作成します。
ユーザ名は named, グループ名は dns とします。
FreeBSD の場合は以下のようにします。

  # pw groupadd dns -g 70
  # pw useradd named -u 70 -g 70 -d /var/named -s /sbin/nologin

NetBSD および Solaris の場合は以下のようにします。
# NetBSD の場合は -s /sbin/nologin の方がよいかもしれません。

  # groupadd -g 70 dns
  # useradd -u 70 -g 70 -d /var/named -s /bin/true named

2.2 /var/named 以下の作成

必要最小限の状態を、chroot 先の /var/named 以下に作ります。
FreeBSD の場合は以下のようにします。

  # mkdir /var/named
  # cd /var/named
  # mkdir dev etc var
  # mknod dev/null c 2 2
  # mkdir -p etc/namedb/data
  # chown -R named etc/namedb
  # cp -p /etc/namedb/* etc/namedb
  # ln -s namedb/named.conf etc/named.conf
  # mkdir var/run
  # chgrp dns var/run
  # chmod 775 var/run

FreeBSD の場合は比較的簡単で、/dev/null と、データを置くための場所 と、PID ファイルを置くための場所があれば問題ないようです。
ただし、syslog にログを渡すための仕組みが必要になります。
syslogd は、デフォルトでは /var/run/log を通じてログを収集しますが、 -l オプションで指定した socket も見てくれます。そこで、syslogd に /var/named/dev/log も見るようにしてもらいます。

  # kill `cat /var/run/syslog.pid` && syslogd -s -l /var/named/dev/log

OS 起動時にも上記で syslogd が動作するようにするため、 /etc/rc.conf の syslogd_flags に -l /var/named/dev/log を追加しておきましょう。
起動時に /var/named/dev/log が残っていると、syslogd が文句を言います が、動作上は問題ないようです。うっとおしければ syslogd の起動前に 消すように細工しておけばよいのではないかと思います。
NetBSD の場合は、デバイスファイル /dev/klog 経由で syslog に書き込める ようですので、syslogd に何か特別なことをやってもらう必要はありません。

  # cd /var/named
  # mkdir dev etc var
  # mknod dev/null c 3 2
  # mknod dev/klog c 16 0
  # mkdir -p etc/namedb/data
  # chown -R named etc/namedb
  # cp -p /etc/namedb/* etc/namedb
  # ln -s namedb/named.conf etc/named.conf
  # mkdir var/run
  # chgrp dns var/run
  # chmod 775 var/run

Solaris の場合は、いろいろと余計に必要になります。

  # mkdir -p /var/named/usr/share/lib/zoneinfo
  # cd /usr/share/lib/zoneinfo
  # tar cf - . |(cd /var/named/usr/share/lib/zoneinfo; tar xfp -)
  # cd /var/named
  # mkdir dev etc usr var
  # cd dev
  # mknod log c 21 5
  # mknod null c 13 2
  # mknod zero c 13 12
  # mknod tcp c 11 42
  # mknod udp c 11 41
  # chgrp sys *
  # chmod 666 *
  # chmod 640 log
  # mkdir ../var/run
  # chgrp dns ../var/run
  # chmod 775 ../var/run
  # cd ../etc
  # mkdir -p namedb/data
  # chown -R named namedb
  # cp -p /etc/namedb/* namedb
  # cp -p /etc/named.conf .
  # cp -p /etc/netconfig .

Solaris の場合、/dev/null 以外にも、/dev/zero などのデバイスファイルが 必要になります。また、truss すると zoneinfo を見に行っていましたので、 ごっそりコピーしておきました。これはひょっとすると必要ないのかもしれ ません(ない場合に動作するかどうかは未確認です)。
また、socket を生成できるようにするために /dev/tcp などのデバイスファ イルが必要です。それに、/etc/netconfig がないと setnetconfig が動作 しないようです。(すみません、よくわからずに書いてます。)
データや PID ファイル置場が必要なのは FreeBSD と同じです。
ログに関しては、NetBSD と同様、/dev/log 経由で syslog に書き込める ようですので、これも syslogd に特別なことをやってもらう必要はありません。

2.3 named の起動

FreeBSD や Solaris の場合は、以下のように起動します。

  # /usr/local/sbin/named -t /var/named -u named

NetBSD のパッケージ(bind9)の場合は、まず /etc/rc.conf に以下を追加 します。

  named9=YES        named_flags="-t /var/named -u named"

次に、/etc/rc.local に以下を追加します。

  if [ -f /usr/pkg/etc/rc.d/named9 ]; then
        /usr/pkg/etc/rc.d/named9 start
  fi

そして、/usr/pkg/etc/rc.d/named9 を実行可能にし、pidfile を以下の ように変更しておきます。

  pidfile="/usr/pkg/etc/named9/var/run/${name}.pid"

ps コマンドやログ(/var/log/messages あるいは /var/adm/messages)で named が動いているかどうか確認します。
named.conf がないと言われる場合は、-c オプションで指定できます。 ただし、その時指定するパスは chroot 後のパスになります。

3. 動作確認

bind の動作確認と同じです。→
こちら

4. メリット

自分なりに考えてみました。

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Sat Aug 18 15:12:59 2001