この文書は Chroot-BIND HOWTO です。 最新版の置かれているマスターサイトは Where? を見てください。 読者は BIND (the Berkeley Internet Name Domain) の設定方法・利用方法を 既に知っているとして話を進めます。 知らない人は、まず DNS HOWTO を読むと良いでしょう。 またお使いの UNIX 系システムにおけるコンパイル・インストールについては、 読者は習熟しているものとします。
この文書は、BIND のインストール時に取ることのできる、 付加的なセキュリティ対策について説明します。 まず、BIND を ``chroot jail'' の内部で動作させるよう 設定する方法について説明します。 すなわち、BIND は閉じ込められた小さなディレクトリツリーの 外部にあるファイルを見ることができなくなるのです。 また、BIND を非 root ユーザで実行させるような設定も行います。
chroot の原理は割に単純です。
BIND (あるいは他のプロセス) を chroot jail の内部で実行すると、
そのプロセスはファイルシステムのうち
jail の内部しか見ることができなくなるのです。
例えば、この文書では、BIND を /chroot/named ディレクトリに
chroot した状態で実行します。
BIND にとっては、このディレクトリの中身が / のように見えるのです。
このディレクトリの外部には一切アクセスできません。
公開システムに ftp したことのある人は、
おそらく既にこの chroot jail に出会ったことがあると思います。
なぜ BIND を chroot jail の内部で動作させると良いのでしょうか。 それは、仮に悪い奴が BIND の穴を使ってアクセスを得たとしても、 そのアクセスできる範囲を最小限に制限できるからです。 BIND を非 root ユーザ権限で動作させるのも同じ理由からです。
これは通常言われているセキュリティ対策 (最新版を使う、アクセス制限をする、など) の、 いわば「おまけ」とみなすべきで、 これを代替するものと考えてはいけません。
読者が DNS のセキュリティに興味をお持ちなら、 他の製品を調べてみるのも良いかもしれません。 BIND を StackGuard と共に構築すれば、きっと安全性をより向上させてくれるでしょう。 使い方は簡単です。普通の gcc と同じです。 また Dan Bernstein の書いた DNScache は、BIND の代わりに利用できる安全なソフトウェアです。 【訳注: djbdns に改名したようです】 Dan は qmail の著者でもあります。
この文書の最新版は、常に Linux/Open Source Users of Regina, Sask. の web サイトより入手できます。 http://www.losurs.org/docs/howto/Chroot-BIND.html です。
BIND は the Internet Software Consortium の http://www.isc.org/bind.html から入手できます。この文書の執筆時点での最新版は 8.2.3 です。 BIND 9.x もリリースされていますが、まだちゃんと見る時間が取れないので、 この文書がどの程度そのまま使えるかはわかりません。 BIND9 を実際に用いている管理者もいるようですが、 まだ最先端で生きる覚悟 (そして 2 週間ごとにアップグレードする覚悟) が必要のようです。 ですので、今のところは BIND8 に留まるのが良いのではないでしょうか。
8.2.3 より前のすべてのバージョンの BIND8 には、 既知のセキュリティホールがあります。 必ず最新版を使うように、気をつけてください!
私はこの文書を、 自分自身で chroot 環境な BIND をセットアップした経験に基づいて書きました。 私の場合は、既に BIND を (自分の Linux ディストリビューションの) パッケージ形式でインストールしてありました。 おそらく読者のほとんども同じでしょう。 ですので、ここでは既にインストール済みの BIND から 設定ファイルを移動して修正し、パッケージは削除して、 新しいのをインストールすることにします。 でもまだパッケージは削除しないでくださいね。 まずそこからいくつかファイルが必要になりますから。
まだ BIND をインストールしていない人でも、 この文書の方法を利用することはできます。 違いは、私が既存のファイルをコピーしてくるよう指示した部分で、 そのファイルを 0 から書き起こす必要がある、というだけです。 この際には DNS HOWTO が役に立つでしょう。
これらの記述は私のシステムでは動作しました。 しかし読者のところでの結果は異なるかもしれません。 これは 1 つのアプローチに過ぎず、 同様の設定を行うにはいろいろな方法が有り得ます (一般的なアプローチはだいたい同じになるでしょうが)。 これは、私が試みた中で最初に動作したやり方だったので、 ここに書き記したにすぎません。
私の現在までに至る BIND の経験では、 Linux サーバにしかインストールを行っていません。 しかし、この文書の説明の大半は、 他の種類の UNIX にも容易に適用できるはずです。 私の気付いた違いについては、 できるだけ記述するつもりです。