13 COMMERCIAL IP SECURITY OPTION
3.5. セキュリティポリシーの定義
3.5.2. DNS サーバー
3.5.2.1. BIND 9 (1) BIND の概要
もっとも普及している DNS の実装は BIND(Berkeley Internet Name Domain)で、も ともとは 4.3BSD 用に開発されたプログラムである。現在は、Internet Software Consortium (ISC)30が開発を行っており無償で入手することができる。
Red Hat Linux では、バージョン 7.1 から BIND 9 を採用しており、Red Hat Linux 8.0 には BIND 9.2.1 が RPM パッケージとして組み込まれている。
表 3‑9 に BIND 9 のディレクトリ構造を示す。当然であるが named.conf の記述次第 でゾーンファイルを格納するディレクトリパスや、named プログラムへのオプション として ‑t を指定することにより named.conf 自身のパスも変更できる。
表 3‑9 BIND 9 のディレクトリ構造
# ファイルパス 内 容
1 /etc/named.conf コンフィギュレーションファイル 2 /etc/rndc.* rndc 関連(conf、key)
3 /var/named/ ゾーンファイル用のディレクトリ 4 /usr/sbin/ named 等の実行プログラム 5 /var/run/named/ PID 用のファイル
SELinux が標準で提供しているセキュリティポリシーおよびファイルに付与するセ キュリティコンテキストが想定しているディレクトリ構造は、表 3‑9 とは多少異なる。
(2) セキュリティポリシー設定ファイル
BIND 用のファイル用のセキュリティコンテキストおよびセキュリティポリシーの 設定ファイルは表 3‑10 に示すように SELinux に標準で組み込まれている。
Ⅱ‑100 Copyright © 2003 IPA, All Rights Reserved.
表 3‑10 BIND のポリシー設定ファイル一覧
# ファイルパス 内 容
1 policy/file̲contexts/program/named.fc ファイルのセキュリティコンテキスト 2 policy/domains/program/named.te セキュリティポリシー
(3) ファイルのセキュリティコンテキスト (A) 実行ファイル
リスト 3‑116 は、BIND の実行ファイルのセキュリティコンテキストである。こ れらのファイルが/usr/local 等の別の場所にインストールされている場合は、この 定義ファイルを変更しなければならない。
リスト 3‑116 実行ファイルのセキュリティコンテキスト
/usr/sbin/lwresd system̲u:object̲r:named̲exec̲t /usr/sbin/named.* system̲u:object̲r:named̲exec̲t /usr/sbin/r?ndc system̲u:object̲r:ndc̲exec̲t
(B) コンフィギュレーションファイル
リスト 3‑117 は、named プログラムおよび rndc コマンド用のコンフィギュレー ションファイルに対するセキュリティコンテキストである。 named.conf の設定に よりゾーンファイルの格納ディレクトリを定義できるので、自システムの環境に合 わせて正確に設定しなければならない。
SELinux 標準の設定ファイルでは、①のように/var/named ディレクトリ以下に named̲conf̲t type を付与している。通常、このディレクトリ下にはゾーンファ イルが置かれるので、この設定には疑問が残る。3.5.2.1(3)(C)で記述するように
named̲zone̲t を付与すべきである。
まは、②に示すように rndc コマンド関連のコンフィギュレーションは、Red Hat Linux では/etc ディレクトリ直下にインストールされるので、このような定義が必 要である。
リスト 3‑117 conf ファイルのセキュリティコンテキスト
/etc/bind/named.conf system̲u:object̲r:named̲conf̲t /etc/named.conf system̲u:object̲r:named̲conf̲t
① /var/named(/.*)? system̲u:object̲r:named̲conf̲t /etc/bind/rndc.key system̲u:object̲r:rndc̲conf̲t
② /etc/rndc.* system̲u:object̲r:rndc̲conf̲t
(C) プライマリサーバー用ゾーンファイル
リスト 3‑118 は、ゾーンファイルのセキュリティコンテキストである。通常 named̲zone̲t に対しては読み込み専用の設定をするが、ダイナミック DNS を使 用する場合は、書き込み権限を与える必要がある。3.5.2.1(4)(F)で述べるファイル のアクセス権限でデフォルトでは読み込み専用で設定されている(r̲dir̲file マク ロ使用)。これを、rw̲dir̲file マクロを使用して書き込みも許可する。
前節で述べたが、①に示すように/var/named ディレクトリ下は一般にゾーンファ イル用に使用されるので、この行を追加して named̲zone̲t を付与すべきである。
リスト 3‑118 ゾーンファイルのセキュリティコンテキスト
/etc/bind(/.*)? system̲u:object̲r:named̲zone̲t
① /var/named(/.*)? system̲u:object̲r:named̲zone̲t
(D) セカンダリサーバー用ゾーンファイル
リスト 3‑119 は、BIND をセカンダリサーバーとして運用している場合の設定で ある。つまり、プライマリサーバーからゾーンファイルを転送するため、ゾーンファ イルに対する書き込み権限が必要になる。前節(C)の named̲zone̲t とは type を区別 しておいた方がより安全である。
プライマリサーバーと同じディレクトリ構造をとりたい場合は、①に示したよう に/var/named ディレクトリ下に named̲cache̲t とう type を設定することもできる。
もしくは、②のように named̲zone̲t type を設定し、セキュリティポリシー設定 時に named̲zone̲t type の読み書き権限を設定するという方法もある。
Ⅱ‑102 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑119 cache ファイルのセキュリティコンテキスト
/var/cache/bind(/.*)? system̲u:object̲r:named̲cache̲t
① /var/named(/.*)? system̲u:object̲r:named̲cache̲t
② /var/named(/.*)? system̲u:object̲r:named̲zone̲t
(E) PID 用ファイル
リスト 3‑120 は、named および rndc 用のプロセス ID を格納するファイルのセキュ リティコンテキストである。Red Hat Linux 8.0 では、/var/run/named ディレクト リ下に PID 用ファイルが作成されるので、①の設定が必要である。
リスト 3‑120 PID 用ファイルのセキュリティコンテキスト
/var/run/bind(/.*)? system̲u:object̲r:var̲run̲named̲t /var/run/ndc system̲u:object̲r:var̲run̲named̲t
① /var/run/named(/.*)? system̲u:object̲r:var̲run̲named̲t
(4) セキュリティポリシー (A) ポート type
リスト 3‑121 は、named または rndc が使用するポートの type 定義である。一般 的に、①は 53 番ポート、②は 953 番ポートに設定されている。
リスト 3‑121 ポートの type 定義
① type named̲port̲t, port̲type;
② type rndc̲port̲t, port̲type;
(B) domain 定義
リスト 3‑122 は、named と ndc/rndc の domain 定義である。named は daemon̲domain マクロを使用してデーモンとしての一般的な domain 定義マクロにより定義されて いる(①)。このマクロを使用することにより named̲t という domain や named̲exec̲t という実行ファイルに付与される type、initrc̲t からの domain 遷移等の宣言が展
開される。②は ndc/rndc の domain 定義で、③はシステム管理者(sysadm̲r)の role に対してのみ ndc̲t に遷移できることを許可している。④は ndc/rndc コマンドの実 行ファイル自身に付与される type の宣言である。⑤はその実行ファイルをシステム 管理者(sysadm̲t)が実行したときに自動的に domain を ndc̲t に遷移させる宣言であ る。⑥は ndc/rndc コマンド実行時に必要なライブラリの実行権限の設定である。
リスト 3‑122 named・ndc の domain 定義
① daemon̲domain(named)
② type ndc̲t, domain, privlog;
③ role sysadm̲r types ndc̲t;
④ type ndc̲exec̲t, file̲type,sysadmfile, exec̲type;
⑤ domain̲auto̲trans(sysadm̲t, ndc̲exec̲t, ndc̲t)
⑥ uses̲shlib(ndc̲t)
(C) named̲t domain への権限設定
リスト 3‑123 は、named̲t(domain)に対して named̲exec̲t(type)を持つファイル を実行できるようにするための定義で、can̲exec マクロを使用してその権限設定を 行っている(①)。②は、sbin̲t(type)を持つディレクトリ(/sbin、/usr/sbin)の検 索権限である。
リスト 3‑123 named の実行許可
① can̲exec(named̲t, named̲exec̲t)
② allow named̲t sbin̲t:dir search;
リスト 3‑124 は、named̲t domain に対して sched̲setscheduler や nice システ ムコールを発行し、自身のプロセススケジューリングポリシーを変更できるように する定義である。
Ⅱ‑104 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑124 sched̲setscheduler の許可
allow named̲t self:process setsched;
(D) ファイル type 宣言
リスト 3‑125 は、BIND が使用するファイルに設定するセキュリティコンテキス トの type 宣言である。①は named.conf、②は rndc.conf、③はプライマリサーバー 用ゾーンファイル、④はセカンダリサーバー用のゾーンファイルに設定する type である。③、④を分ける理由は、named からプライマリサーバー用のゾーンファイ ルは読み込み専用にし、セカンダリサーバー用のゾーンファイルはプライマリサー バーから転送したゾーンデータを書き込める用にするために、type を分ける必要が あるからである。
リスト 3‑125 ファイルの type 宣言
① type named̲conf̲t, file̲type, sysadmfile;
② type rndc̲conf̲t, file̲type, sysadmfile;
③ type named̲zone̲t, file̲type, sysadmfile;
④ type named̲cache̲t, file̲type, sysadmfile;
(E) ケイパビリティ
リスト 3‑126 は、named̲t(named デーモン)自身がケイパビリティの設定をでき るようにするための権限である。
リスト 3‑126 ケイパビリティの設定権限
allow named̲t self:process setcap;
リスト 3‑127 は、named̲t/ndc̲t domain に対するケイパビリティの設定である。
①では named̲t domain に対し、setuid(UID の設定)、setgid(GID の設定)、ソケッ トの bind、chown/fowner(ファイルのオーナー、グループの変更)、dac̲override (DAC の無効化。任意アクセス制御の制限を無効化する)、nice(nice 値の変更)のそれぞ れの権限を与える。②では ndc̲t domain に対し、dac̲override の権限を与えてい
る。
リスト 3‑127 ケイパビリティの設定
① allow named̲t named̲t:capability { setuid setgid net̲bind̲service chown fowner dac̲override sys̲nice };
② allow ndc̲t self:capability dac̲override;
(F) ファイルのアクセス権限
named デーモンや ndc/rndc コマンドに関連したファイルのアクセス権限を設定す る。読み込み専用にしなければならないファイルや書き込みも必要ファイル等を考 えて設定する必要がある。
リスト 3‑128 は、/etc ディレクトリ下のファイルに対する読み込み権限の設定 である。①、②は/etc ディレクトリ下の一般的なファイルおよびリンクファイル、
③ は シ ス テ ム 実 行 時 に 作 成 さ れ る フ ァ イ ル お よ び リ ン ク フ ァ イ ル 、 ④ は /etc/resolv.con ファイルである。
リスト 3‑128 /etc 下の読み込み権限
① allow named̲t etc̲t:{ file lnk̲file } { getattr read };
② allow ndc̲t etc̲t:dir r̲dir̲perms;
③ allow named̲t etc̲runtime̲t:{ file lnk̲file } { getattr read };
④ allow named̲t resolv̲conf̲t:file { getattr read };
リスト 3‑129 は、リスト 3‑125 で設定したファイルへのアクセス権限である。
①は named.conf に対する読み込み権限である。r̲dir̲file はマクロで、第 2 引数 に設定したディレクトリおよびファイルに読み込み権限を与える。②は、ゾーンファ イルに対する読み込み権限で、③はセカンダリサーバー用のゾーンファイルに対す る読み書き権限である。④は ndc/rndc 用のコンフィギュレーションファイルに対す る読み込み権限で、named̲t、ndc̲t、initrc̲t のそれぞれに対して許可を行ってい る。ダイナミック DNS を利用してゾーンファイルを自動的に更新する場合は named̲zone̲t に対して書き込み権限を与える必要があるので、②の r̲dir̲file マ クロを rw̲dir̲file マクロに変更する必要がある。
Ⅱ‑106 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑129 ファイルのアクセス権限
① r̲dir̲file(named̲t, named̲conf̲t)
② r̲dir̲file(named̲t, named̲zone̲t)
③ rw̲dir̲create̲file(named̲t, named̲cache̲t)
④ allow { named̲t ndc̲t initrc̲t } rndc̲conf̲t:file { getattr read };
(G) ネットワーク関連の権限
リスト 3‑130 は、ネットワーク関連の設定である。①は UDP/TCP のソケットの作 成や使用を許可するマクロで、named̲t domain にその許可を与えている。②、③、
④は、named̲t(named デーモン)以外からの domain(プログラム)からの UDP パケット の送受信、TCP の接続および送受信の許可を設定している。⑤、⑥では、named̲port̲t および rndc̲port̲t のそれぞれのポートに対する udp/tcp の bind の許可である。
リスト 3‑130 ネットワーク関連の権限
① can̲network(named̲t)
② can̲udp̲send(domain, named̲t)
③ can̲udp̲send(named̲t, domain)
④ can̲tcp̲connect(domain, named̲t)
⑤ allow named̲t named̲port̲t:udp̲socket name̲bind;
⑥ allow named̲t { named̲port̲t rndc̲port̲t }:tcp̲socket name̲bind;
リスト 3‑131 は、UNIX(LOCAL)ドメインプロトコルを利用した STREAM 型と DGRAM 型のソケットを作成および使用する許可である。
リスト 3‑131 UNIX ドメインプロトコル用ソケットの権限
allow named̲t self:unix̲stream̲socket create̲stream̲socket̲perms;
allow named̲t self:unix̲dgram̲socket create̲socket̲perms;
リスト 3‑132 は、ndc̲t に対してネットワーク関連の権限を付与する設定である。
①は、can̲network マクロによりソケットの作成、パケットの送受信を許可する設 定である。②の can̲tcp̲connect マクロにより ndc̲t が named̲t(named デーモン) に対して、TCP によるソケットの接続、パケットの送受信を許可している。③、④ は ndc̲t 自身に対し、⑤は named̲t に対して UNIX(LOCAL)ドメインプロトコルを利