  Chroot-BIND8 HOWTO
  Scott Wunsch, scott at wunsch.org
  v1.4, 1 July 2001
  中野武雄 nakano at apm.seikei.ac.jp
  v1.4j1, 3 January 2002

  この文書は BIND 8 のネームサーバを "chroot jail" の内部で、非 root ユ
  ーザとして実行させるようなインストールのやり方を説明します。これによっ
  てセキュリティが強化され、またセキュリティが破られたときも影響を最小限
  にできます。こちらの文書は、昔の (でも依然としてよく使われている) BIND
  8 を対象にしています。 BIND 9 に対して同様の情報を提供する、別の文書も
  あります。
  ______________________________________________________________________

  目次

  1. はじめに
     1.1 What?
     1.2 Why?
     1.3 Where?
     1.4 How?
     1.5 おことわり

  2. jail の用意
     2.1 ユーザの作成
     2.2 ディレクトリ構造
     2.3 BIND のデータを配置する
     2.4 システムのサポートファイル
     2.5 ログ記録
        2.5.1 理想的な解
        2.5.2 別の解

  3. BIND のコンパイル
     3.1 パスの修正
     3.2 ビルドする

  4. できたての BIND のインストール
     4.1 jail 外部へのツールのインストール
     4.2 バイナリ
     4.3 init スクリプトを編集する。
     4.4 設定を変更する

  5. ジ・エンド
     5.1 BIND の起動
     5.2 以上!

  6. 付録 - 後に BIND をアップグレードするには
  7. 付録 - 謝辞
  8. 付録 - 文書の配布ポリシー

  ______________________________________________________________________

  1.  はじめに

  この文書は Chroot-BIND8 HOWTO です。最新版の置かれているマスターサイト
  は ``Where?''  を見てください。読者は BIND (the Berkeley Internet Name
  Domain) の設定方法・利用方法を既に知っているとして話を進めます。知らな
  い人は、まず DNS HOWTO を読むと良いでしょう。またお使いの UNIX 系シス
  テムにおけるコンパイル・インストールについては、読者は習熟しているもの
  とします。

  1.1.  What?

  この文書は、BIND のインストール時に取ることのできる、付加的なセキュリ
  ティ対策について説明します。まず、BIND を ``chroot jail'' の内部で動作
  させるよう設定する方法について説明します。すなわち、BIND は閉じ込めら
  れた小さなディレクトリツリーの外部にあるファイルを見ることができなくな
  るのです。また、BIND を非 root ユーザで実行させるような設定も行いま
  す。

  chroot の背後にある考え方は、とても単純です。 BIND (あるいは他のプロセ
  ス) を chroot jail の内部で実行すると、そのプロセスはファイルシステム
  のうち jail の内部しか見ることができなくなるのです。例えば、この文書で
  は、BIND を /chroot/named ディレクトリに chroot した状態で実行します。
  BIND にとっては、このディレクトリの中身が / のように見えるのです。この
  ディレクトリの外部には一切アクセスできません。公開システムに ftp した
  ことのある人は、おそらく既にこの chroot jail に出会ったことがあると思
  います。

  1.2.  Why?

  なぜ BIND を chroot jail の内部で動作させると良いのでしょうか。それ
  は、仮に悪い奴が BIND の穴を使ってアクセスを得たとしても、そのアクセス
  できる範囲を最小限に制限できるからです。 BIND を非 root ユーザ権限で動
  作させるのも同じ理由からです。

  これは通常言われているセキュリティ対策 (最新版を使う、アクセス制限をす
  る、など) の、いわば「おまけ」とみなすべきで、これを代替するものと考え
  てはいけません。

  読者が DNS のセキュリティに興味をお持ちなら、他の製品を調べてみるのも
  良いかもしれません。 BIND を StackGuard
  <http://www.immunix.org/products.html#stackguard> と共に構築すれば、
  きっと安全性をより向上させてくれるでしょう。使い方は簡単です。普通の
  gcc と同じです。また Dan Bernstein の書いた DNScache
  <http://cr.yp.to/dnscache.html> は、BIND の代わりに利用できる安全なソ
  フトウェアです。【訳注: djbdns <http://cr.yp.to/djbdns.html> に改名し
  たようです】 Dan は qmail の著者でもあります。

  1.3.  Where?

  この文書の最新版は、常に Linux/Open Source Users of Regina, Sask. の
  web サイトより入手できます。 <http://www.losurs.org/docs/howto/Chroot-
  BIND8.html> です。

  現在はこの文書の日本語版もあり、中野武雄 nakano at apm.seikei.ac.jp が
  管理しています。これは <http://www.linux.or.jp/JF/JFdocs/Chroot-
  BIND8-HOWTO.html> から入手できます。

  BIND は the Internet Software Consortium <http://www.isc.org/> の
  <http://www.isc.org/bind.html> から入手できます。この文書の執筆時点で
  の最新版は 8.2.4 です。 BIND 9 が使えるようになってからだいぶたち、実
  際の業務に使っている人も多いようです。こちらでは chroot の処理がかなり
  簡単かつ見通し良くなっていますので、そろそろアップグレードを考えてもい
  いかもしれません。 BIND 9 を使っている方は、 Chroot-BIND HOWTO をご覧
  になってください。この文書と同じ場所にあるはずです。

  8.2.3 より前のすべてのバージョンの BIND 8 には、既知のセキュリティホー
  ルがあります。必ず最新版を使うように、気をつけてください!

  1.4.  How?

  私はこの文書を、自分自身で chroot 環境な BIND をセットアップした経験に
  基づいて書きました。私の場合は、既に BIND を (自分の Linux ディストリ
  ビューションの) パッケージ形式でインストールしてありました。おそらく読
  者のほとんども同じでしょう。ですので、ここでは既にインストール済みの
  BIND から設定ファイルを移動して修正し、パッケージは削除して、新しいの
  をインストールすることにします。でもまだパッケージは削除しないでくださ
  いね。まずそこからいくつかファイルが必要になりますから。

  まだ BIND をインストールしていない人でも、この文書の方法を利用すること
  はできます。違いは、私が既存のファイルをコピーしてくるよう指示した部分
  で、そのファイルをゼロから書き起こす必要がある、というだけです。この際
  には DNS HOWTO が役に立つでしょう。

  1.5.  おことわり

  これらの記述は私のシステムでは動作しました。しかし読者のところでの結果
  は異なるかもしれません。これは 1 つのアプローチに過ぎず、同様の設定を
  行うにはいろいろな方法が有り得ます (一般的なアプローチはだいたい同じに
  なるでしょうが)。これは、私が試みた中で最初に動作したやり方だったの
  で、ここに書き記したにすぎません。

  私の現在までに至る BIND の経験では、 Linux サーバにしかインストールを
  行っていません。しかし、この文書の説明の大半は、他の種類の UNIX にも容
  易に適用できるはずです。私の気付いた違いについては、できるだけ記述する
  つもりです。

  2.  jail の用意

  2.1.  ユーザの作成

  「はじめに」で述べたように、 BIND を root 権限で実行するのはあまり良い
  考えではありません。従って、まず最初に BIND 専用のユーザを作りましょ
  う。この目的に、nobody のような既存の一般向けユーザは、決して使うべき
  ではありません。しかし、SuSE や Linux Mandrake など、最初からこのため
  のユーザ (普通 named という名前) を用意しているディストリビューション
  もあるので、その場合はお望みならこのユーザを用いても構いません。

  さて、ユーザを追加するには、次のような行を /etc/passwd に加えます。

       named:x:200:200:Nameserver:/chroot/named:/bin/false

  そして次の行を /etc/group に加えます。

       named:x:200:

  これで BIND 用の named というユーザとグループができました。 UID と GID
  (この例では両方とも 200) が、お使いのシステムで他と重なっていないよう
  に注意しましょう。このユーザはログインする必要がないので、シェルは
  /bin/false にしてあります。

  2.2.  ディレクトリ構造

  次に、chroot jail に使用するディレクトリ構造を作ってあげる必要がありま
  す。ここが BIND の生活の場となるわけです。これはファイルシステムのどこ
  でも構いません。非常に神経質な人は、独立したボリューム (パーティショ
  ン) に置きたいとさえ思うかもしれませんね。ここでは /chroot/named を使
  います。まず以下のようなディレクトリ構造を作ってください。

       /chroot
         +-- named
              +-- bin
              +-- dev
              +-- etc
              |    +-- namedb
              +-- lib
              +-- var
                   +-- run

  【訳注: Debian ユーザでバイナリの再コンパイルを行いたくない人 (後述)
  は、 /chroot/named/etc/namedb を /chroot/named/etc/bind としましょう】

  2.3.  BIND のデータを配置する

  既に通常のかたちで BIND がインストールできていて、これを利用しているな
  ら、 named.conf ファイルとゾーンファイルがあるはずです。これらのファイ
  ルは chroot jail の中に移動 (あるいは安全にやるならコピー) して、BIND
  から見えるようにしてやる必要があります。 named.conf は
  /chroot/named/etc へ、ゾーンファイルは /chroot/named/etc/namedb へ移動
  します。例えば:

       # cp -p /etc/named.conf /chroot/named/etc/

       # cp -a /var/named/* /chroot/named/etc/namedb/

  【訳注: Debian の場合は named.conf の場所は /chroot/named/etc/bind に
  なります。ゾーンファイルの置き場所は named.conf 中の記述に依存するので
  すが、通常は named.conf と同じディレクトリになっています。】

  BIND はおそらく namedb ディレクトリと、そこに置かれたファイル (の一部)
  に対する書きこみ権限を必要とします。例えば、お使いの DNS があるゾーン
  をスレーブでサービスするなら、 BIND はそのゾーンファイルを更新できなけ
  ればなりません。また BIND は統計情報をダンプできますので、それもこの
  ディレクトリに書けるようにしてやる必要があります。これらの理由から、こ
  のディレクトリ (とその中身) の所有者は named ユーザにしておくべきで
  しょう。

       # chown -R named:named /chroot/named/etc/namedb

  【訳注: 具体的には、named.conf の "options" 宣言中の directory 文が、
  これらの書きこみが行われるディレクトリになります。これはゾーンファイル
  のパス指定のベースディレクトリでもあります。

  Debian の流儀ですと、この directory は /var/cache/named になっており、
  各ゾーンファイルはフルパスで指定するかたちになっています。この場合は

  # mkdir -p /chroot/named/var/cache/namedb
  # chown -R named:named /chroot/named/var/cache/namedb

  などとすることになるでしょう。】

  BIND は /var/run ディレクトリにも書きこみ権限を必要とします。 pid ファ
  イルと ndc ソケットをここに作るからです。次のコマンドでこれを可能にし
  てやりましょう。

       # chown named:named /chroot/named/var/run

  2.4.  システムのサポートファイル

  BIND が chroot jail 内部での実行を始めると、 jail 外部のファイルへは一
  切アクセスできなくなります。しかし、システムの C ライブラリなど、いく
  つかの重要なファイルには実行後もアクセスできなければなりません。実際に
  どのライブラリが必要になるかは、お使いの UNIX OS に依存します。最新の
  Linux システムなら、以下のコマンドを利用すれば必要なファイルを適切な場
  所にちゃんと配置してくるはずです。

       # cd /chroot/named/lib
       # cp -p /lib/libc-2.*.so .
       # ln -s libc-2.*.so libc.so.6
       # cp -p /lib/ld-2.*.so .
       # ln -s ld-2.*.so ld-linux.so.2

  こうする代わりに、BIND のバイナリを静的にリンクしてビルドし、これを
  chroot jail 以下に置いて利用することも可能です。 ldconfig も jail の内
  部にコピーして実行し、 jail 環境用の etc/ld.so.cache を作りましょう。
  次のコマンドがこれを行います:

       # cp /sbin/ldconfig /chroot/named/bin/
       # chroot /chroot/named /bin/ldconfig -v

  BIND はもう一つファイルを jail の内部に必要とします。いつもの
  /dev/null です。ここでも、このデバイスノードを作るために必要なコマンド
  はシステムによって異なるでしょう。 /dev/MAKEDEV スクリプトを調べて確認
  してください。システムによっては /dev/zero が必要なこともあります。ほ
  とんどの Linux システムでは、以下のコマンドが使えます。

       # mknod /chroot/named/dev/null c 1 3

  【訳注

  # chmod go+w /chroot/named/dev/null

  も必要だと思います。】

  最後に、さらにファイルを 2〜3、jail 内部の /etc ディレクトリに持ってく
  る必要があります。特に /etc/localtime (システムによっては
  /usr/lib/zoneinfo/localtime かもしれません) が、 BIND に正しい時刻でロ
  グ記録をさせるには必要です。また named グループの含まれる簡単な group
  ファイルも作成する必要があります。以下のコマンドがこれらの面倒を見てく
  れます。

       # cp /etc/localtime /chroot/named/etc/

       # echo 'named:x:200:' > /chroot/named/etc/group

  GID (この例では 200) にご注目。先に本当の /etc/group で定義したものと
  同じにしなければなりません。

  2.5.  ログ記録

  本物の囚人とは異なり、BIND はログ記録を壁に書くことはできません :-)。
  通常 BIND はログを、システムのロギングデーモンである syslogd 経由で記
  録します。このタイプのログ記録は、特殊なソケットである /dev/log を通し
  てログエントリを送信することで行われます。しかしこれは jail の外部にあ
  りますから、BIND からは使えません。でもありがたいことに、これを解決す
  る方法はいくつか存在します。

  2.5.1.  理想的な解

  このジレンマに対する理想的な解決法には、 OpenBSD で導入された -a ス
  イッチをサポートする、比較的新しいバージョンの syslogd が必要です。
  syslogd(8) の man ページをチェックして、自分の使っているのがこれかどう
  か見てください。

  サポートしていれば、syslogd を起動する際のコマンドラインに ``-a
  /chroot/named/dev/log'' を追加するだけで OK です。 SysV-init をすべて
  使っているシステム (Linux ディストリビューションのほとんどはそう) な
  ら、起動は通常 /etc/rc.d/init.d/syslog ファイルでなされます。例えば、
  私の Red Hat Linux システムでは、私は

       daemon syslogd -m 0

  の行を

       daemon syslogd -m 0 -a /chroot/named/dev/log

  と変更しました。

  Caldera OpenLinux システムでは ssd というデーモンランチャを使ってお
  り、これは設定を /etc/sysconfig/daemons/syslog から読みます。この中の
  オプション行を以下のように修正するだけです。

       OPTIONS_SYSLOGD="-m 0 -a /chroot/named/dev/log"

  同様に SuSE システムでは、このスイッチは /etc/rc.config ファイルに追加
  するのが良いそうです。

       SYSLOGD_PARAMS=""

  という行を

       SYSLOGD_PARAMS="-a /chroot/named/dev/log"

  とすれば OK です。

  【訳注: Debian なら /etc/init.d/syslogd の

       SYSLOGD=""

  という行を

       SYSLOGD="-a /chroot/named/dev/log"

  とします。】

  お使いのシステムでの変更方法がわかったら、 syslogd を再起動するだけで
  す。kill して再び (追加パラメータとともに) 起動してもいいですし、
  SysV-init スクリプトを使って次のようにするのでも良いでしょう。

       # /etc/rc.d/init.d/syslog stop
       # /etc/rc.d/init.d/syslog start

  再起動できたら、/chroot/named/dev に以下のような log という「ファイ
  ル」ができているはずです。

  srw-rw-rw-   1 root     root            0 Mar 13 20:58 log

  2.5.2.  別の解

  古い syslogd を使っている場合は、ログを取るには別の方法を見つけなけれ
  ばなりません。例えば hoellogd のような、「プロキシ」として動作するよう
  設計されているプログラムも存在します。これは chroot された BIND からロ
  グエントリを受け取り、それを通常の /dev/log ソケットに渡します。

  あるいは、BIND を設定して、ログを syslog に送るのではなくファイルに書
  きこむようにもできます。この方法を選ぶなら、BIND の文書にあたって詳細
  を調べてください。

  3.  BIND のコンパイル

  【訳注: この章の内容は、 ndc の -c, -p, -n といったオプションを使えば
  解決可能ではないかと思います。これらはそれぞれ、 named との通信に使う
  ソケット、 pid ファイル、named 本体、をデフォルト以外にするものです
  (-n は undocumented ですが)。 ndc の実行時に -c
  /chroot/named/var/run/ndc -p /chroot/named/var/run/named.pid -n
  /chroot/named/usr/sbin/named を指定してやれば、ディストリビューション
  で配布されているバイナリがそのまま使えるかと思います。】

  BIND のソースは <http://www.isc.org/bind.html> で見つかるはずです。必
  要なのは bind-src.tar.gz パッケージです。確実に最新版を入手すること!

  3.1.  パスの修正

  ここでちょっと事態は複雑になります。 BIND パッケージの個々の部分が、同
  じディレクトリを (jail 内部で実行しているかどうかによって) 別々の名前
  で参照するからです。が、できるだけ読者を混乱させないよう頑張ります :-)

  特に気をつけなければならないディレクトリが /var/run です。ここの中身
  が、メインの named デーモン (jail 内部) と ndc ユーティリティ (jail 外
  部) の両方で必要となるからです。まずこのディレクトリが、外部世界から見
  つかるように全体を設定しましょう。これを行うには
  src/port/linux/Makefile.set (Linux 以外を使っている人は別のディレクト
  リです) の

       DESTRUN=/var/run

  という行を

       DESTRUN=/chroot/named/var/run

  に修正します。インストール先のパスを /usr から /usr/local へ変更したい
  人は、ここでそうしてください。

  これで、すべてのものからディレクトリが見つかるようになったはずです。た
  だし、named デーモンを除いては。これは jail 内部の /var/run を見なけれ
  ばならないのです。この問題を避けるには、named のソースに少々変更が必要
  です。 src/bin/named/named.h ファイル中の次の行を見つけてください。

       #include "pathnames.h"

  この直後に

       #define _PATH_NDCSOCK    "/var/run/ndc"

  を追加します。こうすれば named は先に Makefile.set で定義した DESTRUN
  を無視し、 (chroot jail から見て) 正しい場所を参照してくれます。ビルド
  の最中に _PATH_NDCSOCK が再定義されているという warning が出ますが、無
  視して構いません。

  3.2.  ビルドする

  では BIND をコンパイルしましょう。コンパイルは INSTALL ファイルに従っ
  て普通にできます。この段階では BIND のコンパイルだけを行い、インストー
  ルはしません。 INSTALL ファイルのあまり先のほうまでは行かないように。
  実際には make clean, make depend, make だけを行えば良いです。

  4.  できたての BIND のインストール

  既に BIND が (例えば RPM から) インストール済みなら、新しい BIND をイ
  ンストールする前に、それらを削除しておきましょう。 Red Hat のシステム
  なら、 bind パッケージと bind-utils パッケージを削除すればいいです。も
  し bind-devel や caching-nameserver があったら、それらも削除しておきま
  しょう。

  init スクリプト (/etc/rc.d/init.d/named) があったら、パッケージの削除
  前にコピーを保存しておくといいでしょう。後で役に立ちます。

  4.1.  jail 外部へのツールのインストール

  これは簡単な方です :-) make install を実行すれば全部やってくれます。
  chroot でないほうの BIND を間違って実行しないように、あとで chmod 000
  /usr/local/sbin/named を実行しておくといいかもしれません (先に私がおす
  すめした /usr/local/sbin を選ばなかった人は、ここでは /usr/sbin/named
  になります)。

  【訳注: バイナリの再ビルドをしなければ、ここの作業は不要ですね。】

  4.2.  バイナリ

  chroot jail の中で生活する必要があるのは 2 つのプログラムだけです。メ
  インの named デーモン自身と named-xfer です。後者はゾーン転送に用いら
  れます。ソースツリーからコピーするだけで OK です。

       # cp src/bin/named/named /chroot/named/bin

       # cp src/bin/named-xfer/named-xfer /chroot/named/bin

  【訳注: バイナリの再ビルドをしなければ、ここではパッケージに含まれる
  named, named-xfer を移動すれば良いです。訳者としましては、移動先にはデ
  フォルトを反映させて /chroot/named/usr/sbin の方をおすすめしたいのです
  が。】

  4.3.  init スクリプトを編集する。

  ディストリビューションに含まれている init スクリプトがあれば、それを
  /chroot/named/bin/named を適切なスイッチとともに起動するよう変更するの
  が最も簡単でしょう。スイッチは... (ここでドラムロール...)

  o  -u named, これは BIND をユーザ root ではなく named で実行します。

  o  -g named, これは BIND をグループ root や wheel ではなく named で実
     行します。

  o  -t /chroot/named, これはにより BIND は自分自身を (先に用意した)
     jail に chroot します。

  以下の init スクリプトは、著者が自分の Red Hat 6.0 システムで使ってい
  るものです。おわかりのとおり、ほとんどは Red Hat のものと変わりありま
  せん。 ndc restart コマンドも少々変更し、 chroot を保ったまま正しくサ
  ーバを再起動するようにしてあります。これをそのままコピーしただけでは使
  えない場合でも、お使いの init スクリプトに同じ変更は簡単に行えるはずで
  す。

  ______________________________________________________________________
  #!/bin/sh
  #
  # named           This shell script takes care of starting and stopping
  #                 named (BIND DNS server).
  #
  # chkconfig: 345 55 45
  # description: named (BIND) is a Domain Name Server (DNS) \
  # that is used to resolve host names to IP addresses.
  # probe: true

  # Source function library.
  . /etc/rc.d/init.d/functions

  # Source networking configuration.
  . /etc/sysconfig/network

  # Check that networking is up.
  [ ${NETWORKING} = "no" ] && exit 0

  [ -f /chroot/named/bin/named ] || exit 0

  [ -f /chroot/named/etc/named.conf ] || exit 0

  # See how we were called.
  case "$1" in
    start)
          # Start daemons.
          echo -n "Starting named: "
          daemon /chroot/named/bin/named -u named -g named -t /chroot/named
          echo
          touch /var/lock/subsys/named
          ;;
    stop)
          # Stop daemons.
          echo -n "Shutting down named: "
          killproc named
          rm -f /var/lock/subsys/named
          echo
          ;;
    status)
          /usr/local/sbin/ndc status
          exit $?
          ;;
    restart)
          /usr/local/sbin/ndc -n /chroot/named/bin/named "restart -u named -g named -t /chroot/named"
          exit $?
          ;;
    reload)
          /usr/local/sbin/ndc reload
          exit $?
          ;;
    probe)
          # named knows how to reload intelligently; we don't want linuxconf
          # to offer to restart every time
          /usr/local/sbin/ndc reload >/dev/null 2>&1 || echo start
          exit 0
          ;;

    *)
          echo "Usage: named {start|stop|status|restart}"
          exit 1
  esac

  exit 0
  ______________________________________________________________________
  Caldera OpenLinux システムでは、先頭付近で定義されている変数を修正し、
  以下のようにすれば OK です。

       NAME=named
       DAEMON=/chroot/named/bin/$NAME
       OPTIONS="-t /chroot/named -u named -g named"

  【訳注: 先に述べたように、 ndc に -c, -p, -n などのオプションを用いれ
  ば、バイナリの再コンパイルは訳者の環境では不要でした。訳者が Debian で
  使っている init スクリプト (/etc/init.d/bind) を以下に示します。

  ______________________________________________________________________
  #!/bin/sh

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  test -x /chroot/named/usr/sbin/named || exit 0

  case "$1" in
      start)
          echo -n "Starting domain name service: named"
          start-stop-daemon --start --quiet --exec /chroot/named/usr/sbin/named \
              -- -u named -g named -t /chroot/named
          echo "."
      ;;

      stop)
          echo -n "Stopping domain name service: named"
          start-stop-daemon --stop --quiet  \
              --pidfile /chroot/named/var/run/named.pid \
              --exec /chroot/named/usr/sbin/named
          echo "."
      ;;

      restart)
          /usr/sbin/ndc -c /chroot/named/var/run/ndc \
              -n /chroot/named/usr/sbin/named \
              -p /chroot/named/var/run/named.pid \
              "restart -u named -g named -t /chroot/named"
      ;;

      reload)
          /usr/sbin/ndc -c /chroot/named/var/run/ndc \
              -n /chroot/named/usr/sbin/named \
              -p /chroot/named/var/run/named.pid \
              reload
      ;;

      force-reload)
          $0 restart
      ;;

      *)
          echo "Usage: /etc/init.d/bind {start|stop|reload|restart|force-reload}" >&2
          exit 1
      ;;
  esac

  exit 0
  ______________________________________________________________________

  バイナリファイル (named と named-xfer) の置場所は ``ディレクトリ構造に
  関する訳注'' のところで書いたように、chroot jail 内の /usr/sbin にして
  います。】

  4.4.  設定を変更する

  named.conf にもいくつか追加・修正を行い、いろいろなディレクトリが正し
  く動作するようにする必要があります。特に、以下を option セクションに追
  加 (あるいはすでにあれば修正) しなければなりません。

       directory "/etc/namedb";
       pid-file "/var/run/named.pid";
       named-xfer "/bin/named-xfer";

  これらのファイルは named デーモンが読むことになるので、もちろんパスは
  すべて chroot jail 内部での相対位置になります。

  【訳注: ``named.conf に関する訳注'' のところで書きましたが、 directory
  は一時ファイルの置き場所であると同時にゾーンファイルのパス指定のベース
  ディレクトリになるところです。

  pid-file はデフォルトと同じなので特に指定の必要はなし、 named-xfer は
  ``ディレクトリ構造に関する訳注'' で書いたように、バイナリを
  /chroot/named/usr/sbin に置けば指定しなくて良いはずです。】

  何人かの人のレポートによれば、以下の余分なブロックを named.conf に書か
  ないと、 ndc が正しく動作しない、とのことです。

       controls {
           unix "/var/run/ndc" perm 0600 owner 0 group 0;
       };

  5.  ジ・エンド

  5.1.  BIND の起動

  これですべての設定が終了しました。新しい、より安全な BIND を実行に移せ
  る時が来たわけです。 SysV 形式の init スクリプトを用いているなら、次の
  ように実行するだけです。

       # /etc/rc.d/init.d/named start

  実行前に古いバージョンの BIND が実行中だったら kill するのを忘れないよ
  うに。

  ログを見れば、BIND がロードされたときに初期化メッセージを記録している
  のが見つかるはずです (もしなければ、 ``ログ記録'' での設定に問題があ
  り、修正を要します)。これらのメッセージの中で、 BIND はうまく chroot
  できた、ユーザ/グループ named で起動できた、いうメッセージを伝えている
  はずです。もしそれらがなければ、なにか問題があります。

  5.2.  以上!

  これで安心して眠ることができますね ;-)

  6.  付録 - 後に BIND をアップグレードするには

  さて、やっと BIND 8.2.2_P7 がうまく chroot して、望みのとおりにチュー
  ンできました...  そうしたら、このバージョンに、リモートから root を奪
  えるセキュリティホールが見つかった、との腹立たしい噂が流れてきました。
  すぐに 8.2.3 にアップグレードしなければなりません。この新しいバージョ
  ンでも、ここまで述べてきた長い手続き全体を繰り返さなければならないので
  しょうか?

  いいえ。実際に必要なのは、 ``BIND のコンパイル'' のセクションと、
  ``BIND のインストール'' のセクションの最初の 2 つ、バイナリを jail の
  内外にそれぞれインストールする作業だけです。

  HOWTO の残りの部分、jail その他を設定するところは、 BIND のバージョン
  を変更しても変える必要はありません。新しいバイナリを古いバイナリの上に
  上書きするだけで OK です。ただしその後 BIND を kill して再起動するこ
  と。さもないと危険なバージョンがそのまま実行し続けていますから!

  7.  付録 - 謝辞

  この HOWTO の作成の助けとなってくださった、以下の方々に感謝します。

  o  Lonny Selinger <lonny at abyss.za.org> は、この HOWTO の最初の版を
     「テスト」してくださり、必要な手続きを飛ばしていないことを筆者に確
     信させてくれました。

  o  Chirik <chirik at CastleFur.COM>, Dwayne Litzenberger <dlitz at
     dlitz.net>, Phil Bambridge <phil.b at cableinet.co.uk>, Robert Cole
     <rcole at metrum-datatape.com>, Colin MacDonald <colinm at
     telus.net> ほか、多くの皆さんがこの文書の間違い、欠落を指摘していた
     だき、またこの HOWOTO をより良くするための有益なアドバイスをくださ
     いました。

  o  Erik Wallin <erikw at sec.se> と Brian Cervenka <brian at
     zerobelow.org> は、jail をさらに強固にするための、優れた提案を送っ
     てくれました。

  そして最後に、 Chroot-BIND HOWTO を日本語に翻訳してくれた Nakano Takeo
  <nakano at apm.seikei.ac.jp> に感謝します。この翻訳は
  <http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html> にあります。

  8.  付録 - 文書の配布ポリシー

  Copyright (C) Scott Wunsch, 2000-2001.  This document may be
  distributed only subject to the terms set forth in the LDP licence at
  <http://metalab.unc.edu/LDP/COPYRIGHT.html>.

  This HOWTO is free documentation; you can redistribute it and/or
  modify it under the terms of the LDP licence.  It is distributed in
  the hope that it will be useful, but without any warranty; without
  even the impled warranty of merchantability or fitness for a
  particular purpose.  See the LDP licence for more details.

  【訳注: 原文が優先されますが、参照のために翻訳を示します。

  Copyright (C) Scott Wunsch, 2000-2001.  この文書は
  <http://metalab.unc.edu/LDP/COPYRIGHT.html> にある LDP ライセンスに従
  えば配布できます。
  この HOWTO はフリー文書です。 LDP ライセンスの下で再配布・改変が可能で
  す。この文書は有益であらんことを願って配布されていますが、保証は一切あ
  りません。暗黙のものも含め、商用に役立つ保証もありませんし、特定の用途
  に合致するかどうかもわかりません。詳細は LDP ライセンスを見てくださ
  い。

  なお翻訳版も LDP ライセンスの下で再配布・改変可能とします。 Copyright
  (C) NAKANO Takeo, 2001.】

