SELinuxで組み込み機器のセキュリティを高める(前編) ―― SELinuxの概要
● 汎用セキュリティ・ポリシrefpolicy
実際にセキュリティ・ポリシの設定を行う際は,ファイルやポートへのタイプ付与設定を行った後,ドメインがどんなタイプにアクセスできるかを設定していきます.ドメインは,デフォルトでは何もアクセス権限を持たないので,必要なアクセスを一つ一つ許可してやる必要があります.一般的に,アクセス許可設定の数は膨大になり,多いときには数十万にもなります.アクセス許可設定の数が膨大になるため,そのまま一から設定を行うのは大変です.
そこでSELinuxでは,refpolicy(Reference Policyの略.配布URL:http://oss.tresys.com/projects/refpolicy/)という,SELinuxの開発元が開発した汎用のセキュリティ・ポリシが用意されています.パソコンにSELinuxを適用する場合,refpolicyを自分の環境に合わせてカスタマイズすることが普通です.
しかし,refpolicyはFedoraやRed Hat Linuxなど,サーバ用途のディストリビューションを想定して作られており,多くの場合,組み込み向けの環境には不適当です.さらに,refpolicyのファイル・サイズは,そのままだとMバイト級のファイル・サイズとなり,相当のチューニングが必要になってきます.refpolicyでは,数千種類のマクロが定義され,そのマクロを駆使して設定が行われているので,チューニングを行うだけでも大変な作業です.
● SELinux Policy Editorによる設定
このように,組み込み向けとしてセキュリティ・ポリシ設定にrefpolicyを利用するのは得策ではありません.そうなると,自分で一からポリシを記述することになります.そのまま一から記述するのは大変ですが,「SELinux Policy Editor(SEEdit)」というツールを使うと,比較的簡単にセキュリティ・ポリシを記述できます.SEEditは,もともとは日立ソフトウェアエンジニアリングによって開発されたツールですが,現在は,オープン・ソース(ライセンスはGPL)になっており,sourceforgeのWebサイトで公開されています.
SELinux Policy Editorの仕組みは,図6のようになります.最大の特徴が単純な設定書式「SPDL(Simplified Policy Description Language)」です.通常のセキュリティ・ポリシ設定書式では,ファイルやポートへのアクセス制御のために,タイプを付与し,タイプを指定してアクセス許可設定を行う必要がありました.しかしSPDLでは,タイプを隠ぺいし,ファイル名やポート番号を指定して設定できるようになっています.変換プログラムがSPDLを通常の設定書式に変換し,設定が反映されるようになっています.SPDLを覚えなくても設定できるように,設定生成ツールなどの設定補助プログラムも同梱されています.
図6 SELinux Policy Editorの仕組み
中核要素であるSPDLを,もう少し詳しく見てみましょう.図7の(1)が,Webサーバに対するアクセス制御設定をSPDLで記述したものです.httpd_tドメインを/usr/sbin/httpdに付与すると設定し,「httpd_tドメインは/var/wwwに読み込み(s,r),80番ポートの接続待ち受けができる」と設定しています.ここでは,タイプは使われていません.(2)の変換プログラムが,SPDLから通常の設定に変換します.この際,ファイル名やポート番号からタイプが自動生成されます.(3)が生成された通常設定書式で記述されたポリシです.アクセス許可設定,ラベル付与設定などが生成されています.SELinuxのカーネルには,この設定が読み込まれます.
図7 SELinux Policy Editorの設定書式SPDLでWebサーバを設定