第2章 SELinux コンテキスト
プロセスとファイルには、SELinux ユーザー、ロール、タイプ、オプションでレベルなどの追加情報が含まれる SELinux コンテキストでラベルが付けられます。SELinux の実行時には、すべての情報はアクセス制御の決定に使用されます。Red Hat Enterprise Linux では、SELinux はロールベースアクセス制御 (RBAC)、Type Enforcement(TE)、およびオプションで Multi-Level Security(MLS) の組み合わせを提供します。
以下は、SELinux コンテキストを示しています。SELinux コンテキストは、SELinux を実行する Linux オペレーティングシステムの、プロセス、Linux ユーザー、およびファイルで使用されます。以下のコマンドを使用して、ファイルおよびディレクトリーの SELinux コンテキストを表示します。
~]$
ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
SELinux コンテキストは、SELinux user:role:type:level 構文に従います。各フィールドは、以下のとおりです。
- SELinux ユーザー
- SELinux ユーザー ID は、特定のロールセットと特定の MLS/MCS 範囲に対して承認されるポリシーに既知の ID です。各 Linux ユーザーは、SELinux ポリシーを使用して SELinux ユーザーにマッピングされます。これにより、Linux ユーザーは SELinux ユーザーの制限を継承できます。マップされた SELinux ユーザー ID は、開始できるロールとレベルを定義するために、そのセッションのプロセスに対して SELinux コンテキストで使用されます。root で以下のコマンドを入力して、SELinux と Linux ユーザーアカウントのマッピングの一覧を表示します (policycoreutils-pythonパッケージがインストールされている必要があります)。
~]#
semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * root unconfined_u s0-s0:c0.c1023 * system_u system_u s0-s0:c0.c1023 *出力は、システムごとにわずかに異なる場合がありますLogin Name
列には、Linux ユーザーが一覧表示されます。SELinux User
列には、Linux ユーザーがマッピングされている SELinux ユーザーが一覧表示されます。プロセスの場合、SELinux ユーザーはアクセス可能なロールとレベルを制限します。MLS/MCS Range
列は、MLS(Multi-Level Security) および Multi-Category Security(MCS) で使用されるレベルです。Service
列は、Linux ユーザーがシステムにログインする予定の正しい SELinux コンテキストを決定します。デフォルトでは、任意のサービスを表すアスタリスク (*
) 文字が使用されます。
- role
- SELinux の一部は、ロールベースのアクセス制御 (RBAC) セキュリティーモデルです。ロールは RBAC の属性です。SELinux ユーザーはロールに対して許可され、ロールはドメインに対して承認されます。このロールは、ドメインと SELinux ユーザーの仲介として機能します。入力可能なロールによって入力できるドメインが決まります。最終的には、アクセス可能なオブジェクトタイプを制御します。これにより、権限昇格攻撃への脆弱性が軽減されます。
- type
- タイプは、Type Enforcement の属性です。タイプは、プロセスのドメインとファイルのタイプを定義します。SELinux ポリシールールは、タイプにアクセスするドメインであるか、別のドメインにアクセスするドメインであるかにかかわらず、タイプが相互にアクセスできる方法を定義します。アクセスは、それを許可する特定の SELinux ポリシールールが存在する場合にのみ許可されます。
- level
- このレベルは MLS と MCS の属性です。MLS の範囲はレベルのペアで、レベルが異なる場合は lowlevel-highlevel と記述され、レベルが同一である場合は lowlevel と記述されます (
s0-s0
はs0
と同じ)。各レベルは機密カテゴリーのペアで、カテゴリーはオプションになります。カテゴリーがある場合、レベルは sensitivity:category-set として記述されます。カテゴリーがない場合は、sensitivity と記述されます。カテゴリーセットが連続したシリーズの場合は、省略できます。たとえば、c0.c3
はc0,c1,c2,c3
と同じです。/etc/selinux/targeted/setrans.conf
ファイルはレベル (s0:c0
) を人間が判読できる形式 (CompanyConfidential
) にマップします。Red Hat Enterprise Linux では、Targeted ポリシーが MCS を強制し、MCS では 1 つの機密レベル (s0
) があります。Red Hat Enterprise Linux の MCS は、1024 の異なるカテゴリー (c0
からc1023
まで) に対応しています。s0-s0:c0.c1023
は機密レベルs0
で、すべてのカテゴリーの権限が承認されます。MLS は Bell-La Padula Mandatory Access Model を強制し、LSPP(Labeled Security Protection Profile) 環境で使用されます。MLS の制限を使用するには、selinux-policy-mls パッケージをインストールし、MLS がデフォルトの SELinux ポリシーになるように設定します。Red Hat Enterprise Linux に同梱される MLS ポリシーは、評価された設定に含まれなかった多くのプログラムドメインを省略するため、デスクトップワークステーションの MLS は使用できません (X Window System へのサポートなし)。ただし、アップストリームの SELinux 参照ポリシー から、すべてのプログラムドメインを含む MLS ポリシーを構築することができます。MLS 設定の詳細は、「Multi-Level Security (MLS)」 を参照してください。
2.1. ドメインの移行
あるドメインのプロセスは、新規ドメインの
entrypoint
タイプを持つアプリケーションを実行することにより、別のドメインに移行します。entrypoint
パーミッションは、SELinux ポリシーで使用され、どのアプリケーションがドメインに入るために使用できるかを制御します。以下の例は、ドメイン移行を示しています。
手順2.1 ドメイン移行の例
- ユーザーがパスワードを変更したい。これを実行するには、
passwd
ユーティリティーを実行します。/usr/bin/passwd
実行可能ファイルには、passwd_exec_t
タイプのラベルが付けられます。~]$
ls -Z /usr/bin/passwd -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwdpasswd
ユーティリティーは、shadow_t
タイプのラベルが付けられた/etc/shadow
にアクセスします。~]$
ls -Z /etc/shadow -r--------. root root system_u:object_r:shadow_t:s0 /etc/shadow - SELinux ポリシールールでは、
passwd_t
ドメインで実行しているプロセスが、shadow_t
タイプのラベルが付けられたファイルに読み取りと書き込みが許可されていることを示しています。shadow_t
タイプは、パスワードの変更に必要なファイルにのみ適用されます。これには、/etc/gshadow
、/etc/shadow
、およびバックアップファイルが含まれます。 - SELinux ポリシールールは、
passwd_t
ドメインのentrypoint
パーミッションがpasswd_exec_t
タイプに設定されていることを示しています。 - ユーザーが
passwd
ユーティリティーを実行すると、ユーザーのシェルプロセスはpasswd_t
ドメインに移行します。SELinux では、デフォルトのアクションは否定することで、passwd_t
ドメインで実行しているアプリケーションがshadow_t
タイプでラベル付けされたファイルにアクセスできるようにするルールが存在するため、passwd
アプリケーションは/etc/shadow
にアクセスし、ユーザーのパスワードを更新します。
この例は網羅的なものではなく、ドメイン移行を説明する基本的な例として使用されます。
passwd_t
ドメインで実行しているサブジェクトが shadow_t
ファイルタイプでラベル付けされたオブジェクトにアクセスできるようにする実際のルールがありますが、サブジェクトが新しいドメインに移行する前に、その他の SELinux ポリシールールを満たす必要があります。この例では、Type Enforcement により以下が確保されます。
passwd_t
ドメインを入力できるのは、passwd_exec_t
タイプのラベルが付けられたアプリケーションを実行する場合のみです。これは、lib_t
タイプなどの承認された共有ライブラリーからのみ実行でき、他のアプリケーションは実行できません。passwd_t
などの承認されたドメインのみが、shadow_t
タイプのラベルが付けられたファイルに書き込みできます。他のプロセスがスーパーユーザー権限で実行されている場合でも、これらのプロセスはpasswd_t
ドメインで実行されていないため、shadow_t
タイプのラベルが付けられたファイルに書き込みできません。- 承認されたドメインのみが
passwd_t
ドメインに移行できます。たとえば、sendmail_t
ドメインで実行するsendmail
プロセスには passwd を実行する適切な理由がないため、passwd_t
ドメインに移行することはできません。 passwd_t
ドメインで実行しているプロセスは、etc_t
またはshadow_t
タイプのラベルが付けられたファイルなど、承認されたタイプに対する読み書きのみが可能です。これにより、passwd
アプリケーションが任意のファイルの読み書きを行うのを防ぎます。