Fedora Core 5でのSELinuxの機能や使い方を,これまでSELinuxを使ったことがない人に向けて分かりやすく解説する。今回は,新版のSELinuxで刷新されたポリシー・ファイルの構造と,設定内容の確認方法を説明する。

 前回までは,ポリシー・ファイルに触らずに(ポリシーを変更せずに),SELinuxの設定を調整する方法を紹介してきた。ただし,前回までに紹介した手法では解決できないトラブルが存在する。また,ポリシー・ファイルの中身が分からなければ,既存の設定内容をきちんと把握できない。

 そこで今回は,Fedora Core 5で刷新されたポリシー・ファイルの構造と,設定内容の確認方法を解説する。

大きく変わったポリシー・ファイル

 ポリシー・ファイルの実体は,「/etc/selinux/targeted/policy/policy.20」である。これは,Linuxカーネルが処理しやすいよう,バイナリ形式のファイルである。

 Fedora Core 5以前は,「ポリシーのソース・ファイル」と呼ばれるテキスト形式のファイルからポリシー・ファイルを生成する仕組みだった。ユーザーがポリシーをカスタマイズする場合は,まずポリシーのソース・ファイルを編集した後,バイナリ形式のポリシー・ファイルに変換していた。

 Fedora Core 5では,「ポリシー・モジュール」という新機能が実装された。この機能により,ポリシーのソース・ファイルは配布されないようになった。同時に,ポリシー・ファイルの構成やポリシーの編集方法も大きく変わった。

モジュール・パッケージ単位で構成

 ポリシー・ファイルの構成を図1に示す。ポリシー・ファイルは,「モジュール・パッケージ」の集まりで構成される。モジュール・パッケージは,「バイナリ形式のポリシー*1の集まりのこと」である。新機能のポリシー・モジュールにより,モジュール・パッケージ単位で,ポリシーをインストールしたり,アンインストールしたりできる。つまり,ポリシー・ファイルをモジュール・パッケージごとに細分化して管理する仕組みが,ポリシー・モジュール機能である。

図1●ポリシー・ファイルの構成
図1●ポリシー・ファイルの構成

baseモジュール・パッケージの内容

 デフォルト(初期設定)では,「baseモジュール・パッケージ」というモジュール・パッケージがポリシー・ファイルに組み込まれている。この中には,Fedora Core 5に標準添付されるアプリケーションが動作するようなポリシーが入っている。

 SELinuxの開発者は,「リファレンス・ポリシー」というテキスト形式の書式で,ポリシーを記述する。これをバイナリ形式に変換し,baseモジュール・パッケージとしてFedora Core 5に提供する(図1の(1))。baseモジュール・パッケージに設定された内容を変更したい場合は,その元となっているリファレンス・ポリシーを編集すればよいわけだ。ただし,その編集作業には,かなりの専門知識が必要になるため,管理者は通常,baseモジュール・パッケージには触らないようにする。

ユーザー定義パッケージを追加可能

 では,baseモジュール・パッケージには入っていないポリシーを追加したい場合にはどうすればよいのだろう。

 SELinuxでは,ユーザー自身がモジュール・パッケージを追加できる。ユーザーは,足りない設定をテキスト形式で記述する(図1の(2))。これをバイナリ形式のモジュール・パッケージに変換する(同(3))。最後に,ポリシー・ファイルに組み込んで設定を反映する(同(4))。

 この方式の利点は,baseモジュール・パッケージに設定された内容を意識することなく,ポリシーを追加できることだ。ユーザーは,(2)で自分が書いたポリシーのみを気にすればよい。Fedora Core 5以前のSELinuxでは,すべての設定が記述されたポリシーのソース・ファイルに,追加のポリシーを記述する必要があった。これに比べて新しいSELinuxでは,ポリシーの追加が楽に行えるようになった。

 一方で新方式には難点もある。baseモジュール・パッケージに設定ミスがあり,設定を削除する必要に迫られた場合を考えよう。これを即座に解決するには,リファレンス・ポリシーを編集し,baseモジュール・パッケージに変換する必要がある。しかし,システム管理者がリファレンス・ポリシーを編集するのは困難である。そのため,baseモジュール・パッケージに設定ミスがあった場合には,Fedora Projectにバグ(不具合)として報告し,baseモジュール・パッケージ(selinux-policy-targeted RPMパッケージに含まれる)がアップデートされるのを待つことになる。