前回までに試したように、SELinuxによってアクセスが拒否されて初めてSELinuxが役に立っていると分かるケースが大半です。そこで、今回から、アクセス拒否が起こる前に、SELinuxの効果を知る方法を紹介していきます。

 SELinuxが何をやっているのか知るためには、セキュリティポリシーがどうなっているのかを分析する必要があります。今回は、分析の前提知識として、セキュリティポリシーの構成要素を解説します。

 第2回で説明したように、SELinuxの最も主要な機能はTEとMCSです。MCSについては、大ざっぱには、「ドメインはカテゴリーが一致するタイプにアクセス許可」という設定だけなので、特に設定を分析する必要はありませんし、コンテナーや仮想マシンの分離に使われているのみです。

 残りのSELinuxの働きは、TEです。SELinuxを理解するには、どのようにTEがセキュリティポリシーに設定されているのかを理解する必要があります。

 TEでは、セキュリティポリシーに次のような三つの設定が施されています。(1)プロセスに「ドメイン」を付与、(2)リソースに「タイプ」を付与します。そして、セキュリティポリシーで明示的に許可されたアクセス以外はすべて拒否されるため、(3)ドメインがタイプにどのようなアクセスを許すのか、を設定していきます。

 以下、これら三つの設定要素について、順を追って説明していきます。

(1)ドメインを付与する

 SELinuxで、プロセスにドメインを割り当てるために使っているのが「ドメイン遷移」という設定です。SELinuxのデフォルトでは、プロセスを新たに実行した場合、親プロセスのドメインをそのまま引き継ぎますが、ドメイン遷移設定をした場合、新たにドメインを割り当てることができます。次のような設定要素で、ドメイン遷移を設定します。

type_transition <親プロセスのドメイン> <実行ファイルのタイプ> : process <起動時に割り当てるドメイン>;

 システムブート後から、ドメイン遷移を繰り返すことで、各プロセスにドメインが割り当てられていきます。例えば、httpdデーモンにhttpd_tが割り当てられるまでには、図1のような手順を経ます。

図1●httpdデーモンにhttpd_tドメインを割り当てる仕組み
図1●httpdデーモンにhttpd_tドメインを割り当てる仕組み
[画像のクリックで拡大表示]

 システムブート時、カーネルのプロセスにはデフォルトでkernel_tというドメインが割り当てられています。カーネルがsystemdを実行すると(実行ファイルのタイプはinit_exec_t)、(1)に従いsystemdにはinit_tドメインが割り当てられます。次に、systemdがhttpdを実行すると(実行ファイルのタイプはhttpd_exec_t)、(2)の設定に従って、httpdにはhttpd_tドメインが割り当てられます。このようなドメイン遷移を繰り返すことで、システム上の各プロセスにドメインが割り当てられていきます。