実践Linux
SELinux SELinux 目次へ TOP(HOME)へ
SELinux リファレンス・ポリシーで新しいドメインを作成する 2012年4月
新たなドメインを付与するには,リファレンス・ポリシーのマクロを使う。この方法を使えば、わりと簡単にポリシーの追加がカバーできるようだ。
ここでは、自作アプリケーションへのドメインの付与を想定してみる。
モジュール・パッケージの作成
ドメインを付与するサンプル・アプリケーションを/develop/selinux-domain-test/myappliとする。
ここでは「myappli_t」という名前のドメインを付与し、「myappli」という名前のモジュール・パッケージを作成してみる。また「新しいタイプの付与」同様、作業ディレクトリを「/root/selinux」とする。
さらに、このアプリは、/var/lib/myappli/data以下に読み書きアクセスするものとし、このアクセスにも保護をかけてみる。
(1)teファイルの作成
myappliというモジュール・パッケージを作成するため、「myappli.te」という名前のteファイルを作成する。
設定すべき項目は定型化されており、次のような構成になる(マクロを使うため、モジュールの命名にはリファレンス・ポリシーの書式を用いる。ゴシック部分が新しいドメイン導入の要点)。
myappli.teファイル
policy_module(myappli, 1.0) ポリシー・モジュールの命名
type myappli_exec_t; 実行ファイルに「testapp_exec_t」というタイプを付与するための宣言
files_type(myappli_exec_t)
type myappli_wr_t; 読み書き用ファイルに「myappli_wr_t」というタイプを付与するための宣言
files_type(myappli_wr_t)
type myappli_t; ドメインを宣言
domain_type(myappli_t) ※
domain_entry_file(myappli_t, myappli_exec_t) ※
unconfined_domtrans_to(myappli_t, myappli_exec_t) ※
allow myappli_t myappli_wr_t:dir create_dir_perms;
allow myappli_t myappli_wr_t:file create_file_perms;
最後の2行は、パーミッション・マクロを使用してmyappli_tドメインが「myappli_wr_t」というタイプにアクセスできるように設定している。
ここで記述がない場合でも(書き方がわからない等、とりあえず書かなくても)、後のaudit2allowコマンドで同等のものが要求されるはず(マクロのような簡潔な記述にはならないが)。
※の3行がリファレンス・ポリシーのマクロで、プロセスにドメインを付与する設定やドメインに必要最小限の権限を与えている。これはどのようなアプリケーションに対するドメインかによって変わってくるが、基本は次の表を参照。今回はコマンドライン・アプリケーションなので、3つめのマクロ群を適用する。これによりコマンドライン・アプリケーションとして動作するための必要最小限の設定が行われる。
アプリケーションの種別 | 適用するマクロ |
システム起動スクリプトの中で使われるコマンド | init_system_domain(ドメイン, 実行ファイルのタイプ) |
デーモン・プログラム | init_daemon_domain(ドメイン, 実行ファイルのタイプ) |
コマンドライン・アプリケーション | domain_type(ドメイン) domain_entry_file(ドメイン, 実行ファイルのタイプ) unconfined_domtrans_to(ドメイン, 実行ファイルのタイプ) |
(2)fcファイルの設定
fcファイルには、実行ファイルに「myappli_exec_t」というタイプを付与し、読み書き用の/var/lib/myappli/data以下には「myappli_wr_t」というタイプを付与、myappli_tドメインだけがこのタイプにアクセスできるようにしておく(実際のアクセス許可はteファイルのallow文となるが)。
myappli.fcというファイルに、次のように記述する。
/develop/selinux-domain-test/myappli gen_context (system_u:object_r:myappli_exec_t,s0)
/var/lib/myappli/data(/.*)? gen_context(system_u:object_r:myappli_wr_t,s0)
(3)設定の反映
fcのタイプ付け設定を反映するrestoreconコマンドを忘れないようにする。
# make
# semodule -i myappli.pp
# restorecon -F /develop/selinux-domain-test/myappli
# restorecon -RF /var/lib/myappli/data
(4)ドメインの確認
設定を反映したらアプリケーションを動作させて、ドメインが正しく付与されているかを確かめる。この確認操作は、Enforcingモードでは権限が足りずにアプリケーションの起動が失敗する場合が多いため、permissiveモードで行う。
# setenforce 0
# /develop/selinux-domain-test/myappli
ドメインを確認するには,別の端末を開き、ps -eZコマンドで確認する。
# ps -eZ | grep myappli
(5)足りない設定を追加する
permissiveモードで動作テストを行い、
# audit2allow -a -l -r
で必要な設定を生成してmyappli.teファイルに追加していく。
再度、
# make
# semodule -i myappli.pp
以上を成功するまで繰り返していく。
SELinux目次
TOP(HOME)へ