• 検索結果がありません。

13   COMMERCIAL IP SECURITY OPTION

3.4.  セキュリティポリシーのファイル構成

3.4.1.  セキュリティポリシー定義ファイル

3.4.1.3.  TE の定義

このセクションでは、TE に関連するセキュリティポリシー定義を解説する。 

(1) domain と type の定義 

TE では、サブジェクトにアタッチされている domain とオブジェクトにアタッチさ れている type を基準にアクセス制御が行われる。そこでまずは、アタッチする type と domain を定義しなければならない。書式をリスト 3‑39 に示す。 

リスト 3‑39 domain および type の定義書式 

 

‘type’ type̲name opt̲alias̲def opt̲attr̲list ‘;’ 

 

type̲name ::= identifier 

opt̲alias̲def ::= ‘alias’ aliases │ empty  aliases ::= identifier │ ‘{‘ identifier̲list ‘}’ 

opt̲attr̲list ::= ‘,’ attr̲list │ empty 

attr̲list ::= identifier │ attr̲list ‘,’ identifier   

このように定義することで、「type̲name」で示される名称の type を定義することが で き る 。 ま た こ の 際 、「 opt̲alias̲def 」 で 示 さ れ る 別 名 を 付 与 す る こ と や 、

「opt̲attr̲list」で示される属性を付与することが可能である。属性に関しては 3.4.1.2 を参照してほしい。 

SELinux ではサブジェクトにアタッチする type を domain と呼んでいるが、実装レ ベルではこの domain と type を区別して扱っているわけではなく、domain は「サブジェ クトにアタッチされた場合に必要となる各種アクセス権限を有した type」という扱い に過ぎない。プロセスやユーザにアタッチされる domain には、ファイル等のオブジェ クトにアタッチされる type と比較して余計な幾つかのアクセス権限が必要となるこ とは想像に難しくないだろう。domain として必要となるアクセス権限は属性「domain」

として定義されており、domain を定義する場合には上記書式にて属性「domain」を付 与する形で定義すればよいのである。 

type には、特定の domain と関連のある type、つまり特定のプロセスによってのみ アクセスされるファイル等のオブジェクトにアタッチする type と、特定の domain と は関連のない type、つまり様々なサブジェクトによってアクセスされ得るオブジェク トにアタッチする type の 2 通りが存在し、これらは定義場所が異なっているので注意 が必要である。 

 

Ⅱ‑40  Copyright © 2003 IPA, All Rights Reserved.

 

 

Note:「ユーザ domain を追加する場合は」 

ユーザ domain を追加する場合には、通常マクロ「user̲domain」20あるいは「admin̲domain」21を利用する。

マクロ「user̲domain」は一般ユーザ用の domain を、マクロ「admin̲domain」は管理者ユーザ用の domain を 定義するマクロである。ユーザ domain を新たに定義する場合、login プログラムが shell プログラムを実行 した際に開始される shell プロセスに対して同ユーザ domain をアタッチするための domain 遷移ルールや、

この domain 遷移を許可するために、login プログラムにアタッチされる role である「system̲r」に対して 同ユーザ domain を割り当てる必要がある(3.4.1.4(1)を参照)。上記のマクロでは、ユーザ domain として不 可欠なこれらのセキュリティポリシーを一括して定義してくれる。 

 

 

関連ファイル 

 

domains/下の*.te ファイル  特定の domain と関連付けられる type の定義  types/*.te  特定の domain と関連付けられない type の定義  macros/下の*.te ファイル  マクロの中で定義されている場合もある 

 

(2) domain 遷移ルールおよび type 遷移ルールの定義 

3.4.1.3(1)では domain と type の定義方法を説明した。しかし、これはあくまで定 義に過ぎない。定義した domain と type は各々、サブジェクトとオブジェクトにアタッ チしなければならない。これを定義するのが domain 遷移ルールと type 遷移ルールで ある。 

domain 遷移ルールは新たに開始されるプロセスに対してアタッチする domain を定 義するものである。Linux ではその起動時にシステムによって「init プロセス」と呼 ばれるプロセスが開始される。この init プロセスはシステムで最もはじめに開始され るプロセスで、その後システム上で開始されるあらゆるプロセスの先祖となるプロセ スである。つまり、システム上で開始されるプロセスにはすべて親プロセスが存在す ることを意味している22。domain 遷移ルールではこの起動元プロセス(親プロセス)

にアタッチされている domain と起動されるプロセスの実行ファイルにアタッチされ ている type を基準として、新たに開始されるプロセスにアタッチする domain を指定 する。 

type 遷移ルールは新たに作成されるオブジェクトに対してアタッチする type を定 義するものである。この type 遷移ルールは実態のない抽象的なオブジェクトや、実態 のあるオブジェクトであっても常に存在するとは限らないオブジェクトに対して type をアタッチするためのものである。たとえば、プログラムが稼動時に一時的に作成す        

20 マクロファイル macros/user̲macros.te にて定義されている。 

21 マクロファイル macros/admin̲macros.te にて定義されている。 

22 init プロセスは唯一親プロセスの存在しない特別なプロセスである。 

るテンポラリファイルを考えてみる。ファイルというオブジェクトはファイルシステ ム上で実態のある存在ではあるが、テンポラリファイルの場合、常にファイルシステ ム上に存在しているとは限らないため、あらかじめ type をアタッチしておくことがで きない23。このようなオブジェクトの場合、そのオブジェクトの作成元であるサブジェ クトにアタッチされている domain やその他の関連のあるオブジェクトにアタッチさ れている type を基準として、新たに作成されるオブジェクトに対してアタッチする type を定義しなければならない。 

書式をリスト 3‑40 に示す。 

リスト 3‑40 domain 遷移ルールおよび type 遷移ルールでの定義書式 

 

‘type̲transition’ source̲types target̲types ‘:’ classes new̲type ‘;’ 

 

source̲types ::= set  target̲types ::= set  classes ::= set 

new̲type ::= identifier   

この書式の意味は以下のとおりである。 

       

23 ファイルシステム上に常に存在しているファイルに関しては、あらかじめ type をアタッチしておくこと

 

Ⅱ‑42  Copyright © 2003 IPA, All Rights Reserved.

   

「source̲types」で示される domain がアタッチされているサブジェクトが、

「target̲types」で示される type のアタッチされた、「classes」で示されるサブ ジェクトあるいはオブジェクトを生成した場合、生成されるサブジェクトあるいは オブジェクトに対して「new̲type」で示される domain あるいは type をアタッチす る。 

 

‑ 補足 ‑ 

domain 遷移ルールの場合、「source̲types」には起動元プロセスにアタッチされている domain を、

「target̲types」には新たに開始するプログラムの実行ファイルにアタッチされている type を、

「classes」にはプロセスを示す class である”process”を指定する。 

 

type 遷移ルールの場合、「source̲types」には作成元プロセスにアタッチされている domain を、

「target̲types」には新たに作成されるオブジェクトに関連のあるオブジェクトにアタッチされ ている type を、「classes」にはその関連オブジェクトの種類を示す class を指定する。 

 

上記に示した type̲transition 宣言は domain あるいは type の遷移を許可するだけ であり、実際に遷移を実現するために必要となる幾つかのアクセス権限は与えられな いため、この宣言に加えてそれらのアクセス権限を与えるセキュリティポリシー定義 が必要となることに注意しなければならない。これらのアクセス権限は多岐にわたる ため、遷移ルールを定義するためのマクロ24が用意されており、通常はこのマクロを使 用するべきである。 

domain 遷移ルールを定義しない場合、新たに開始されるプロセスには開始元である 親プロセスの domain が引き継がれてアタッチされる。同様に、type 遷移ルールを定 義しない場合、新たに作成されるオブジェクトには同オブジェクトと関連を持つオブ ジェクトの type が引き継がれてアタッチされる。 

なお、domain 遷移ルールは RBAC により更に制限を受ける。domain 遷移ルールと role との関係は 3.4.1.4(1)にて解説する。 

       

24 domain 遷移ルールを定義するためのマクロ「domain̲auto̲trans」、ファイルにアタッチする type を定 義するためのマクロ「file̲type̲auto̲trans」等が定義されている。 

 

関連ファイル 

 

domains/下の*.te ファイル  domain と type の遷移は必ず domain がその発端となる ものである。従って、通常は domain が定義される場所 で定義される。 

macros/下の*.te ファイル  マクロの中で定義されている場合もある   

(3) type 変更ルールの定義 

3.4.1.3(2)で解説した type 遷移ルールは新たに作成されるオブジェクトに対して アタッチする type を定義するものである。これに対して、既に何らかの type がアタッ チされているオブジェクトの type を変更することを許可するのがこの type 変更ルー ルである。書式をリスト 3‑41 に示す。 

リスト 3‑41 type 変更ルールの定義書式 

 

‘type̲change’ source̲types target̲types ‘:’ classes new̲type ‘;’ 

 

source̲types ::= set  target̲types ::= set  classes ::= set 

new̲type ::= identifier   

この書式の意味は以下のとおりである。 

   

ド メ イ ン 「 source̲types 」 が ア タ ッ チ さ れ て い る サ ブ ジ ェ ク ト が 、 タ イ プ

「target̲types」のアタッチされている、「classes」で示されるオブジェクトの type を「new̲type」で示される type に変更することを許可する。 

 

この type 変更ルール定義は type の変更を許可するだけである点に注意が必要であ る。3.4.1.3(2)にて解説した type 遷移ルールは必要なアクセス権限を定義してやるこ とで、定義された遷移ルールはカーネルによって適宜執行される。しかし、この type 変更ルールを執行するのはカーネルではなくプログラムである。SELinux ではセキュ リティコンテキストを変更するための独自のシステムコールが実装されており、この システムコールを利用するアプリケーションに対して、その type 変更を許可するのが この type 変更ルール定義である。つまり、この定義ルールは SELinux 向けに改良され