実践で学ぶ、一歩進んだサーバ構築・運用術

第 3 回 ネームサーバ (後編)


犠牲パーティション

外向けネーム・サーバーは, 本質的に不特定多数に対してサービスを行う必要があります。 したがって攻撃を受ける危険が高いサーバーの一つと言えます。 万一侵入されても被害が限定できるようなサーバー構築が必要です。 図1のような構成のネットワークであれば, サーバー・ソフトを犠牲マシン上で動かすことにより, 万一侵入されても被害を犠牲マシンに限定することができます。

図3のような構成のネットワークの場合に, 被害を限定するためのツールが chroot です。 chroot を使うと, 任意のディレクトリをルート・ディレクトリに設定して サーバー・プログラムを実行できます。 そのプログラムは, 設定されたルート・ディレクトリの外にあるディレクトリに アクセスすることはできません。 もちろん, ルート・ディレクトリを元のルートに戻すことは不可能です (カーネルにバグがなければ)。

したがって, このサーバー・プログラムが侵入に利用されたとしても, 侵入者が自由にアクセスできるのは, ルート・ディレクトリとして設定されたディレクトリの中だけで, もしこのディレクトリが, sh や perl など侵入者が喜びそうなものは一切置かないパーティションであれば 被害をこのパーティション内に限定することができます。 このようなパーティションを犠牲パーティションと呼びます(図4)。

犠牲パーティション
図4 犠牲パーティション
chroot を使ってルート・ディレクトリを移動しておくことで, 侵入された場合の被害を限定することができます。

bind-8.2.2-P5 などの最近のネーム・サーバーでは, chroot の機能が内蔵されていますので, -tオプションに犠牲パーティションを指定するだけで済みます。 例えば, 犠牲パーティション「/alt-root」を作って, 外向けネーム・サーバーを立ち上げるには, 図5のように実行します。


# named -t /alt-root -u daemon -g daemon
図5 犠牲パーティションを作って,外向けネーム・サーバーを立ち上げる方法
「-u daemon -g daemon」は,namedをdaemon権限で動かすためのオプションです。

「-u daemon -g daemon」は, named を daemon 権限で動かすためのオプションです。 ネーム・サーバーは立ち上げが完了してしまえば*5, root 権限で動かす必要はありませんから, このように root 以外の権限で走るようにしてしまえばより安全です。

犠牲パーティション /alt-root には, 外向けネーム・サーバーの実行に最低限必要なファイルやディレクトリ(表1) だけを整えておきます。 ネーム・サーバーの実行ファイルやダイナミック・ライブラリも 必要なように思えますが, これらは起動時にオープンされますから /alt-root 下には置きません。 /alt-root/var/named/ のディレクトリは, 設定ファイル named.conf で変更可能です。

表1 外向けネーム・サーバーの実行に最低限必要なファイルやディレクトリ
/alt-root/etc/named.conf の設定例を図6に挙げています。
ファイル名(ディレクトリ名)内容
/alt-root/etc/named.conf設定ファイル
/alt-root/var/named/作業ディレクトリ
/alt-root/dev/logログの出力先(syslogdが作るソケット)

/alt-root/dev/log については少々説明が必要でしょう。 多くのサーバー・プログラムは, /dev/log へログ・データを出力します。 /dev/log は unix-domain ソケットと呼ばれる特殊ファイルです。 サーバー・プログラムが出力したログ・データを, syslogd が /dev/log から読み込み, /etc/syslog.conf の設定に従って /var/adm/syslog 等の ログ・ファイルへ出力します。

当然, /alt-root へ chroot したネーム・サーバーは, /alt-root/dev/log にログ・データを出力しようとしますから, syslogd は /dev/log と /alt-root/dev/log の両方から ログ・データを読み込む必要があります。 犠牲パーティションがほかにもある場合は, それぞれのパーティションの /dev/log を読み込まなければなりません。 そのためには, 次のように -a オプションを指定して syslogd を実行します。 -aオプションは19個まで指定できます。


# syslogd -a /alt-root/dev/log
*5
ポート 53 番を開くために root 権限が必要なので, 立ち上げ時には root で実行する必要があります。

(外向けネーム・サーバー)


banner 本稿は日経Linux 2000 年 6 月号に掲載された、 実践で学ぶ、一歩進んだサーバ構築・運用術, 第 3 回「ネームサーバ (後編)」を日経BP 社の許可を得て転載したものです。

Copyright(C)2000 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます

| home | up |

sengoku@gcd.org