第3回 基本操作とポリシーファイルの設定SELinuxで強化するソリューション(3/3 ページ)

» 2005年03月25日 17時47分 公開
[佐々木 生弥(サイボウズ),ITmedia]
前のページへ 1|2|3       

 以下は、Webブラウザからcgiを動作させた際、アクセス拒否されたログだ(可読性を高めるために重要な部分を赤字で強調している)。このうちログAは、「cgiプログラムがdataディレクトリへの書き込み(write)を拒否(denied)されたことを表す。また、ログBは、「cgiプログラムがdataディレクトリ以下のファイルへのロック(lock)を拒否(denied)されたことを表している。

ログA
Mar 1 22:37:16 localhost kernel: audit(1110202636.049:0): avc: denied { write } for pid=13639 exe=/var/www/cgi-bin/****/**.cgi name=data dev=hda3 ino=3296361 scontext=root:system_r:httpd_t tcontext=user_u:object_r:httpd_sys_script_exec_t tclass=dir

ログB
Mar 1 22:37:16 localhost kernel: audit(1110202636.050:0): avc: denied { lock } for pid=13639 exe=/var/www/cgi-bin/****/**.cgi path=/var/www/cgi-bin/****/***/data/******.*** dev=hda3 ino=3297996 scontext=root:system_r:httpd_t tcontext=root:object_r:httpd_sys_script_exec_t tclass=file

 これらのログの内容をもとに、allow文を使用してアクセス許可の設定を追加してみよう。allow文の書式は次のとおりだ。

allow文の書式
allow ドメイン タイプ:オブジェクトクラス { アクセスベクタ };

 ログAおよびログBの内容を、allow文の書式に変換するとそれぞれ次のようになる。

allow httpd_t httpd_sys_script_exec_t:dir { write };
allow httpd_t httpd_sys_script_exec_t:file { lock };

 allow文による設定の追加は、domains/program/以下の該当するアプリケーションの設定ファイル(「.te」ファイル)に追記する。例えば、apacheに関する設定の追加であればapache.teに追記する。今回は、該当するアプリケーションの設定ファイルが存在しないため、新規に「.te」ファイルを作成し、上記allow文の内容を追記する。

設定を自動化するaudit2allowコマンド

 アクセス拒否された内容をすべて手動で設定していく作業は、大変手間が掛かる。そのため、SELinuxにはログに出力されたアクセス拒否の内容を、自動的にallow文に変換してくれる便利なコマンドが用意されている。以下は、audit2allowコマンドを使用して、上記のallow文の内容を自動で出力している。ほかのログの内容から、write、lock以外のアクセスベクタも表示されている。

audit2allow -d -l
                :
                :
allow httpd_t httpd_sys_script_exec_t:dir { add_name create remove_name write };
allow httpd_t httpd_sys_script_exec_t:file { create lock setattr unlink write };
                :
                :

 コマンドオプションとして指定している「-d」、「-l」はそれぞれ、dmesgの内容を出力、設定反映後のログのみを読み込むためのオプションである。

 あとは、audit2allowコマンドが自動で出力したallow文を、「.te」ファイルにコピー&ペーストすればよい。このコマンドを使うことでログの内容をallow文に手動で変換する手間を大幅に軽減できる。

設定の反映

 allow文を設定ファイルに追加しただけでは設定は反映されない。設定を反映するには、make reloadコマンドを/etc/selinux/strict/src/policy/以下で実行する。このコマンドは、ポリシーをバイナリー形式のファイルに変換するコマンドで、具体的には「.te」ファイルをpolicy.18ファイルに変換する。

 また、前述の例では「.te」ファイルのみを編集したため、make reloadコマンドだけで設定を反映できるが、ファイルのタイプ付けを変更(「.fc」ファイル)した場合、make reloadコマンドの実行後にfixfiles relabelコマンドも実行する必要がある。このコマンドは、「.fc」ファイルをfile_contextsファイルに変換するコマンドで、全ファイルのタイプをポリシーの内容で付与し直す。このコマンドは前にも出てきているが、これは、SELinuxを無効にするとファイルのタイプ付けが消えてしまうためである。

 fixfiles relabelコマンドは全ファイルのタイプをポリシーの内容で付与し直すため、非常に時間がかかる。このため、必要に応じて特定のディレクトリや、特定のファイルのみタイプ付けを行うコマンドを使用するといいだろう。ポリシーファイル関連のコマンドを表2にまとめたので参考にしてほしい。

表2 ポリシーファイル関連のコマンド
コマンド
用途
fixfiles relabel ファイルにタイプ付けを行う
setfiles 一部のファイルにタイプ付けを行う
chcon 1つのファイルにタイプ付けを行う
make reload

ポリシーファイルの設定を、
バイナリ(policy.18)に変換する

make relabel ファイルのタイプを付け直す
make clean makeで生成されたファイルを消去する
audit2allow ログの内容をもとに、allow文を自動生成する

 ポリシーの設定は、セキュリティレベルによって簡易設定と詳細設定の2つの方法に分けられる。今回はaudit2allowコマンドを使用した簡易設定を説明した。しかし、簡易設定は設定が容易に行える反面、ログに出力された内容を自動的にアクセス許可してしまうため、必要以上の権限を与えてしまうこともある。一方、詳細設定ではセキュリティレベルは向上するが、リソースに独自のタイプを付与する必要があり、設定が難解というデメリットもある。SELinuxを導入するサーバの重要度によって、簡易設定と詳細設定を使い分けるのも1つの方法だ。今回は簡易設定のみを解説したが、詳細設定の詳しい情報を希望される場合は、以下の書籍などが参考になるだろう。

タイトル 著者
SELinux徹底ガイド 中村 雄一
SELinuxシステム管理 著 Bill McCarty
監訳 田口 裕也、根津 研介


 次回は、実際にSELinuxを使用した環境構築方法について解説する。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ