TE は、プロセスに最小限の権限を与える機能です。SELinux では、プロセスに対して「ドメイン」、リソースに対して「タイプ」というラベルを付与します。リソースには、ファイル、ディレクトリ、デバイスファイル等、様々な種類が存在します。そして、各ドメイン(プロセス)がアクセス可能なタイプ(ファイルやディレクトリ)をひとつひとつポリシーファイルと呼ばれる設定ファイルに定義していきます。つまり、ドメインは、ポリシーファイルで許可されていないタイプにアクセスすることはできません。
例えば、Apache Web サーバーの httpd プロセスには、httpd_t というドメイン名が付与されます。SELinux では、ps コマンドに -Z オプションを指定することにより、プロセスに付与されたドメイン名を確認することができます。
# ps -eZ | grep httpd 2263 root:system_r:httpd_t /usr/sbin/httpd 2266 root:system_r:httpd_t /usr/sbin/httpd 2267 root:system_r:httpd_t /usr/sbin/httpd 2269 root:system_r:httpd_t /usr/sbin/httpd 2271 root:system_r:httpd_t /usr/sbin/httpd 2273 root:system_r:httpd_t /usr/sbin/httpd 2274 root:system_r:httpd_t /usr/sbin/httpd |
この出力から /usr/sbin/httpd がどのような権限で動作しているのかを確認できます。SELinux 上のすべてのプロセスは、「ユーザー:ロール:ドメイン」で構成されています。これは、プロセスのコンテキストと呼ばれます。この例では、root ユーザーが system_r というロールで httpd を起動しています。また、httpd には、httpd_t というドメイン名が付与されています。ロールについては、以降の RBAC(Role Based Access Control)で解説します。
httpd プロセスのドメイン httpd_t には、httpd_sys_contents_t というタイプへの read 権限や httpd_sys_script_exec_t というタイプへの read、execute 権限がポリシーファイルで許可されています。SELinux では、ls コマンドに -Z オプションを指定することにより、各リソースに付与されたタイプを確認することができます。Apache Web サーバーのリソースが配置されている /var/www ディレクトリ以下のタイプを確認してみます。
# ls -Z /var/www drwxr-xr-x root root system_u:object_r:httpd_sys_content_t analog-cgi-bin/ drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t manual/ |
この出力から各リソース(ディレクトリやファイル)にどのようなタイプが付与されているのかを確認できます。SELinux上のすべてのリソースは、「ユーザー:ロール:タイプ」というコンテキストで構成されています。この例では、Apache Web サーバーが参照するディレクトリに httpd_sys_content_t や httpd_sys_script_exec_t というタイプが付与されていることがわかります。system_u と object_r は、デフォルトで付与されるダミーのユーザー名とロールです。
RBAC は、ユーザーのプロセスに最小限の権限を与える機能です。TE はプロセスに対してドメイン名を付与し、アクセス可能なタイプを制限できますが、ユーザーのアクセス制御はできません。ユーザーがどのドメインを利用できるかを定義するためのメカニズムが RBAC です。RBAC では、ユーザーに「ロール」と呼ばれるラベルを付与します。各ロールには、利用可能なドメインが定義されます。これにより、ユーザーのアクセス制御が行われます。Turbolinux 10 Server では、デフォルトで以下 3 種類のロールをログインユーザーのために、あらかじめ用意しています。