13 COMMERCIAL IP SECURITY OPTION
3.5. セキュリティポリシーの定義
3.5.3. SMTP サーバー
3.5.3.2. qmail
本節では、qmail を利用した SMTP サーバー構築の際の設定指針として、SELinux に標準 で用意されているセキュリティポリシー定義を解説し、その留意点を明らかにする。
qmail の RPM パッケージを入手することは難しい。qmail の本家サイトにて配布されてい るパッケージは SRPM であり、ビルド済みである RPM パッケージは配布されていないようで ある。そこで本ガイドラインでは、qmail をソースより標準設定にてコンパイルしてインス トールした環境を想定することにする。
qmail ではその運用形態として様々な形態が選択可能となっているが、本ガイドラインで は以下の運用形態を想定するものとする。
• qmail の運用ディレクトリは/var/qmail とする。
• プログラム qmail‑smtpd はスーパーサーバーxinetd より起動する。
• ローカルメールの配送形態は、各ユーザのホームディレクトリ下に mbox 形式にて 配送する。
(1) ディレクトリ構造
qmail を標準構成にてコンパイル・インストールした際のディレクトリ構造を表 3‑17 に示す。以降ではこのディレクトリ構造に則してセキュリティポリシー定義を解 説する。なお同表では、ドキュメントファイルあるいは man ページ等のインストール 先は記載していないので注意してほしい。
表 3‑17 qmail のディレクトリ構造
# ファイルパス 内容
1 /etc/rc.d/init.d/ initrc スクリプトの配置先 2 /var/qmail/ qmail の運用ディレクトリ 3 /var/qmail/alias/ エイリアスファイルの配置先
4 /var/qmail/bin/ qmail を構成する各種プログラムの配置先 5 /var/qmail/boot/ qmail 起動サンプルスクリプトの配置先
6 /var/qmail/control/ コンフィギュレーションファイルの配置先 7 /var/qmail/queue/ キューディレクトリ
8 /var/qmail/users/ メールアドレスとローカルホストのユーザアカ ウントとの対応付けを定義したデータベース ファイルの配置先
9 /var/spool/mail/ スプールディレクトリ。本ディレクトリ下の各 ユーザのメールボックスファイルは、各々ユー ザのホームディレクトリ下に作成したメール ボックスファイルへのシンボリックリンクであ るとする。
(2) セキュリティポリシー設定ファイル
qmail に関連するセキュリティポリシー定義ファイルを表 3‑18 に示す。
表 3‑18 qmail のセキュリティポリシー定義ファイル一覧
# ファイルパス 説明
1 file̲contexts/program/qmail.fc qmail に関連するファイルに対してアタッチす るセキュリティコンテキストを定義したファイ ル
2 domains/program/qmail.te qmail に関連するセキュリティポリシーを定義 したファイル
な お 、 SMTP サ ー バ ー 共 通 の セ キ ュ リ テ ィ ポ リ シ ー 定 義 フ ァ イ ル に 関 し て は 3.5.3.4(1)を参照してほしい。
(3) オブジェクトのセキュリティコンテキスト
qmail に関連した各種オブジェクトに対してアタッチするセキュリティコンテキス トを解説する。
(A) ファイルのセキュリティコンテキスト
qmail に関連するファイルとディレクトリにアタッチするセキュリティコンテキ
Ⅱ‑140 Copyright © 2003 IPA, All Rights Reserved.
ストはファイル file̲contexts/program/qmail.fc にて定義される。
ファイル file̲contexts/program/qmail.fc の全容は付録のリスト A‑15 を参照し てほしい。
コンフィギュレーションファイル
リスト 3‑183 は、qmail のコンフィギュレーションファイルにアタッチするセ キュリティコンテキストの定義である。
リスト 3‑183 コンフィギュレーションファイルのセキュリティコンテキスト
① /etc/qmail(/.*)? system̲u:object̲r:etc̲qmail̲t /var/qmail(/.*)? system̲u:object̲r:etc̲qmail̲t
なお、qmail をソースより標準設定にてコンパイル・インストールした環境では、
qmail を構成するすべてのプログラムはディレクトリ/var/qmail 下にインストール されるため、①は必要のない定義である。
キューディレクトリ
リスト 3‑184 は、qmail のキューディレクトリと同ディレクトリ下のファイルに アタッチするセキュリティコンテキストの定義である。
リスト 3‑184 /var/spool/qmail のセキュリティコンテキスト
/var/spool/qmail(/.*)? system̲u:object̲r:qmail̲spool̲t
リスト 3‑184 より判るとおり、SELinux に標準で含まれているファイルコンテキ ストの定義は qmail をソースより標準構成にてインストールした場合と異なってい る。そこで、リスト 3‑185 に示すように修正しなければならない。
リスト 3‑185 /var/qmail/queue のセキュリティコンテキスト定義を追加
/var/qmail/queue(/.*)? system̲u:object̲r:qmail̲spool̲t
qmail を構成するプログラムの実行ファイル
リスト 3‑186 は、qmail を構成する各種プログラムの実行ファイルにアタッチす るセキュリティコンテキストの定義である。
リスト 3‑186 実行ファイルのセキュリティコンテキスト(修正前)
/usr/sbin/qmail‑start system̲u:object̲r:qmail̲start̲exec̲t /usr/sbin/qmail‑lspawn system̲u:object̲r:qmail̲lspawn̲exec̲t /usr/bin/tcp‑env system̲u:object̲r:qmail̲tcp̲env̲exec̲t /usr/sbin/qmail‑inject system̲u:object̲r:qmail̲inject̲exec̲t /usr/sbin/qmail‑smtpd system̲u:object̲r:qmail̲smtpd̲exec̲t /usr/sbin/qmail‑queue system̲u:object̲r:qmail̲queue̲exec̲t /usr/sbin/qmail‑local system̲u:object̲r:qmail̲local̲exec̲t /usr/sbin/qmail‑clean system̲u:object̲r:qmail̲clean̲exec̲t /usr/sbin/qmail‑send system̲u:object̲r:qmail̲send̲exec̲t /usr/sbin/qmail‑rspawn system̲u:object̲r:qmail̲rspawn̲exec̲t /usr/sbin/qmail‑remote system̲u:object̲r:qmail̲remote̲exec̲t /usr/sbin/qmail‑qread system̲u:object̲r:qmail̲qread̲exec̲t /usr/sbin/splogger system̲u:object̲r:qmail̲splogger̲exec̲t /usr/sbin/qmail‑getpw system̲u:object̲r:qmail̲exec̲t
/usr/local/bin/serialmail/.* system̲u:object̲r:qmail̲serialmail̲exec̲t
3.5.3.2(1)にて示したとおり、qmail をソースより標準構成にてコンパイル・イ ンストールした場合、qmail を構成するすべての実行ファイルはディレクトリ /var/qmail/bin にインストールされる。そこで、上記のセキュリティポリシーをリ スト 3‑187 に示すように修正しなければならない。
Ⅱ‑142 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑187 実行ファイルのセキュリティコンテキスト(修正後)
① /var/qmail/bin(/.*)? system̲u:object̲r:bin̲t
/var/qmail/bin/qmail‑start system̲u:object̲r:qmail̲start̲exec̲t /var/qmail/bin/qmail‑lspawn system̲u:object̲r:qmail̲lspawn̲exec̲t /var/qmail/bin/tcp‑env system̲u:object̲r:qmail̲tcp̲env̲exec̲t /var/qmail/bin/qmail‑inject system̲u:object̲r:qmail̲inject̲exec̲t /var/qmail/bin/qmail‑smtpd system̲u:object̲r:qmail̲smtpd̲exec̲t /var/qmail/bin/qmail‑queue system̲u:object̲r:qmail̲queue̲exec̲t /var/qmail/bin/qmail‑local system̲u:object̲r:qmail̲local̲exec̲t /var/qmail/bin/qmail‑clean system̲u:object̲r:qmail̲clean̲exec̲t /var/qmail/bin/qmail‑send system̲u:object̲r:qmail̲send̲exec̲t /var/qmail/bin/qmail‑rspawn system̲u:object̲r:qmail̲rspawn̲exec̲t /var/qmail/bin/qmail‑remote system̲u:object̲r:qmail̲remote̲exec̲t /var/qmail/bin/qmail‑qread system̲u:object̲r:qmail̲qread̲exec̲t /var/qmail/bin/splogger system̲u:object̲r:qmail̲splogger̲exec̲t /var/qmail/bin/qmail‑getpw system̲u:object̲r:qmail̲exec̲t
/usr/local/bin/serialmail/.* system̲u:object̲r:qmail̲serialmail̲exec̲t
② /var/qmail/bin/sendmail system̲u:object̲r:sendmail̲exec̲t
ディレクトリ/var/qmail/bin 下には、上記のプログラム以外にも幾つものプログ ラムがインストールされている。固有の domain をアタッチしないプログラムの実行 ファイルには汎用的な実行ファイルを示す type「bin̲t」をアタッチしておいた方 が良いだろう38(①)。
qmail には、sendmail との互換性を考慮して、プログラム qmail‑inject をラッ プしたプログラム/var/qmail/bin/sendmail が用意されている。このプログラムに は忘れずに type「sendmail̲exec̲t」をアタッチしなければならない(②)。
(B) ポートのセキュリティコンテキスト
ポートに対するセキュリティコンテキストはファイル net̲contexts にて定義さ れ て お り 、 こ の 際 ア タ ッ チ さ れ る type 「 smtp̲port̲t 」 は フ ァ イ ル domains/program/mta.te にて定義されている。ファイル mta.te に関しては、
3.5.3.4(4)を参照してほしい。
(4) マクロ
ファイル domains/program/qmail.te では幾つかのマクロが定義されている。これら
38 これらのプログラムの中には、適切に稼動させるために固有の domain を定義し、適切なセキュリティポ リシーを定義しなければならないものも存在することに注意してほしい。
のマクロはいずれも postfix のデーモンプロセスにアタッチする domain を定義するた めのものである。ここでは、これらのマクロに関して解説する。
(A) qmaild̲sub̲domain
リスト 3‑188 に示すマクロ「qmaild̲sub̲domain」は、同マクロ呼び出し時の第 1 引数に指定された domain 修飾子を持つ domain を親 domain として、第 2 引数に指 定された domain 修飾子を持つ domain を定義するマクロである。3.5.3.2(4)(B)で解 説するマクロ「qmail̲daemon̲domain」が、プログラム qmail‑start から起動される プログラム qmail‑lspawn、qmail‑send、splogger、qmail‑rspawn、および qmail‑clean の domain を定義するために用いられるのに対して、本マクロはこれら以外のプログ ラムの domain を定義するために用いられる。
リスト 3‑188 マクロ「qmaild̲sub̲domain」
define(̀qmaild̲sub̲domain', ̀
① daemon̲sub̲domain($1, $2, ̀$3')
② allow $2̲t etc̲qmail̲t:dir { getattr search };
③ allow $2̲t etc̲qmail̲t:{ lnk̲file file } { getattr read };
④ allow $2̲t var̲spool̲t:dir search;
⑤ allow $2̲t var̲t:dir search;
')
①で利用されているマクロ「daemon̲sub̲domain」は、第 1 引数で指定される domain 修飾子を持つ domain に対して、第 2 引数で指定される domain 修飾子を持つ domain の実行ファイルの実行権限を与え、同ファイル実行時に起動されるプロセスに対し て、第 2 引数で指定された domain 修飾子を持つ domain をアタッチする domain 遷移 ルールを定義するマクロである。より具体的に説明すれば、このマクロにて domain
「$2̲t」とその domain をアタッチするプログラムの実行ファイルにアタッチするた めの type「$2̲exec̲t」が定義され、domain「$1̲t」が type「$2̲exec̲t」のアタッ チされたファイルを実行した際に起動するプロセスに対して domain「$2̲t」をア タッチする domain 遷移ルールが定義される。
②〜④では、①で定義された domain に対して、qmail 固有の type がアタッチさ れたディレクトリやファイルといったオブジェクトに対する読み取り権限を与えて いる。
マクロ「qmaild̲sub̲domain」により固有な domain を定義されているプログラム の中には、ディレクトリ/var 下の情報を取得しようとするものが存在する。これら のプログラムを考慮し、⑤に示すセキュリティポリシー定義が必要となる。
Ⅱ‑144 Copyright © 2003 IPA, All Rights Reserved.
(B) qmail̲daemon̲domain
リスト 3‑189 に示すマクロ「qmail̲daemon̲domain」は qmail の構成プログラム である qmail‑start から起動されるプログラムの domain を定義するマクロである。
リスト 3‑189 マクロ「qmail̲daemon̲domain」
define(̀qmail̲daemon̲domain', ̀
① qmaild̲sub̲domain(qmail̲start̲t, qmail̲$1, ̀$2')
allow qmail̲$1̲t qmail̲start̲t:fifo̲file { read write };
allow qmail̲start̲t qmail̲$1̲exec̲t:file read;
')dnl
マクロ「qmaild̲sub̲domain」を利用することで、domain「qmail̲start̲t」のア タッチされたプロセス、つまり qmail̲start プロセスを親プロセスとする子プロセ スにアタッチする domain が定義される(①)。
(5) セキュリティポリシー定義
ここでは、ファイル domains/program/qmail.te にて定義されるセキュリティポリ シー定義に関して解説する。
(A) domain の定義
qmail は役割分担された数多くのプログラムより構成されている。従って、各プ ログラムのプロセスにアタッチするための domain も数多く定義されている。これら の domain の多くは 3.5.3.2(4)で解説したマクロ「qmaild̲sub̲domain」あるいは
「qmail̲daemon̲domain」によって定義される。
プログラム qmail‑start
プログラム qmail‑start にアタッチする domain はリスト 3‑190 に示す箇所にて 定義される。