13 COMMERCIAL IP SECURITY OPTION
3.5. セキュリティポリシーの定義
3.5.2. DNS サーバー
3.5.2.2. djbdns (1) djbdns の概要
djbdns は、qmail で有名な D. J. Bernstein 氏の作品で、「安全、確実、高速、簡潔、
設定も簡単な DNS サービスとツール群」として紹介31されている。
djbdns および関連プログラム(daemontools、ucspi‑tcp)は Red Hat Linux では標準 パッケージとして用意されておらず、また SELinux でもそれらのセキュリティポリ シーは準備されていない。また、後述するように djbdns は SELinux と相性が悪いため 多少トリッキーな方法をとらなければならないのが難点である。
djbdns は、補助プログラムとして daemontools や ucspi‑tcp が必要であり、djbdns も含めて事前にインストールされているものとして説明を行う。プログラムのインス トールディレクトリパスはソースパッケージからビルドするときの標準的なまたは習 慣的に使用されるパスを使用する。
表 3‑11 djbdns 関連プログラムのインストールパス一覧
# ファイルパス 内 容
1 /package daemontools のソースのインストール先ディレク トリ
2 /package/admin/(次行に続く) daemontools‑x.xx/command
このディレクトリに実行プログラムの実体がイン ストールされる。x.xx はバージョン番号で、現在 は 0.76 である。
3 /command daemontools の実行プログラムの
4 /service svscan プログラムの監視対象ディレクトリ 5 /usr/local/bin djbdns 関連の実行プログラムのインストール先
ディレクトリ
6 /var/dnscache ローカルキャッシュサーバー用管理ディレクトリ 7 /var/dnscachex 外部キャッシュサーバー用管理ディレクトリ 8 /var/tinydns ゾーン DNS サーバー用管理ディレクトリ 9 /var/axfrdns ゾーン転送用管理ディレクトリ
djbdns を起動する場合は、#6 から#9 に示すようなディレクトリを/service ディレ クトリにシンボリックリンクを張ることにより daemontools が自動的に目的のプログ ラムを起動してくれる。daemontools は管理ディレクトリ内の log ディレクトリにロ グを出力するほか、run スクリプトも生成する。また、SELinux のコンセプトとしては、
「ログファイル」と「実行ファイル」には別々のセキュリティコンテキストをラベル 付けして、読み書きのアクセス権限やプログラム実行時の domain 遷移を設定しなけれ
Ⅱ‑110 Copyright © 2003 IPA, All Rights Reserved.
ばならない。ファイルの type を自動的に遷移する file̲type̲auto̲trans マクロが用 意されているが、複数の type(ログファイル用と実行ファイル用)に遷移させることは できないので、djbdns および daemontools を SELinux 上で使用する場合は工夫が必要 である。1 つは、daemontools を修正して run スクリプトを log ディレクトリ下に作成 しないようにすることだが、これは現実的ではない。もう 1 つは、permissive モード で djbdns を実行させた後、つまり実行時に作成されるファイルがすべて作成された後 に、ファイルのセキュリティコンテキストを設定する方法である。run スクリプトは 一旦作成されると変更されないため、この方法でも問題ない。実行後作成されるファ イルとしては、 supervise もある。
selinux/policy ディレクトリ下で make relabel を実行する方法もあるが、ファ イルひとつを変更する場合は、chcon コマンドを使用してリスト 3‑137 のように設定 する方法もある(①)。また、②のように setfiles コマンドを使用して、djbdns に関 連してファイルのセキュリティコンテキストをすべて設定しなおす方法もある。この 例は、管理ディレクトリが /var/dnscache を想定している。
リスト 3‑137 ファイルコンテキストの設定例
① chcon system̲u:object̲r:djbdns̲exec̲t /var/dnscache/log/run
② setfiles /usr/src/selinux/policy/file̲contexts/program/djbdns.fc /var
(2) セキュリティポリシー設定ファイル
djbdns および daemontools のセキュリティポリシーおよびファイルのセキュリティ コンテキスト定義ファイルは標準で組み込まれていない。表 3‑12 に djbdns の、表 3‑13 に daemontools の設定ファイルの名称を例として記載する。次節に説明するセ キュリティポリシーとセキュリティコンテキストをそれぞれのファイルに記述してシ ステムに組み込む必要がある。
表 3‑12 djbdns のポリシー設定ファイル一覧
# ファイルパス 内 容
1 policy/file̲contexts/program/djbdns.fc ファイルのセキュリティコンテキスト 2 policy/domains/program/djbdns.te セキュリティポリシー
表 3‑13 daemontools のポリシー設定ファイル一覧
# ファイルパス 内 容
1 policy/file̲contexts/program/daemontools.fc ファイルのセキュリティコンテ キスト
2 policy/domains/program/daemontools.te セキュリティポリシー
(3) ファイルのセキュリティコンテキスト
(A) daemontools 関連のセキュリティコンテキスト
リスト 3‑138 は、daemontools 関連のファイルのセキュリティコンテキスト一覧 である。①は daemontools のコマンドのシンボリックリンクがインストールされる ディレクトリである。②はコマンドのシンボリックリンクだがこのファイルには実 行ファイルと同じ daemontools̲exec̲t の type を付与する。③は各種デーモンの 管 理 デ ィ レ ク ト リ を シ ン ボ リ ッ ク リ ン ク す る た め の 監 視 用 デ ィ レ ク ト リ で 、
daemontools̲serv̲t という type を付与する。④は daemontools のトップディレ クトリで、この下にソースファイルやコマンドの実体が置かれる。ソースファイル 等には新規 type を付与する必要はないので src̲t とし、⑤でコマンド類には daemontools̲exec̲t という実行プログラムであることを識別できるような名称 の type を付与する。
リスト 3‑138 daemontools のセキュリティコンテキスト
① /command system̲u:object̲r:bin̲t
② /command/(.*)? system̲u:object̲r:daemontools̲exec̲t
③ /service(/.*)? system̲u:object̲r:daemontools̲serv̲t
④ /package(/.*)? system̲u:object̲r:src̲t
⑤ /package/admin/daemontools.*/command(/.*)?
system̲u:object̲r:daemontools̲exec̲t
(B) djbdns 関連のセキュリティコンテキスト
リスト 3‑139 は、root サーバーの IP アドレスを格納するファイルである。BIND でいうこところの named.root や named.ca ファイルに相当する。
Ⅱ‑112 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑139 dnsroots.global 用セキュリティコンテキスト
/etc/dnsroots.global system̲u:object̲r:djbdns̲etc̲t
リスト 3‑140 は、djbdns の実行プログラムに付与するセキュリティコンテキス トである。デフォルトのインストール先は/usr/local/bin ディレクトリである。
リスト 3‑140 djbdns の実行ファイルのセキュリティコンテキスト
/usr/local/bin/axfr‑get system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/axfrdns.* system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnscache.* system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsfilter system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsip system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsipq system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsmx system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsname system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsq system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnsqr system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnstrace system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnstracesort system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/dnstxt system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/pickdns.* system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/random‑ip system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/rbldns.* system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/tinydns.* system̲u:object̲r:djbdns̲exec̲t /usr/local/bin/walldns.* system̲u:object̲r:djbdns̲exec̲t
リスト 3‑141(ローカルキャッシュサーバー)、リスト 3‑142(外部キャッシュ サーバー、リスト 3‑143(ゾーン DNS サーバー)、リスト 3‑144(ゾーン転送用サー バー)は、DNS サーバーを構築する際の目的別の管理ディレクトリである。それぞれ の管理ディレクトリは、dnscache‑conf、tinydns‑conf、axfrdns‑conf コマンドで 作成される。管理ディレクトリの構造を簡単に表 3‑14 に説明する。
表 3‑14 管理ディレクトリの構造
# ディレクトリ・ファイル 内 容
1 env ディレクトリ プログラムの動作パラメタで、ファイル名が環境変 数名、ファイル内容がその値となる
2 log ディレクトリ ログ格納ディレクトリ。run スクリプトも含まれる 3 root ディレクトリ クライアントの IP アドレス、root サーバー、DNS サー
バーを登録するディレクトリ、tinydns の data ファ イル等が置かれる。
4 supervise ディレクトリ supervise コマンドがデーモンを監視する作業ディ レクトリ
5 run スクリプト デーモンを起動するスクリプト
管理ディレクトリを作成する権限の設定は行っていないため、必ず permissive モードで作成しなければならない。また、log ディレクトリ下の run スクリプトや supervise ディレクトリはプログラムが起動された後に作成されるので、セキュリ ティコンテキストの再設定が必要である。
また、それぞれの管理ディレクトリの構成は使用目的により多少異なるが、ほぼ 同じ構成をとっている。ファイルのセキュリティコンテキストを定義する場合に注 意しなければならないのは、リスト 3‑141 のリストの例で説明すると、①の log お よびそのディレクトリ下のファイルに対するセキュリティコンテキストの定義と、
②の log/run ファイルに対するセキュリティコンテキストの定義の順序である。こ の順序を逆にすると、log/run ファイルにログファイルの type djbdns̲ver̲log̲t が付与されてしまい、run スクリプトを実行できなくなる。
リスト 3‑141 は、ローカルキャッシュサーバー用のファイル構成とそのファイル 群に付与するセキュリティコンテキストである。ローカルキャッシュサーバーとは、
単独で稼動しているマシンで、外部 DNS を参照するキャッシュサーバーである。自 システム内からのみの名前解決要求が出されるサーバーである。
リスト 3‑141 ローカルキャッシュサーバー用管理ディレクトリ
/var/dnscache system̲u:object̲r:djbdns̲var̲t /var/dnscache/env(/.*)? system̲u:object̲r:djbdns̲var̲env̲t
① /var/dnscache/log(/.*)? system̲u:object̲r:djbdns̲var̲log̲t /var/dnscache/root(/.*)? system̲u:object̲r:djbdns̲var̲root̲t /var/dnscache/seed system̲u:object̲r:djbdns̲var̲seed̲t /var/dnscache/supervise(/.*)? system̲u:object̲r:djbdns̲var̲supervise̲t /var/dnscache/run system̲u:object̲r:djbdns̲exec̲t
② /var/dnscache/log/run system̲u:object̲r:djbdns̲exec̲t
リスト 3‑142 は、外部キャッシュサーバー用のファイル構成とそのファイル群に
Ⅱ‑114 Copyright © 2003 IPA, All Rights Reserved.
付 与 す る セ キ ュ リ テ ィ コ ン テ キ ス ト で あ る 。 外 部 キ ャ ッ シ ュ サ ー バ ー と は localhost 以外のマシンから利用可能なサーバーで、構造的にはローカルキャッ シュサーバーとほぼ同じである。
リスト 3‑142 外部キャッシュサーバー用管理ディレクトリ
/var/dnscachex system̲u:object̲r:djbdns̲var̲t /var/dnscachex/env(/.*)? system̲u:object̲r:djbdns̲var̲env̲t /var/dnscachex/log(/.*)? system̲u:object̲r:djbdns̲var̲log̲t /var/dnscachex/root(/.*)? system̲u:object̲r:djbdns̲var̲root̲t /var/dnscachex/seed system̲u:object̲r:djbdns̲var̲seed̲t /var/dnscachex/supervise(/.*)? system̲u:object̲r:djbdns̲var̲supervise̲t /var/dnscachex/run system̲u:object̲r:djbdns̲exec̲t
/var/dnscachex/log/run system̲u:object̲r:djbdns̲exec̲t
リスト 3‑143 は、ゾーン DNS サーバー用のファイル構成とそのファイル群に付与 するセキュリティコンテキストである。ゾーン DNS サーバーとは特定ホストのホス ト名情報を受け持つ DNS サーバーである。
リスト 3‑143 ゾーン DNS サーバー用管理ディレクトリ
/var/tinydns system̲u:object̲r:djbdns̲var̲t /var/tinydns/env(/.*)? system̲u:object̲r:djbdns̲var̲env̲t /var/tinydns/log(/.*)? system̲u:object̲r:djbdns̲var̲log̲t /var/tinydns/root(/.*)? system̲u:object̲r:djbdns̲var̲root̲t /var/tinydns/root/add‑alias system̲u:object̲r:djbdns̲exec̲t /var/tinydns/root/add‑childns system̲u:object̲r:djbdns̲exec̲t /var/tinydns/root/add‑host system̲u:object̲r:djbdns̲exec̲t /var/tinydns/root/add‑mx system̲u:object̲r:djbdns̲exec̲t /var/tinydns/root/add‑ns system̲u:object̲r:djbdns̲exec̲t /var/tinydns/seed system̲u:object̲r:djbdns̲var̲seed̲t /var/tinydns/supervise(/.*)? system̲u:object̲r:djbdns̲var̲supervise̲t /var/tinydns/run system̲u:object̲r:djbdns̲exec̲t
/var/tinydns/log/run system̲u:object̲r:djbdns̲exec̲t
リスト 3‑144 は、djbdns からセカンダリサーバーとして運用している BIND に ゾーンを転送する場合の、管理ディレクトリのファイル構成とそのファイル群に付 与するセキュリティコンテキストである。