Chroot-BIND HOWTO <author>Scott Wunsch, <tt>scott at wunsch.org</> <date>v1.5, 1 December 2001 <trans>中野武雄 <tt>nakano at apm.seikei.ac.jp</> <tdate>v1.5j1, 3 January 2002 <abstract> <!--O This document describes installing the BIND 9 nameserver to run in a chroot jail and as a non-root user, to provide added security and minimise the potential effects of a security compromise. Note that this document has been updated for BIND 9; if you still run BIND 8, you want the Chroot-BIND8 HOWTO instead. --> この文書は BIND 8 のネームサーバを "chroot jail" の内部で、 非 root ユーザとして実行させるような インストールのやり方を説明します。 これによってセキュリティが強化され、 またセキュリティが破られたときも影響を最小限にできます。 なお、この文書は BIND 9 向けに更新されました。 まだ BIND 8 を使っている人は、 代わりに Chroot-BIND8 HOWTO を読んでください。 </abstract> <!-- Table of contents --> <toc> <!-- Begin the document --> <!--O <sect>Introduction --> <sect>はじめに <p> <!--O This is the Chroot-BIND HOWTO; see <ref id="where" Name="Where?"> for the master site, which contains the latest copy. It is assumed that you already know how to configure and use BIND (the Berkeley Internet Name Domain). If not, I would recommend that you read the DNS HOWTO first. It is also assumed that you have a basic familiarity with compiling and installing software on your UNIX-like system. --> この文書は Chroot-BIND HOWTO です。 最新版の置かれているマスターサイトは <ref id="where" Name="Where?"> を見てください。 読者は BIND (the Berkeley Internet Name Domain) の設定方法・利用方法を 既に知っているとして話を進めます。 知らない人は、まず DNS HOWTO を読むと良いでしょう。 またお使いの UNIX 系システムにおけるコンパイル・インストールについては、 読者は習熟しているものとします。 <sect1>What? <p> <!--O This document describes some extra security precautions that you can take when you install BIND. It explains how to configure BIND so that it resides in a ``chroot jail,'' meaning that it cannot see or access files outside its own little directory tree. We shall also configure it to run as a non-root user. --> この文書は、BIND のインストール時に取ることのできる、 付加的なセキュリティ対策について説明します。 まず、BIND を ``chroot jail'' の内部で動作させるよう 設定する方法について説明します。 すなわち、BIND は閉じ込められた小さなディレクトリツリーの 外部にあるファイルを見ることができなくなるのです。 また、BIND を非 root ユーザで実行させるような設定も行います。 <!--O The idea behind chroot is fairly simple. When you run BIND (or any other process) in a chroot jail, the process is simply unable to see any part of the filesystem outside the jail. For example, in this document, we'll set BIND up to run chrooted to the directory <tt>/chroot/named</>. Well, to BIND, the contents of this directory will appear to be <tt>/</>, the root directory. Nothing outside this directory will be accessible to it. You've probably encounted a chroot jail before, if you've ever used <tt>ftp</> to log into a public system. --> chroot の背後にある考え方は、とても単純です。 BIND (あるいは他のプロセス) を chroot jail の内部で実行すると、 そのプロセスはファイルシステムのうち jail の内部しか見ることができなくなるのです。 例えば、この文書では、BIND を <tt>/chroot/named</> ディレクトリに chroot した状態で実行します。 BIND にとっては、このディレクトリの中身が <tt>/</> のように見えるのです。 このディレクトリの外部には一切アクセスできません。 公開システムに <tt>ftp</tt> でログインしたことのある人は、 おそらく既にこの chroot jail に出会ったことがあると思います。 <!--O Because the chroot process is much simpler with BIND 9, I have started to expand this document slightly, to include more general tips about securing a BIND installation. Nevertheless, this document is not (and is not intended to be) a complete reference for securing BIND. If you do only what is outlined in this document, you're not finished securing your nameserver! --> chroot の処理は BIND 9 ではずっと簡単になったので、 この文書をちょっとずつ拡張することにして、 BIND のインストールにおける、 もっと一般的なコツなども含めるようにしました。 でも、この文書は BIND を安全にするための完全なるガイドではありません (し、そうするつもりもありません)。 この文書に書かれていることを行っただけでは、 まだネームサーバを安全にできたわけではないのですよ! <sect1>Why? <p> <!--O The idea behind running BIND in a chroot jail is to limit the amount of access any malicious individual could gain by exploiting vulnerabilities in BIND. It is for the same reason that we run BIND as a non-root user. --> なぜ BIND を chroot jail の内部で動作させると良いのでしょうか。 それは、仮に悪い奴が BIND の穴を使ってアクセスを得たとしても、 そのアクセスできる範囲を最小限に制限できるからです。 BIND を非 root ユーザ権限で動作させるのも同じ理由からです。 <!--O This should be considered as a supplement to the normal security precautions (running the latest version, using access control, etc.), certainly not as a replacement for them. --> これは通常言われているセキュリティ対策 (最新版を使う、アクセス制限をする、など) の、 いわば「おまけ」とみなすべきで、 もちろんこれを代替するものと考えてはいけません。 <!--O If you're interested in DNS security, you might also be interested in a few other products. Building BIND with <url url="http://www.immunix.org/products.html#stackguard" name="StackGuard"> would probably be a good idea for even more protection. Using it is easy; it's just like using ordinary gcc. Also, <url url="http://cr.yp.to/dnscache.html" name="DNScache"> is a secure replacement for BIND, written by Dan Bernstein. Dan is the author of qmail, and DNScache appears to follow a similar philosophy. --> 読者が DNS のセキュリティに興味をお持ちなら、 他の製品を調べてみるのも良いかもしれません。 BIND を <url url="http://www.immunix.org/products.html#stackguard" name="StackGuard"> と共に構築すれば、きっと安全性をより向上させてくれるでしょう。 使い方は簡単です。普通の gcc と同じです。 また Dan Bernstein の書いた <url url="http://cr.yp.to/dnscache.html" name="DNScache"> は、BIND の代わりに利用できる安全なソフトウェアです。 【訳注: <url url="http://cr.yp.to/djbdns.html" name="djbdns"> に改名したようです】 Dan は qmail の著者でもあります。 <sect1>Where?<label id="where"> <p> <!--O The latest version of this document is always available from the web site of the Linux/Open Source Users of Regina, Sask., at <url url="http://www.losurs.org/docs/howto/Chroot-BIND.html">. --> この文書の最新版は、常に Linux/Open Source Users of Regina, Sask. の web サイトより入手できます。 <url url="http://www.losurs.org/docs/howto/Chroot-BIND.html"> です。 <!--O There is now a Japanese translation of this document, maintained by Nakano Takeo <tt>nakano at apm.seikei.ac.jp</>. This is available at <url url="http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html">. --> 現在はこの文書の日本語版もあり、 中野武雄 <tt>nakano at apm.seikei.ac.jp</> が管理しています。 これは <url url="http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html"> から入手できます。 <!--O BIND is available from <url url="http://www.isc.org/" name="the Internet Software Consortium"> at <url url="http://www.isc.org/bind.html">. As of this writing, the current version of BIND 9 is 9.2.0. BIND 9 has been out for some time now, and many people are using it in production. Nevertheless, some more conservative sorts still prefer to remain with BIND 8. If you are such a person, please see my Chroot-BIND8 HOWTO (available from the same location) for details on chrooting it, but be warned that BIND 8 is much messier to chroot. --> BIND は <url url="http://www.isc.org/" name="the Internet Software Consortium"> の <url url="http://www.isc.org/bind.html"> から入手できます。この文書の執筆時点での最新版は 9.2.0 です。 BIND 9 が使えるようになってからだいぶたち、 実際の業務に使っている人も多いようです。 しかし、より保守的な人たちは、まだ BIND 8 を使う方を好んでいるようです。 もし読者が後者に属するならば、 chroot の詳細については Chroot-BIND8 HOWTO (同じ場所にあります) の方を読んでください。でも、BIND 8 のほうが chroot をするには ずっと面倒であることもお忘れなく。 <!--O Keep in mind that there are <bf>known</> security holes in many earlier versions of BIND, so make very sure that you're running the latest version! --> 古いバージョンの BIND の多くには、 <bf>既知の</>セキュリティホールがあります。 必ず最新版を使うように、気をつけてください! <sect1>How? <p> <!--O I wrote this document based on my experiences in setting BIND up in a chroot environment. In my case, I already had an existing BIND installation in the form of a package that came with my Linux distribution. I'll assume that most of you are probably in the same situation, and will simply be transferring over and modifying the configuration files from your existing BIND installation, and then removing the package before installing the new one. Don't remove the package yet, though; we may want some files from it first. --> 私はこの文書を、 自分自身で chroot 環境な BIND をセットアップした経験に基づいて書きました。 私の場合は、既に BIND を (自分の Linux ディストリビューションの) パッケージ形式でインストールしてありました。 おそらく読者のほとんども同じでしょう。 ですので、ここでは既にインストール済みの BIND から 設定ファイルを移動して修正し、パッケージは削除して、 新しいのをインストールすることにします。 でもまだパッケージは削除しないでくださいね。 まずそこからいくつかファイルが必要になりますから。 <!--O If this is not the case for you, you should still be able to follow this document. The only difference is that, where I refer to copying an existing file, you first have to create it yourself. The DNS HOWTO may be helpful for this. --> まだ BIND をインストールしていない人でも、 この文書の方法を利用することはできます。 違いは、私が既存のファイルをコピーしてくるよう指示した部分で、 そのファイルをゼロから書き起こす必要がある、というだけです。 この際には DNS HOWTO が役に立つでしょう。 <!--O <sect1>Disclaimer --> <sect1>おことわり <p> <!--O These steps worked for me, on my system; your mileage may vary. This is but one way to approach this; there are other ways to set the same thing up (although the general approach will be the same). It just happens that this was the first way that I tried that worked, so I wrote it down. --> これらの記述は私のシステムでは動作しましたが、 読者のところでの結果は異なるかもしれません。 これは 1 つのアプローチに過ぎず、 同様の設定を行うにはいろいろな方法が有り得ます (一般的なアプローチはだいたい同じになるでしょうが)。 これは、私が試みた中で最初に動作したやり方だったので、 ここに書き記したにすぎません。 <!--O My BIND experience to date has been installing on Linux servers. However, most of the instructions in this document should be easily applicable to other flavours of UNIX as well, and I shall try to point out differences of which I am aware. I've also received suggestions from people using other distributions and other platforms, and I've tried to incorporate their comments where possible. --> 私の現在までに至る BIND の経験では、 Linux サーバにしかインストールを行っていません。 しかし、この文書の説明の大半は、 他の種類の UNIX にも容易に適用できるはずです。 私の気付いた違いについては、できるだけ記述するつもりです。 また、他のディストリビューションや他のプラットフォームを使っている 人たちからいくつか指摘を受けていますので、 それらもできるだけ含めるようにしました。 <!--O If you run Linux, you need to make sure that you're running a 2.4 kernel before attempting this. The <tt>-u</> switch (to run as a non-root user) requires this newer kernel. --> Linux を使っている人は、これらを試す前に、 使っているのが 2.4 カーネルであるかどうか確認する必要があります。 <tt>-u</tt> スイッチ (非 root ユーザで動作させる) には、 この新しいカーネルが必要です。 <!--O <sect>Preparing the Jail --> <sect>jail の用意 <!--O <sect1>Creating a User --> <sect1>ユーザの作成 <p> <!--O As mentioned in the introduction, it's not a good idea to run BIND as root. So, before we begin, let's create a separate user for BIND. Note that you should never use an existing generic user like <tt>nobody</> for this purpose. However, some distributions, such as SuSE and Linux Mandrake have started providing a specific user (generally called <tt>named</>); you can simply adapt this user for our purposes, if you like. --> 「はじめに」で述べたように、 BIND を root 権限で実行するのはあまり良い考えではありません。 従って、まず最初に BIND 専用のユーザを作りましょう。 この目的に、<tt>nobody</> のような既存の一般向けユーザは、 決して使うべきではありません。 しかし、SuSE や Linux Mandrake など、 最初からこのためのユーザ (普通 <tt>named</> という名前) を用意しているディストリビューションもあるので、 その場合はお望みならこのユーザを用いても構いません。 <!--O This requires adding a line something like the following to <tt>/etc/passwd</>: --> さて、ユーザを追加するには、次のような行を <tt>/etc/passwd</> に加えます。 <tscreen><verb> named:x:200:200:Nameserver:/chroot/named:/bin/false </verb></tscreen> <!--O And one like this to <tt>/etc/group</>: --> そして次の行を <tt>/etc/group</> に加えます。 <tscreen><verb> named:x:200: </verb></tscreen> <!--O This creates a user and group called <tt>named</> for BIND. Make sure that the UID and GID (both 200 in this example) are unique on your system. The shell is set to <tt>/bin/false</> because this user will never need to log in. --> これで BIND 用の <tt>named</> というユーザとグループができました。 UID と GID (この例では両方とも 200) が、 お使いのシステムで他と重なっていないように注意しましょう。 このユーザはログインする必要がないので、 シェルは <tt>/bin/false</> にしてあります。 <!--O <sect1>Directory Structure --> <sect1>ディレクトリ構造 <p> <!--O Now, we must set up the directory structure that we will use for the chroot jail in which BIND will live. This can be anywhere on your filesystem; the truly paranoid may even want to put it on a separate volume. I shall assume that you will use <tt>/chroot/named</>. Let's start by creating the following directory structure: --> 次に、chroot jail に使用するディレクトリ構造を作ってあげる必要があります。 ここが BIND の生活の場となるわけです。 これはファイルシステムのどこでも構いません。 非常に神経質な人は、独立したボリューム (パーティション) に置きたいとさえ思うかもしれませんね。 ここでは <tt>/chroot/named</> を使います。 まず以下のようなディレクトリ構造を作ってください。 <tscreen><verb> /chroot +-- named +-- dev +-- etc | +-- namedb | +-- slave +-- var +-- run </verb></tscreen> <!--O If you use GNU <tt>mkdir</> (such as on a Linux system), you can create this directory structure like this: --> (Linux システムなどで) GNU の <tt>mkdir</tt> を使っている人は、 次のようにすればこのディレクトリ構造が作れます。 <tscreen><verb> # mkdir -p /chroot/named # cd /chroot/named # mkdir -p dev etc/namedb/slave var/run </verb></tscreen> <!--O <sect1>Placing the BIND Data --> <sect1>BIND のデータを配置する <p> <!--O Assuming that you have already done a conventional installation of BIND and are using it, you will already have an existing <tt>named.conf</> and zone files. These files must now be moved (or copied, to be safe) into the chroot jail, so that BIND can get at them. <tt>named.conf</> goes in <tt>/chroot/named/etc</>, and the zone files can go in <tt>/chroot/named/etc/namedb</>. For example: --> 既に通常のかたちで BIND がインストールできていて、 これを利用しているなら、 <tt>named.conf</> ファイルとゾーンファイルがあるはずです。 これらのファイルは chroot jail の中に移動 (あるいは安全にやるならコピー) して、 BIND から見えるようにしてやる必要があります。 <tt/named.conf/ は <tt>/chroot/named/etc</> へ、 ゾーンファイルは <tt>/chroot/named/etc/namedb</> へ移動します。 例えば: <tscreen><verb> # cp -p /etc/named.conf /chroot/named/etc/ # cp -a /var/named/* /chroot/named/etc/namedb/ </verb></tscreen> <!--O BIND would normally need to write to the <tt>namedb</> directory, but in the interests of tightening security, we will not allow it to do this. If your nameserver serves as a slave for any zones, it will need to update these zone files, which means we'll have to store them in a separate directory, to which BIND does have write access. --> BIND は通常 <tt/namedb/ ディレクトリへの書きこみ権限を必要とします。 しかしセキュリティを厳しくするために、これは許さないことにしましょう。 お使いの DNS があるゾーンをスレーブでサービスする場合は、 BIND はそのゾーンファイルを更新できなければなりません。 すなわちこれらのファイルには別のディレクトリに保存させるようにして、 そこに BIND からの書き込みアクセスを許すかたちにします。 <tscreen><verb> # chown -R named:named /chroot/named/etc/namedb/slave </verb></tscreen> <!--O Keep in mind that'll you have to move any slave zones you have into this directory, and update your <tt>named.conf</> accordingly. --> ここで、スレーブゾーンは全部このディレクトリに移動するのを忘れないこと。 また、それに応じて <tt>named.conf</tt> の変更も必要になります。 <!--O BIND will also need to write to the <tt>/var/run</> directory, to put its pidfile and statistical information there, so let's allow it to do so: --> BIND は <tt>/var/run</> ディレクトリへも書きこみ権限を必要とします。 pid ファイルと統計情報をここに作るからです。 次のコマンドでこれを可能にしてやりましょう。 <tscreen><verb> # chown named:named /chroot/named/var/run </verb></tscreen> <!--O <sect1>System Support Files --> <sect1>システムのサポートファイル <p> <!--O Once BIND is running in the chroot jail, it will not be able to access files outside the jail <bf>at all</>. However, it needs to access a few key files, although not nearly as many as BIND 8 did. --> BIND が chroot jail 内部での実行を始めると、 jail 外部のファイルへは<bf>一切</>アクセスできなくなります。 しかし、いくつかの重要なファイルには実行後もアクセスできなければ なりません。ただし BIND 8 に比べるとだいぶ少ないですが。 <!--O One file that BIND will need inside its jail is good ol' <tt>/dev/null</>. Note that the exact command necessary to create this device node may vary from system to system; check your <tt>/dev/MAKEDEV</> script to be sure. Some systems may also require <tt>/dev/zero</>, which can created similarly. It's reported that the BIND 9.2.0 release candidates now require <tt>/dev/random</> as well. For most Linux systems, we can use the following commands: --> BIND が jail の内部に必要とするファイルのひとつに、 いつものあれ、<tt>/dev/null</> があります。 ここで、このデバイスノードを作るために必要なコマンドは システムによって異なることがあります。 <tt>/dev/MAKEDEV</> スクリプトを調べて確認してください。 システムによっては <tt>/dev/zero</> が必要なこともあります。 BIND 9.2.0 リリース予定版では、 <tt>/dev/random</tt> が必要だという報告もあります。 ほとんどの Linux システムでは、以下のコマンドが使えます。 <tscreen><verb> # mknod /chroot/named/dev/null c 1 3 # mknod /chroot/named/dev/random c 1 8 # chmod 666 /chroot/named/dev/{null,random} </verb></tscreen> <!--O For FreeBSD 4.3, this is: --> FreeBSD 4.3 では次のようになります。 <tscreen><verb> # mknod /chroot/named/dev/null c 2 2 # mknod /chroot/named/dev/random c 2 3 # chmod 666 /chroot/named/dev/{null,random} </verb></tscreen> <!--O You also need another file in the <tt>/etc</> directory inside the jail. You must copy <tt>/etc/localtime</> (this is sometimes known as <tt>/usr/lib/zoneinfo/localtime</> on some systems) in there so that BIND logs things with the right time on them. The following command will take care of this: --> 他にも jail 内部の <tt>/etc</> ディレクトリに必要なファイルがあります。 BIND に正しい時刻でログ記録をさせるには、 <tt>/etc/localtime</> (システムによっては <tt>/usr/lib/zoneinfo/localtime</> かもしれません) をここにコピーする必要があります。 以下のコマンドがこの面倒を見てくれます。 <tscreen><verb> # cp /etc/localtime /chroot/named/etc/ </verb></tscreen> <!--O <sect1>Logging<label id="logging"> --> <sect1>ログ記録<label id="logging"> <p> <!--O Unlike a conventional jailbird, BIND can't just scribble its log entries on the walls :-). Normally, BIND logs through <tt>syslogd</>, the system logging daemon. However, this type of logging is performed by sending the log entries to the special socket <tt>/dev/log</>. Since this is outside the jail, BIND can't use it any more. Fortuantely, there are a couple options to work around this. --> 本物の囚人とは異なり、BIND はログ記録を壁に書くことはできません :-)。 通常 BIND はログを、システムのロギングデーモンである <tt/syslogd/ 経由で記録します。 このタイプのログ記録は、特殊なソケットである <tt>/dev/log</> を通してログエントリを送信することで行われます。 しかしこれは jail の外部にありますから、BIND からは使えません。 でもありがたいことに、これを解決する方法はいくつか存在します。 <!--O <sect2>The Ideal Solution --> <sect2>理想的な解 <p> <!--O The ideal solution to this dilemma requires a reasonably recent version of <tt>syslogd</> which supports the <tt>-a</> switch introduced by OpenBSD. Check the manpage for your <tt>syslogd(8)</> to see if you have such a version. --> このジレンマに対する理想的な解決法には、 OpenBSD で導入された <tt/-a/ スイッチをサポートする、 比較的新しいバージョンの <tt/syslogd/ が必要です。 <tt/syslogd(8)/ の man ページをチェックして、 自分の使っているのがこれかどうか見てください。 <!--O If you do, all you have to do is add the switch ``<tt>-a /chroot/named/dev/log</>'' to the command line when you launch <tt>syslogd</>. On systems which use a full SysV-init (which includes most Linux distributions), this is typically done in the file <tt>/etc/rc.d/init.d/syslog</>. For example, on my Red Hat Linux system, I changed the line --> サポートしていれば、<tt/syslogd/ を起動する際のコマンドラインに ``<tt>-a /chroot/named/dev/log</>'' を追加するだけで OK です。 SysV-init をすべて使っているシステム (Linux ディストリビューションのほとんどはそう) なら、 起動は通常 <tt>/etc/rc.d/init.d/syslog</> ファイルでなされます。 例えば、私の Red Hat Linux システムでは、私は <tscreen><verb> daemon syslogd -m 0 </verb></tscreen> <!--O to --> の行を <tscreen><verb> daemon syslogd -m 0 -a /chroot/named/dev/log </verb></tscreen> と変更しました。 <!--O Interestingly, as of Red Hat 7.2, Red Hat has apparently made this process even easier. There is now a file called <tt>/etc/sysconfig/syslog</> in which extra parameters for syslogd can be defined. --> 面白いことに Red Hat 7.2 では、 見たところ Red Hat はこの処理をもっと簡単にしています。 現在は <tt>/etc/sysconfig/syslog</> というファイルがあり、 ここには syslogd に余分に与えるパラメータを定義できるのです。 <!--O On Caldera OpenLinux systems, they use a daemon launcher called <tt>ssd</>, which reads configuration from <tt>/etc/sysconfig/daemons/syslog</>. You simply need to modify the options line to look like this: --> Caldera OpenLinux システムでは <tt/ssd/ というデーモンランチャを使っており、 これは設定を <tt>/etc/sysconfig/daemons/syslog</> から読みます。 この中のオプション行を以下のように修正するだけです。 <tscreen><verb> OPTIONS_SYSLOGD="-m 0 -a /chroot/named/dev/log" </verb></tscreen> <!--O Similarly, on SuSE systems, I'm told that the best place to add this switch is in the <tt>/etc/rc.config</> file. Changing the line --> 同様に SuSE システムでは、 このスイッチは <tt>/etc/rc.config</> ファイルに追加するのが良いそうです。 <tscreen><verb> SYSLOGD_PARAMS="" </verb></tscreen> <!--O to read --> という行を <tscreen><verb> SYSLOGD_PARAMS="-a /chroot/named/dev/log" </verb></tscreen> <!--O should do the trick. --> とすれば OK です。 <!--O And, last but not least, for FreeBSD 4.3 you can apparently just edit the <tt>rc.conf</> file and put in the following: --> そして最後に (といっても重要性の順ではないですよ) FreeBSD 4.3 では、 <tt>rc.conf</> ファイルを編集して次の行を追加すればよいそうです。 <tscreen><verb> syslogd_flags="-s -l /chroot/named/dev/log" </verb></tscreen> <!--O The <tt>-s</> is for security reasons, and is part of the default settings. The <tt>-l</> is a local path on which to put another logging node. --> <tt>-s</> はセキュリティ上の問題から与えるもので、 デフォルトの設定の一部です。 <tt>-l</> は、別のログノードが置かれているローカルなパス名です。 【訳注: Debian なら <tt>/etc/init.d/syslogd</> の <tscreen><verb> SYSLOGD="" </verb></tscreen> という行を <tscreen><verb> SYSLOGD="-a /chroot/named/dev/log" </verb></tscreen> とします。】 <!--O Once you've figured out how to make this change for your system, simply restart <tt>syslogd</>, either by killing it and launching it again (with the extra parameters), or by using the SysV-init script to do it for you: --> お使いのシステムでの変更方法がわかったら、 <tt/syslogd/ を再起動するだけです。kill して再び (追加パラメータとともに) 起動してもいいですし、 SysV-init スクリプトを使って次のようにするのでも良いでしょう。 <tscreen><verb> # /etc/rc.d/init.d/syslog stop # /etc/rc.d/init.d/syslog start </verb></tscreen> <!--O Once it's been restarted, you should see a ``file'' in <tt>/chroot/named/dev</> called <tt>log</>, that looks something like this: --> 再起動できたら、<tt>/chroot/named/dev</> に 以下のような <tt/log/ という「ファイル」ができているはずです。 <verb>srw-rw-rw- 1 root root 0 Mar 13 20:58 log</verb> <!--O <sect2>The Other Solutions --> <sect2>別の解 <p> <!--O If you have an older <tt>syslogd</>, then you'll have to find another way to do your logging. There are a couple programs out there, such as <tt>holelogd</>, which are designed to help by acting as a ``proxy'' and accepting log entries from the chrooted BIND and passing them out to the regular <tt>/dev/log</> socket. --> 古い <tt/syslogd/ を使っている場合は、 ログを取るには別の方法を見つけなければなりません。 例えば <tt/hoellogd/ のような、 「プロキシ」として動作するよう設計されているプログラムも存在します。 これは chroot された BIND からログエントリを受け取り、 それを通常の <tt>/dev/log</> ソケットに渡します。 <!--O Alteratively, you can simply configure BIND to log to files instead of going through syslog. See the BIND documentation for more details if you choose to go this route. --> あるいは、BIND を設定して、ログを syslog に送るのではなく ファイルに書きこむようにもできます。 この方法を選ぶなら、BIND の文書にあたって詳細を調べてください。 <!--O <sect1>Tightening Permissions<label id="perm"> --> <sect1>パーミッションを厳しくする<label id="perm"> <p> <!--O First of all, feel free to restrict access to the whole <tt>/chroot</> directory to the <tt>root</> user. Of course, not everybody may want to do this, especially if you have other software installed in that tree that doesn't appreciate it. --> まず最初に、<tt>/chroot</> ディレクトリ全体へのアクセスを、 ばっさり <tt>root</> ユーザのみに限ってしまいましょう。 もちろん、こうしたい人ばかりではないでしょう。 特に他のソフトウェアをこのツリー以下にインストールしていて、 この変更がそのソフトには適切でないような場合にはそうですね。 <tscreen><verb> # chown root /chroot # chmod 700 /chroot </verb></tscreen> <!--O You can also safely restrict access to <tt>/chroot/named</> to the <tt>named</> user. --> 同じく <tt>/chroot/named</> へのアクセスは、 <tt>named</> ユーザにのみ限ってしまって大丈夫です。 <tscreen><verb> # chown named:named /chroot/named # chmod 700 /chroot/named </verb></tscreen> <!--O For even more tightening, on Linux systems we can make a few of the files and directories immutable, using the <tt>chattr</> tool on ext2 filesystems. --> もっと厳しくしたい場合は、 Linux システムなら ext2 ファイルシステムにあるファイルやディレクトリの属性を、 <tt>chattr</> というツールで immutable (不変) にすることもできます。 <tscreen><verb> # cd /chroot/named # chattr +i etc etc/localtime var </verb></tscreen> <!--O Equivalently, on FreeBSD 4.3, you want to look into <tt>chflags</> if you wish to make things immutable. As an example, the following should change everything in the <tt>/chroot/named/etc</> directory to immutable: --> 同様に FreeBSD 4.3 でこれらを immutable にしたいなら、 <tt>chflags</> を調べてみましょう。 例えば次のようにすれば、<tt>/chroot/named/etc</> ディレクトリ以下のすべてを immutable にできます。 <tscreen><verb> # chflags schg /chroot/named/etc/*(*). </verb></tscreen> <!--O It would be nice to do this for the <tt>dev</> directory too, but unfortunately that would prevent <tt>syslogd</> from creating its <tt>dev/log</> socket. You may also choose to set the immutable bit on other files in the jail as well, such as your primary zone files, if they aren't expected to change. --> これらを <tt>dev</> ディレクトリにも施せれば良いのでしょうが、 残念ながらこうすると <tt>syslogd</> がここに <tt>dev/log</> ソケットを作れなくなってしまいます。 jail の内部にある他のファイルに immutable ビットを立ててもよいでしょう (例えばプライマリゾーンファイルを変更されたくない場合など)。 <!--O <sect>Compiling and Installing Your Shiny New BIND<label id="compiling"> --> <sect>ピカピカの BIND を新規にコンパイル・インストールする<label id="compiling"> <p> <!--O <sect1>Doing the Compile --> <sect1>コンパイルする <p> <!--O Compiling BIND 9 for use in a chroot jail should be a much more pleasant experience than BIND 8 was. In fact, you don't have to do anything special; the standard <tt>./configure && make</> should suffice. --> chroot jail で用いる BIND 9 のコンパイルは、 BIND 8 のときよりもずっと快適な作業となるでしょう。 実のところ、しなければならないことは特に何もなく、 標準的な <tt>./configure && make</> だけで良いのです。 <!--O Keep in mind that if you want to enable IPv6 support in BIND (<tt>-\-enable-ipv6</>) on Linux systems, you need matching versions of kernel and glibc. If you have kernel 2.2, you need glibc 2.1, and if you have kernel 2.4, you need glibc 2.2. BIND is quite picky about this. --> ただし IPv6 をサポートした BIND を Linux システムで作りたい場合 (<tt>--enable-ipv6</>) は、 カーネルと glibc のバージョンを合わせなければなりません。 カーネル 2.2 なら glibc 2.1 が必要です。 カーネル 2.4 なら glibc 2.2 が必要です。 BIND はこの点については非常にうるさいです。 <!--O <sect>Installing Your Shiny New BIND<label id="installing"> --> <sect>BIND をインストールする<label id="installing"> <!--TN ここは sect1 のほうがすっきりすると思うんだけどなあ。 --> <p> <!--O I should mention that if you have an existing installation of BIND, such as from an RPM, you should probably remove it before installing the new one. On Red Hat systems, this probably means removing the packages <tt>bind</> and <tt>bind-utils</>, and possibly <tt>bind-devel</> and <tt>caching-nameserver</>, if you have them. --> もしすでに (例えば RPM などから) インストールされている BIND がある場合は、 新しいのをインストールする前にそれを削除する必要があると思います。 Red Hat システムでは <tt>bind</> と <tt>bind-util</> のパッケージ、 そして <tt>bind-devel</> と <tt>caching-nameserver</> なども、存在していたら削除する必要があるでしょう。 <!--O You may want to save a copy of the init script (e.g., <tt>/etc/rc.d/init.d/named</>), if any, before doing so; it'll be useful later on. --> もし init スクリプト (すなわち <tt>/etc/rc.d/init.d/named</>) があった場合は、パッケージの削除の前に、 このファイルをコピーして保存しておくほうがいいでしょう。 きっとあとで役に立ちます。 <!--O If you are upgrading from an older version of BIND, such as BIND 8, you will want to read the migration documentation in the file <tt>doc/misc/migration</> in the BIND source package. I don't deal with any migration issues in this document; I simply assume that you are replacing an existing, working installation of BIND 9. --> BIND 8 のような、古いバージョンの BIND からアップグレードする場合は、 BIND のソースパッケージの <tt>doc/misc/migration</> にある、 移行のための文書を読んでおくほうがいいでしょう。 移行に関する内容は、この文書では扱いません。 単に現在動作している BIND 9 のインストールを置き換えようとしている、 というのが本文書での想定対象です。 <!--O <sect1>Installing the Binaries --> <sect1>バイナリをインストールする <p> <!--O This is the easy part :-). Just run <tt>make install</> and let it take care of it for you. Really, that's it! --> これは簡単です :-) <tt>make install</> を実行して、おまかせするだけです。 いや、本当にこれだけなんですよ! <!--O <sect1>Setting up the Init Script --> <sect1>init スクリプトを編集する。 <p> <!--O If you have an existing init script from your distribution, it would probably be best simply to modify it to run the new binary, with the appropriate switches. The switches are... <it>(drumroll please...)</> --> ディストリビューションに含まれている init スクリプトがあれば、 新しいバイナリを適切なスイッチで起動するように、 そいつを変更するのが最も簡単でしょう。 スイッチは... <it/(ここでドラムロール...)/ <itemize> <!--O <item><tt>-u named</>, which tells BIND to run as the user <tt>named</>, rather than <tt>root</>. <item><tt>-t /chroot/named</>, which tells BIND to chroot itself to the jail that we've set up. <item><tt>-c /etc/named.conf</>, which tells BIND where to find its configuration file within the jail. --> <item><tt>-u named</>, これは BIND をユーザ <tt>root</> ではなく <tt>named</> で実行します。 <item><tt>-t /chroot/named</>, これにより BIND は自分自身を (先に用意した) jail に chroot します。 <item><tt>-c /etc/named.conf</>, これは BIND に、 jail の内部における設定ファイルのありかを教えます。 </itemize> <!--O The following is the init script I use with my Red Hat 6.0 system. As you can see, it is almost exactly the same as the way it shipped from Red Hat. I haven't tried the <tt>rndc</> commands yet, but I can't see any reason why they shouldn't work. --> 以下の init スクリプトは、著者が自分の Red Hat 6.0 システムで使っているものです。 おわかりのとおり、ほとんどは Red Hat のものと変わりありません。 わたしは <tt>rndc</> コマンドはまだ試していませんが、 これが動かない理由はないはずです。 <code> #!/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 /usr/local/sbin/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 /usr/local/sbin/named -u named -t /chroot/named -c /etc/named.conf echo touch /var/lock/subsys/named ;; stop) # Stop daemons. echo -n "Shutting down named: " killproc named rm -f /var/lock/subsys/named echo ;; status) status named exit $? ;; restart) $0 stop $0 start exit $? ;; reload) /usr/local/sbin/rndc reload exit $? ;; probe) # named knows how to reload intelligently; we don't want linuxconf # to offer to restart every time /usr/local/sbin/rndc reload >/dev/null 2>&1 || echo start exit 0 ;; *) echo "Usage: named {start|stop|status|restart|reload}" exit 1 esac exit 0 </code> <!--O As with syslogd, as of Red Hat 7.2 this process is now even easier. There is a file called <tt>/etc/sysconfig/named</> in which extra parameters for syslogd can be defined. The default <tt>/etc/rc.d/init.d/named</> on Red Hat 7.2, however, will check for the existance of <tt>/etc/named.conf</> before starting. You will need to correct this path. --> <!--TN syslogd は named の間違いだろう --> syslogd での場合と同じく、現在の Red Hat 7.2 では、 この過程はさらに簡単になっています。 <tt>/etc/sysconfig/named</> というファイルがあり、 ここで named に与える追加パラメータを定義できます。 ただし Red Hat 7.2 でのデフォルトの <tt>/etc/rc.d/init.d/named</> では、 起動前に <tt>/etc/named.conf</> があるかをチェックします。 このパスは変更しなければなりません。 <!--O On Caldera OpenLinux systems, you simply need to modify the variables defined at the top, and it will apparently take care of the rest for you: --> Caldera OpenLinux システムでは、 先頭付近で定義されている変数を修正し、以下のようにすれば OK です。 <tscreen><verb> NAME=named DAEMON=/usr/local/sbin/$NAME OPTIONS="-t /chroot/named -u named -c /etc/named.conf" </verb></tscreen> <!--O And for FreeBSD 4.3, you can edit the <tt>rc.conf</> file and put in the following: --> そして FreeBSD 4.3 では、<tt>rc.conf</> ファイルを編集して、 次の行を追加します。 <tscreen><verb> named_enable="YES" named_program="chroot/named/bin/named" named_flags="-u named -t /chroot/named -c /etc/namedb/named.conf" </verb></tscreen> <!--O <sect1>Configuration Changes --> <sect1>設定を変更する <p> <!--O You will also have to add or change a few options in your <tt>named.conf</> to keep the various directories straight. In particular, you should add (or change, if you already have them) the following directives in the <tt>options</> section: --> <tt/named.conf/ にもいくつか追加・修正を行い、 いろいろなディレクトリが正しく動作するようにする必要があります。 特に、以下を <tt/option/ セクションに追加 (あるいはすでにあれば修正) しなければなりません。 <tscreen><verb> directory "/etc/namedb"; pid-file "/var/run/named.pid"; statistics-file "/var/run/named.stats"; </verb></tscreen> <!--O Since this file is being read by the <tt>named</> daemon, all the paths are of course relative to the chroot jail. As of this writing, BIND 9 does not support many of the statistics and dump files that previous versions did. Presumably later versions will; if you are running such a version, you may have to add additional entries to cause BIND to write them to the <tt>/var/run</> directory as well. --> これらのファイルは <tt/named/ デーモンが読むことになるので、 もちろんパスはすべて chroot jail 内部での相対位置になります。 執筆の時点では、BIND 9 は前のバージョンでサポートされていた 統計情報やダンプファイルの多くを未だサポートしていません。 おそらく今後はサポートされていくと思います。 読者のお使いのものがこのようなバージョンである場合は、 BIND がそれらを <tt>/var/run</> ディレクトリに書けるように、 いくつかエントリを同じように追加する必要があるでしょう。 <!--O <sect>The End --> <sect>ジ・エンド <!--O <sect1>Launching BIND --> <sect1>BIND の起動 <p> <!--O Everything should be set up, and you should be ready to put your new, more secure BIND into action. Assuming you set up a SysV-style init script, you can simply launch it as: --> これですべての設定が終了しました。新しい、 より安全な BIND を実行に移せる時が来たわけです。 SysV 形式の init スクリプトを用いているなら、 次のように実行するだけです。 <tscreen><verb> # /etc/rc.d/init.d/named start </verb></tscreen> <!--O Make sure you kill any old versions of BIND still running before doing this. --> 実行前に古いバージョンの BIND が実行中だったら kill するのを忘れないように。 <!--O <sect1>That's It! --> <sect1>以上! <p> <!--O You can go take a nap now ;-). --> これで安心して眠ることができますね ;-) <!--O <sect>Appendix - Upgrading BIND Later<label id="upgrading"> --> <sect>付録 - 後に BIND をアップグレードするには<label id="upgrading"> <!--O <p>So, you had BIND 9.1.2 all nicely chrooted and tweaked to your taste... and then you hear this nasty rumour that BIND 9.1.3 is finally out, and you just have to give it a try right away. Do you have to go through this whole long process to install this new version? --> <p> さて、やっと BIND 9.1.2 がうまく chroot して、 望みのとおりにチューンできました... そうしたら、BIND 9.1.3 がリリースされ、 直ちにこちらをためすべき、 との腹立たしい噂が流れてきました。 この新しいバージョンでも、 ここまで述べてきた長い手続き全体を繰り返さなければならないのでしょうか? <!--O Nope. In fact, you really just need to compile the new BIND and install it over top of the old one. Just don't forget to kill the old version and restart BIND, or it'll still be the old version running! --> いいえ。実際に必要なのは、新しいバージョンの BIND をコンパイルして、 古いものに上書きインストールするだけです。 ただしその後古い版を kill して、BIND を再起動すること。 さもないと古いバージョンがそのまま実行し続けていますから! <!--O <sect>Appendix - Thanks<label id="thanks"> --> <sect>付録 - 謝辞<label id="thanks"> <p> <!--O I'd like to thank the following people for their assistance in the creation of this HOWTO: --> この HOWTO の作成の助けとなってくださった、 以下の方々に感謝します。 <itemize> <!--O <item>Lonny Selinger <tt><lonny at abyss.za.org></> for "testing" the first version of this HOWTO and making sure that I didn't miss any steps. --> <item>Lonny Selinger <tt><lonny at abyss.za.org></> は、この HOWTO の最初の版を「テスト」してくださり、 必要な手続きを飛ばしていないことを筆者に確信させてくれました。 <!--O <item>Chirik <tt><chirik at CastleFur.COM></>, Dwayne Litzenberger <tt><dlitz at dlitz.net></>, Phil Bambridge <tt><phil.b at cableinet.co.uk></>, Robert Cole <tt><rcole at metrum-datatape.com></>, Colin MacDonald <tt><colinm at telus.net></>, and others for pointing out errors, omissions, and providing other useful advice to make this HOWTO even better. --> <item>Chirik <tt><chirik at CastleFur.COM></>, Dwayne Litzenberger <tt><dlitz at dlitz.net></>, Phil Bambridge <tt><phil.b at cableinet.co.uk></>, Robert Cole <tt><rcole at metrum-datatape.com></>, Colin MacDonald <tt><colinm at telus.net></> ほか、 多くの皆さんがこの文書の間違い、欠落を指摘していただき、 またこの HOWOTO をより良くするための有益なアドバイスをくださいました。 <!--O <item>Erik Wallin <tt><erikw at sec.se></> and Brian Cervenka <tt><brian at zerobelow.org></> for providing good suggestions for further tightening the jail. --> <item>Erik Wallin <tt><erikw at sec.se></> と Brian Cervenka <tt><brian at zerobelow.org></> は、jail をさらに強固にするための、 優れた提案を送ってくれました。 <!--O <item>Robert Dalton <tt><support at accesswest.com></> for suggesting a couple more example commands, and pointing out BIND 9.2.0's need of <tt>/dev/random</>. --> <item>Robert Dalton <tt><support at accesswest.com></> は、コマンド例を追加案を提案してくださり、 また BIND 9.2.0 では <tt>/dev/random</> が必要となることを 指摘してくれました。 <!--O <item>Eric McCormick <tt><hostmaster at cybertime.net></> for the FreeBSD 4.3 information. --> <item>Eric McCormick <tt><hostmaster at cybertime.net></> は FreeBSD 4.3 の情報を送ってくれました。 <!--O <item>Tan Zheng Da <tt><tzd at pobox.com></> for the details about the changes in Red Hat 7.2 that make this a little easier. --> <item>Tan Zheng Da <tt><tzd at pobox.com></> は、作業を少々楽にしてくれる、 Red Hat 7.2 でなされた変更の詳細を教えてくれました。 </itemize> <!--O And last but certainly not least, I'd like to thank Nakano Takeo <tt><nakano at apm.seikei.ac.jp></> for translating the Chroot-BIND HOWTO into Japanese. You can find his translation at <url url="http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html">. --> そして最後に、 Chroot-BIND HOWTO を日本語に翻訳してくれた Nakano Takeo <tt><nakano at apm.seikei.ac.jp></> に感謝します。この翻訳は <url url="http://www.linux.or.jp/JF/JFdocs/Chroot-BIND-HOWTO.html"> にあります。 【訳注: 翻訳にあたっては、 堀田倫英さんと高橋全さんに有益なコメントをいただきました。】 <!--O <sect>Appendix - Document Distribution Policy<label id="legal"> --> <sect>付録 - 文書の配布ポリシー<label id="legal"> <p> Copyright © Scott Wunsch, 2000-2001. This document may be distributed only subject to the terms set forth in the LDP licence at <url url="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 <bf>without any warranty</>; without even the impled warranty of merchantability or fitness for a particular purpose. See the LDP licence for more details. 【訳注: 原文が優先されますが、参照のために翻訳を示します。 Copyright © Scott Wunsch, 2000-2001. この文書は <url url="http://metalab.unc.edu/LDP/COPYRIGHT.html"> にある LDP ライセンスに従えば配布できます。 この HOWTO はフリー文書です。 LDP ライセンスの下で再配布・改変が可能です。 この文書は有益であらんことを願って配布されていますが、 <bf>保証は一切ありません</>。 暗黙のものも含め、商用に役立つ保証もありませんし、 特定の用途に合致するかどうかもわかりません。 詳細は LDP ライセンスを見てください。 なお翻訳版も LDP ライセンスの下で再配布・改変可能とします。 Copyright © NAKANO Takeo, 2001.】 </article>