4.13. Multi-Level Security (MLS)
マルチレベルセキュリティーテクノロジーは、Bell-La Padula Mandatory Access Model を強制するセキュリティースキームを指します。MLS では、ユーザーとプロセスは サブジェクト と呼ばれ、ファイル、デバイス、およびシステムの他のパッシブコンポーネントは オブジェクト と呼ばれます。サブジェクトとオブジェクトの両方がセキュリティーレベルでラベル付けされ、これはサブジェクトのクリアランスとオブジェクトの分類を必要とします。各セキュリティーレベルは、sensitivity と category で設定されます。たとえば、内部リリーススケジュールは、機密扱いの内部文書カテゴリーに保管されます。
図4.1「クリアランスのレベル」 は、US 防衛コミュニティーが当初設計したクリアランス (機密情報取扱許可) レベルを示しています。上記の内部スケジュールの例に関連して、コンフィデンシャルクリアランスを取得したユーザーのみが、機密カテゴリーのドキュメントを表示できます。ただし、コンフィデンシャルクリアランスのみを有するユーザーは、より高いレベルまたはクリアランスを必要とする文書を表示することはできません。読み取りアクセスは、より低いレベルのクリアランスを有する文書に対してのみ許可され、より高いレベルのクリアランスを有する文書への書き込みアクセスは許可されます。
図4.1 クリアランスのレベル
図4.2「MLS を使用した許可されたデータフロー」 "Secret" セキュリティーレベルで実行しているサブジェクトと、セキュリティーレベルが異なるさまざまなオブジェクトとの間で許可されているデータフローをすべて表示します。簡単に言うと、Bell-LaPadula モデルでは、no read up と no write down の 2 つのプロパティーが適用されます。
図4.2 MLS を使用した許可されたデータフロー
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
~]# yum install selinux-policy-mls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - MLS ポリシーを有効にする前に、ファイルシステムの各ファイルに、MLS ラベルで再ラベル付けする必要があります。ファイルシステムに再ラベル付けすると、制限されたドメインのアクセスが拒否される可能性があります。これにより、システムが正しく起動しなくなる可能性があります。これを防ぐには、
/etc/selinux/config
ファイルでSELINUX=permissive
を設定します。また、SELINUXTYPE=mls
を設定して、MLS ポリシーを有効にします。設定ファイルは以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux が Permissive モードで実行していることを確認します。
setenforce 0
~]# setenforce 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow getenforce
~]$ getenforce Permissive
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - fixfiles スクリプトを使用して、
-F
オプションを含む/.autorelabel
ファイルを作成し、次回のシステムの再起動時にファイルに再ラベル付けされるようにします。fixfiles -F onboot
~]# fixfiles -F onboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。次回の起動時に、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. ***********
*** Warning -- SELinux mls policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ***********
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一番下の行にある*
(アスタリスク) 文字は、ラベル付けされている 1000 ファイルを表します。上記の例では、11 の*
文字が、ラベルが付けられた 11000 ファイルを表しています。すべてのファイルにラベルを付けるのにかかる時間は、システムのファイル数と、ハードディスクドライブの速度により異なります。最新のシステムでは、このプロセスに 10 分程度かかる場合があります。ラベリングプロセスが終了すると、システムが自動的に再起動します。 - Permissive モードでは SELinux ポリシーは強制されませんが、Enforcing モードで実行された場合に拒否されたであろうアクションの拒否は引き続きログに記録されます。Enforcing モードに切り替える前に、root で次のコマンドを実行して、システムの最後の起動時に SELinux がアクションを拒否しなかったことを確認します。最後のシステムの起動時に SELinux がアクションを拒否しなかった場合に、このコマンドを実行しても出力は返されません。システムの起動時に SELinux がアクセスを拒否された場合のトラブルシューティングは、11章トラブルシューティング を参照してください。
grep "SELinux is preventing" /var/log/messages
~]# grep "SELinux is preventing" /var/log/messages
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/log/messages
ファイルに拒否メッセージがないか、すでに拒否を解決している場合は、/etc/selinux/config
ファイルにSELINUX=enforcing
を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動し、SELinux が Enforcing モードで実行していることを確認します。
getenforce
~]$ getenforce Enforcing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MLS ポリシーが有効になっていることも確認します。sestatus |grep mls
~]# sestatus |grep mls Policy from config file: mls
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.13.3. 特定の MLS 範囲を持つユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下の手順に従って、特定の MLS 範囲で新規の Linux ユーザーを作成します。
手順4.20 特定の MLS 範囲を持つユーザーの作成
- useradd コマンドを使用して新しい Linux ユーザーを追加し、その新しい Linux ユーザーを既存の SELinux ユーザー (この例では
staff_u
) にマッピングします。useradd -Z staff_u john
~]# useradd -Z staff_u john
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しく作成した Linux ユーザーにパスワードを割り当てます。
prompt~]# passwd john
prompt~]# passwd john
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root で次のコマンドを実行し、SELinux ユーザーと Linux ユーザー間のマッピングを表示します。出力は、以下のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ユーザー
john
に指定範囲を定義します。semanage login --modify --range s2:c100 john
~]# semanage login --modify --range s2:c100 john
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux ユーザーと Linux ユーザー間のマッピングを再度表示します。ユーザー
john
には、指定した MLS レンジが定義されていることに注意してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、john のホームディレクトリーのラベルを修正するには、次のコマンドを入力します。
chcon -R -l s2:c100 /home/john
~]# chcon -R -l s2:c100 /home/john
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
~]$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/pam.d/login
ファイルーで、pam_namespace.so
モジュールが session 用に設定されていることを確認します。grep namespace /etc/pam.d/login
~]$ grep namespace /etc/pam.d/login session required pam_namespace.so
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。