第3章 SELinux コンテキスト
プロセスとファイルは、SELinux ユーザーやロール、タイプ、レベル (オプション) などの追加情報を含む SELinux コンテキストでラベル付けされています。SELinux 実行中は、これらすべての情報を使ってアクセス制御が決定されます。Red Hat Enterprise Linux では、SELinux はRBAC (ロールベースアクセス制御) と TE (Type Enforcement)、さらにオプションで MLS (複数レベルのセキュリティー) の組み合わせを提供します。
以下は、SELinux コンテキストの例です。SELinux コンテキストは、SELinux を実行する Linux オペレーティングシステム上のプロセスや Linux ユーザー、ファイルに使用されます。ファイルおよびディレクトリーの SELinux コンテキストを表示するには、
ls -Z コマンドを使用します。
ls -Z file1
~]$ 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 ユーザーアカウント間のマッピング一覧を表示するには、Linux root ユーザーで
semanage login -lコマンドを実行します (policycoreutils-python パッケージのインストールが必要になります)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムによっては、出力が多少違う場合があります。Login Nameコラムは Linux ユーザーを一覧表示し、SELinux Userコラムは Linux ユーザーがマッピングされている SELinux ユーザーを一覧表示します。プロセスでは、SELinux ユーザーはアクセス可能なロールとレベルを制限します。最後のコラムであるMLS/MCS Rangeは、MLS (複数レベルセキュリティー) と MCS (複数カテゴリセキュリティー) が使用するレベルです。 - role
- SELinux の一部は RBAC (ロールベースアクセス制御) であり、ロールは RBAC の属性です。SELinux ユーザーはロールに対する権限を有しており、ロールはドメインに対する権限を持っています。ロールは、ドメインと SELinux ユーザーの媒介として機能します。入力可能なロールは、入力可能なドメインを決定し、最終的には、これがどのオブジェクトタイプがアクセス可能かを制御します。これが、権限のあるエスカレーション攻撃における脆弱性の低減に役立ちます。
- type
- タイプは、Type Enforcement の属性です。タイプはプロセスのドメインを定義し、ファイルのタイプを定義します。SELinux ポリシールールは、ドメインがタイプにアクセスする場合でも、ドメインが別のドメインにアクセスする場合でも、タイプ同士がアクセスする方法を定義します。アクセスは、アクセスを許可する特定の SELinux ポリシールールが存在する場合にのみ、許可されます。
- level
- レベルは、MLS および MCS の属性です。MLS 範囲は、レベルが異なる場合は lowlevel-highlevel、レベルが同一の場合は lowlevel と書かれる、一対のレベルです (
s0-s0はs0と同じものです)。各レベルは、秘密度-カテゴリのペアで、カテゴリはオプションです。カテゴリがある場合、レベルは秘密度:カテゴリのセット と書かれます。カテゴリがない場合は、秘密度 と書かれます。カテゴリセットは連続したもので、短縮が可能です。例えば、c0.c3はc0,c1,c2,c3と同じことです。/etc/selinux/targeted/setrans.confファイルは、レベル (s0:c0) をヒューマンリーダブルな形式にマッピングしています (すなわち、CompanyConfidential)。setrans.confはテキストエディターで編集せず、semanageコマンドを使って変更してください。詳細については、 semanage(8) man ページを参照してください。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 ではサポートなし)。しかし、upstream SELinux Reference Policy からの MLS ポリシーは構築が可能で、これにはすべてのプログラムドメインが含まれます。MLS 設定の詳細については、「マルチレベルのセキュリティー (MLS)」 を参照してください。
3.1. ドメイン移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
あるドメインのプロセスは、移行先のドメインの
entrypoint タイプがあるアプリケーションを実行することで、別のドメインに移行できます。entrypoint パーミッションは SELinux ポリシーで使用され、ドメインに入るためにどのアプリケーションを使用するかを制御します。以下にドメイン移行の例を示します。
- ユーザーはパスワードの変更を希望しています。これを行うには、
passwdアプリケーションを実行します。/usr/bin/passwd実行可能ファイルは、passwd_exec_tタイプでラベル付けされています。ls -Z /usr/bin/passwd
~]$ ls -Z /usr/bin/passwd -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwdCopy to Clipboard Copied! Toggle word wrap Toggle overflow passwd アプリケーションは、shadow_tタイプのラベルが付けられている/etc/shadowファイルにアクセスします。ls -Z /etc/shadow
~]$ ls -Z /etc/shadow -r--------. root root system_u:object_r:shadow_t:s0 /etc/shadowCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 アプリケーションがだまされて任意のファイルを読み取り/書き込みすることを防ぎます。