4.13. Multi-Level Security (MLS)
マルチレベルセキュリティーテクノロジーは、Bell-La Padula Mandatory Access Model を強制するセキュリティースキームを指します。MLS では、ユーザーとプロセスは サブジェクト と呼ばれ、ファイル、デバイス、およびシステムの他のパッシブコンポーネントは オブジェクト と呼ばれます。サブジェクトとオブジェクトの両方がセキュリティーレベルでラベル付けされ、これはサブジェクトのクリアランスとオブジェクトの分類を必要とします。各セキュリティーレベルは、sensitivity と category で設定されます。たとえば、内部リリーススケジュールは、機密扱いの内部文書カテゴリーに保管されます。
図4.1「クリアランスのレベル」 は、US 防衛コミュニティーが当初設計したクリアランス (機密情報取扱許可) レベルを示しています。上記の内部スケジュールの例に関連して、コンフィデンシャルクリアランスを取得したユーザーのみが、機密カテゴリーのドキュメントを表示できます。ただし、コンフィデンシャルクリアランスのみを有するユーザーは、より高いレベルまたはクリアランスを必要とする文書を表示することはできません。読み取りアクセスは、より低いレベルのクリアランスを有する文書に対してのみ許可され、より高いレベルのクリアランスを有する文書への書き込みアクセスは許可されます。
図4.1 クリアランスのレベル
[D]
図4.2「MLS を使用した許可されたデータフロー」 "Secret" セキュリティーレベルで実行しているサブジェクトと、セキュリティーレベルが異なるさまざまなオブジェクトとの間で許可されているデータフローをすべて表示します。簡単に言うと、Bell-LaPadula モデルでは、no read up と no write down の 2 つのプロパティーが適用されます。
図4.2 MLS を使用した許可されたデータフロー
[D]
4.13.1. MLS およびシステム権限 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
MLS アクセスルールは、常に従来のアクセス権限 (ファイル権限) と組み合わせられます。たとえば、セキュリティーレベルが Secret のユーザーが、DAC (Discretionary Access Control) を使用して他のユーザーによるファイルへのアクセスをブロックした場合、セキュリティーレベルのユーザーによるアクセスもブロックされます。SELinux ポリシールールは、DAC ルールの 後に チェックされることを覚えておくことが重要になります。より高いセキュリティークリアランスを設定しても、ファイルシステムを任意にブラウズするパーミッションは自動的には付与されません。
トップレベルの許可があるユーザーは、マルチレベルのシステムで自動的に管理者権限を取得しません。コンピューターのすべての情報にアクセスできる場合もありますが、管理者権限を設定するのとは異なります。
4.13.2. SELinux での MLS の有効化 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
注記
X Window System を実行しているシステムでは、MLS ポリシーを使用することは推奨されていません。
以下の手順に従って、システムで SELinux MLS ポリシーを有効にします。
手順4.19 SELinux MLS ポリシーの有効化
- selinux-policy-mls パッケージをインストールします。
~]# yum install selinux-policy-mls - MLS ポリシーを有効にする前に、ファイルシステムの各ファイルに、MLS ラベルで再ラベル付けする必要があります。ファイルシステムに再ラベル付けすると、制限されたドメインのアクセスが拒否される可能性があります。これにより、システムが正しく起動しなくなる可能性があります。これを防ぐには、
/etc/selinux/configファイルでSELINUX=permissiveを設定します。また、SELINUXTYPE=mlsを設定して、MLS ポリシーを有効にします。設定ファイルは以下のようになります。# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=mls - SELinux が Permissive モードで実行していることを確認します。
~]# setenforce 0~]$ getenforce Permissive - fixfiles スクリプトを使用して、
-Fオプションを含む/.autorelabelファイルを作成し、次回のシステムの再起動時にファイルに再ラベル付けされるようにします。~]# fixfiles -F onboot - システムを再起動します。次回の起動時に、MLS ポリシーに従って、すべてのファイルシステムに再ラベル付けされます。ラベルプロセスは、適切な SELinux コンテキストを使用して、すべてのファイルにラベルを付けます。
*** Warning -- SELinux mls policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ***********一番下の行にある*(アスタリスク) 文字は、ラベル付けされている 1000 ファイルを表します。上記の例では、11 の*文字が、ラベルが付けられた 11000 ファイルを表しています。すべてのファイルにラベルを付けるのにかかる時間は、システムのファイル数と、ハードディスクドライブの速度により異なります。最新のシステムでは、このプロセスに 10 分程度かかる場合があります。ラベリングプロセスが終了すると、システムが自動的に再起動します。 - Permissive モードでは SELinux ポリシーは強制されませんが、Enforcing モードで実行された場合に拒否されたであろうアクションの拒否は引き続きログに記録されます。Enforcing モードに切り替える前に、root で次のコマンドを実行して、システムの最後の起動時に SELinux がアクションを拒否しなかったことを確認します。最後のシステムの起動時に SELinux がアクションを拒否しなかった場合に、このコマンドを実行しても出力は返されません。システムの起動時に SELinux がアクセスを拒否された場合のトラブルシューティングは、11章トラブルシューティング を参照してください。
~]# grep "SELinux is preventing" /var/log/messages /var/log/messagesファイルに拒否メッセージがないか、すでに拒否を解決している場合は、/etc/selinux/configファイルにSELINUX=enforcingを設定します。# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=mls- システムを再起動し、SELinux が Enforcing モードで実行していることを確認します。
~]$ getenforce EnforcingMLS ポリシーが有効になっていることも確認します。~]# sestatus |grep mls Policy from config file: mls
4.13.3. 特定の MLS 範囲を持つユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従って、特定の MLS 範囲で新規の Linux ユーザーを作成します。
手順4.20 特定の MLS 範囲を持つユーザーの作成
- useradd コマンドを使用して新しい Linux ユーザーを追加し、その新しい Linux ユーザーを既存の SELinux ユーザー (この例では
staff_u) にマッピングします。~]# useradd -Z staff_u john - 新しく作成した Linux ユーザーにパスワードを割り当てます。
prompt~]# passwd john - root で次のコマンドを実行し、SELinux ユーザーと Linux ユーザー間のマッピングを表示します。出力は、以下のようになります。
~]# semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ user_u s0-s0 * john staff_u s0-s15:c0.c1023 * root root s0-s15:c0.c1023 * staff staff_u s0-s15:c0.c1023 * sysadm staff_u s0-s15:c0.c1023 * system_u system_u s0-s15:c0.c1023 * - ユーザー
johnに指定範囲を定義します。~]# semanage login --modify --range s2:c100 john - SELinux ユーザーと Linux ユーザー間のマッピングを再度表示します。ユーザー
johnには、指定した MLS レンジが定義されていることに注意してください。~]# semanage login -l Login Name SELinux User MLS/MCS Range Service __default__ user_u s0-s0 * john staff_u s2:c100 * root root s0-s15:c0.c1023 * staff staff_u s0-s15:c0.c1023 * sysadm staff_u s0-s15:c0.c1023 * system_u system_u s0-s15:c0.c1023 * - 必要に応じて、john のホームディレクトリーのラベルを修正するには、次のコマンドを入力します。
~]# chcon -R -l s2:c100 /home/john
4.13.4. Polyinstantiated ディレクトリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
/tmp ディレクトリーおよび /var/tmp/ ディレクトリーは、通常、すべてのプログラム、サービス、およびユーザーが一時的に保存するために使用されます。ただし、このような設定を行うと、競合状態攻撃や、ファイル名に基づく情報漏えいに対して脆弱になります。SELinux は、polyinstantiated ディレクトリーの形式でソリューションを提供します。これは、事実上、/tmp と /var/tmp/ の両方がインスタンス化され、各ユーザーに対して非公開になっていることを意味します。ディレクトリーのインスタンス化を有効にすると、各ユーザーの /tmp ディレクトリーおよび /var/tmp/ ディレクトリーが、/tmp-inst および /var/tmp/tmp-inst に自動的にマウントされます。
ディレクトリーのポリインスタンス化を有効にするには、以下の手順を行います。
手順4.21 ポリインスタンス化ディレクトリーの有効化
/etc/security/namespace.confファイルの最後の 3 行のコメントを解除して、/tmp、/var/tmp/、およびユーザーのホームディレクトリーのインスタンス化を有効にします。~]$ tail -n 3 /etc/security/namespace.conf /tmp /tmp-inst/ level root,adm /var/tmp /var/tmp/tmp-inst/ level root,adm $HOME $HOME/$USER.inst/ level/etc/pam.d/loginファイルーで、pam_namespace.soモジュールが session 用に設定されていることを確認します。~]$ grep namespace /etc/pam.d/login session required pam_namespace.so- システムを再起動します。