第4回 ReferenceポリシーをEnforcingモードで動かそう

古田 真己
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
2006/4/18

 追加記述するモジュールの選定

 ここでTomcat5が動作しているドメインも忘れずに確認しておきましょう。

[root@localhost ~]# ps axZ | grep tomcat
root:system_r:kernel_t        7612 ?      Sl   0:53
/usr/lib/jvm/java/bin/java
-Djava.ext.dirs=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext
-Djava.endorsed.dirs=/usr/share/tomcat5/common/endorsed -classpath
/usr/lib/jvm/java/lib/tools.jar:/usr/share/tomcat5/bin/bootstrap.ja
r:/usr/share/java/commons-logging-api.jar:/usr/share/java/mx4j/mx4j.jar
-Dcatalina.base=/usr/share/tomcat5 -Dcatalina.home=/usr/share/tomcat5
-Djava.io.tmpdir=/usr/share/tomcat5/temp
org.apache.catalina.startup.Bootstrap start
root:system_r:kernel_t         8148 tty1    S+   0:00 grep tomcat
Tomcat5の動作ドメイン

 kernel_tで動いていてしまっているのが確認できました。これをtomcat_tで動かすことを目標に作業を行います。従って、まず記述する必要のあるポリシーファイルは次の3つになります。

/etc/selinux/refpolicy/src/policy/policy/modules/
service/tomcat.te     ポリシーを記述する
service/tomcat.if     ポリシーモジュールが外部のモジュールに
                公開するインターフェイス(マクロ)を記述する
service/tomcat.fc    ファイルのセキュリティコンテキストを記述する
kernel/corenetwork.te  ネットワーク設定(ポート番号など)を記述する
kernel/corenetwork.if  ネットワーク設定(ポート番号など)の
                インターフェイス(マクロ)を記述する
記述する必要のあるファイル(Tomcat5パッケージ用)

 「*.if」ファイルはReferenceポリシー特有のもので、従来のSELinuxのポリシーにはありませんでした。Referenceポリシーでは基本的な方針として、それぞれのモジュールは互いのポリシーファイル内に定義されたドメインやタイプを直接参照しないように記述する必要があります。そのため、「*.if」ファイルには外部モジュールからそのモジュールのドメインやタイプを利用するときに必要なTE(Type Enforcement)ルールやタイプルールをマクロとしてあらかじめ記述しておく必要があります。

 ひな型でみ見る大まかなモジュールの記述方法

 それでは、いよいよ実際の記述に入りましょう。と、いきたいところですが、その前に作業しやすいようにそれぞれのファイルのひな型を示します。

 まず、ポリシー記述用の「*.te」ファイルのひな型を示します。以下のひな型はとても粗いものですので、いろいろと修正が必要かもしれませんが、手早く始めるために用意しました。記述について少し説明しながら紹介します。

policy_module(tomcat,1.0.0)

type tomcat_t;
type tomcat_exec_t;

can_exec(tomcat_t,tomcat_exec_t)
tomcat.teファイルのひな型

 「*.te」ファイルでは最初にpolicy_module()を記述することになりました。また外部から参照するための機能はマクロとして後述の「*.if」ファイルに分けて記述するようになっています。

 次に、ポリシーインターフェイス用の「*.if」ファイルのひな型を示します。

## <summary>Tomcat Apache Servlet/JSP Engine.</summary>

interface(`tomcat_domtrans','
  gen_require(`
    type tomcat_t, tomcat_exec_t;
  ')

  corecmd_search_bin($1)
  domain_auto_trans($1,tomcat_exec_t,tomcat_t)
tomcat.ifファイルのひな型

 インターフェイスファイルは最初に「<summary>」から始まる説明を記述します。また「interface(」で始まるマクロを用いて外部から参照するためのインターフェイスを記述します。「interface(」で始まるテキストの中に「gen_require(」がありますが、これはインターフェイスの有効化に必要なタイプを記述するようになっています。あとは呼び出し元のドメインを「$1」として基本的な設定を2つ並べています。

 最後にファイルコンテキスト用の「*.fc」ファイルのひな型を示します。

/etc/tomcat5(/.*)?      
gen_context(system_u:object_r:tomcat_config_t,s0)
/usr/bin/.*tomcat5   --  
gen_context(system_u:object_r:tomcat_exec_t,s0)
tomcat.fcファイルのひな型

 「*.fc」ファイルはいままでとほぼ同じですが、コンテキストの記述に「gen_context(」が必要になります。またコンテキストの最後にMLSで使用するためのセキュリティレベル「(,s0)」を記述する必要があります。

 今回はここまでとしますが、次のページでは「SELinux Symposium 2006」のイベントレポートをお届けします。

3/4

Index
ReferenceポリシーをEnforcingモードで動かそう
  Page1
モジュール構造の確認
ベースモジュールの設定を変更する
  Page2
ベースモジュールの設定の作り直し
Enforcingモードでの動作確認
Page3
追加記述するモジュールの選定
ひな型でみ見る大まかなモジュールの記述方法
  Page4
SELinux Symposium 2006
SELinuxの今後の方向性


Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間