この文書は 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 に出会ったことがあると思います。
chroot の処理は BIND 9 ではずっと簡単になったので、 この文書をちょっとずつ拡張することにして、 BIND のインストールにおける、 もっと一般的なコツなども含めるようにしました。 でも、この文書は BIND を安全にするための完全なるガイドではありません (し、そうするつもりもありません)。 この文書に書かれていることを行っただけでは、 まだネームサーバを安全にできたわけではないのですよ!
なぜ 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 です。
現在はこの文書の日本語版もあり、
中野武雄 nakano at apm.seikei.ac.jp
が管理しています。
これは
http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html
から入手できます。
BIND は the Internet Software Consortium の http://www.isc.org/bind.html から入手できます。この文書の執筆時点での最新版は 9.2.0 です。 BIND 9 が使えるようになってからだいぶたち、 実際の業務に使っている人も多いようです。 しかし、より保守的な人たちは、まだ BIND 8 を使う方を好んでいるようです。 もし読者が後者に属するならば、 chroot の詳細については Chroot-BIND8 HOWTO (同じ場所にあります) の方を読んでください。でも、BIND 8 のほうが chroot をするには ずっと面倒であることもお忘れなく。
古いバージョンの BIND の多くには、 既知のセキュリティホールがあります。 必ず最新版を使うように、気をつけてください!
私はこの文書を、 自分自身で chroot 環境な BIND をセットアップした経験に基づいて書きました。 私の場合は、既に BIND を (自分の Linux ディストリビューションの) パッケージ形式でインストールしてありました。 おそらく読者のほとんども同じでしょう。 ですので、ここでは既にインストール済みの BIND から 設定ファイルを移動して修正し、パッケージは削除して、 新しいのをインストールすることにします。 でもまだパッケージは削除しないでくださいね。 まずそこからいくつかファイルが必要になりますから。
まだ BIND をインストールしていない人でも、 この文書の方法を利用することはできます。 違いは、私が既存のファイルをコピーしてくるよう指示した部分で、 そのファイルをゼロから書き起こす必要がある、というだけです。 この際には DNS HOWTO が役に立つでしょう。
これらの記述は私のシステムでは動作しましたが、 読者のところでの結果は異なるかもしれません。 これは 1 つのアプローチに過ぎず、 同様の設定を行うにはいろいろな方法が有り得ます (一般的なアプローチはだいたい同じになるでしょうが)。 これは、私が試みた中で最初に動作したやり方だったので、 ここに書き記したにすぎません。
私の現在までに至る BIND の経験では、 Linux サーバにしかインストールを行っていません。 しかし、この文書の説明の大半は、 他の種類の UNIX にも容易に適用できるはずです。 私の気付いた違いについては、できるだけ記述するつもりです。 また、他のディストリビューションや他のプラットフォームを使っている 人たちからいくつか指摘を受けていますので、 それらもできるだけ含めるようにしました。
Linux を使っている人は、これらを試す前に、
使っているのが 2.4 カーネルであるかどうか確認する必要があります。
-u
スイッチ (非 root ユーザで動作させる) には、
この新しいカーネルが必要です。