Show Table of Contents
第2章 SELinux コンテキスト
プロセスとファイルは、SELinux ユーザーやロール、タイプ、レベル (オプション) などの追加情報を含む SELinux コンテキストでラベル付けされています。SELinux 実行中は、これらすべての情報を使ってアクセス制御が決定されます。Red Hat Enterprise Linux では SELinux は、RBAC (ロールベースアクセス制御) と TE (Type Enforcement)、さらにオプションで 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 user
- SELinux user ID は、特定のロールセットおよび特定の MLS/MCS 範囲への権限があるポリシーに既知の ID です。各 Linux ユーザーは、SELinux ポリシーを使って SELinux ユーザーにマッピングされます。これにより、SELinux ユーザーに課された制限が Linux ユーザーに継承されます。マッピングされた SELinux ユーザー ID は、ユーザーが入ることができるロールやレベルを定義するためにそのセッションのプロセスにおいて SELinux コンテキストで使用されます。SELinux ユーザーアカウントと Linux ユーザーアカウント間のマッピング一覧を表示するには、root で以下のコマンドを入力します。(policycoreutils-python パッケージのインストールが必要になります)。
~]#semanage login -lLogin 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コラムでは、どの SELinux ユーザーに Linux ユーザーがマッピングされているかを一覧表示します。プロセスについてアクセス可能なロールとレベルを SELinux ユーザーが制限します。MLS/MCS Rangeコラムは、MLS (複数レベルセキュリティー) と 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 では、ターゲットポリシーは MCS を強制し、MCS にはs0という秘密度しかありません。Red Hat Enterprise Linux の MCS は、c0からc1023までの 1024 の異なるカテゴリをサポートします。s0-s0:c0.c1023の秘密度はs0で、すべてのカテゴリーに権限があります。MLS は、Bell-La Padula 必須アクセスモデルを強制し、LSPP (Labeled Security Protection Profile) 環境で使用されます。MLS の制限を使用するには、selinux-policy-mls パッケージをインストールし、MLS をデフォルトの SELinux ポリシーとするように設定します。Red Hat Enterprise Linux で出荷される MLS ポリシーは、評価済み設定の一部ではないプログラムドメインの多くを省略するので、デスクトップワークステーション上の MLS は使用できません (X Window System ではサポートなし)。しかし、アップストリームの SELinux Reference Policy からの MLS ポリシーは構築が可能で、これにはすべてのプログラムドメインが含まれます。MLS 設定の詳細については、「マルチレベルのセキュリティー (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ドメインにはpasswd_exec_tタイプへのentrypointパーミッションがあるとしています。 - ユーザーが
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アプリケーションがだまされて任意のファイルを読み取りまたは書き込みすることを防ぎます。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.