4.13. Multi-Level Security (MLS)


マルチレベルセキュリティーテクノロジーは、Bell-La Padula Mandatory Access Model を強制するセキュリティースキームを指します。MLS では、ユーザーとプロセスは サブジェクト と呼ばれ、ファイル、デバイス、およびシステムの他のパッシブコンポーネントは オブジェクト と呼ばれます。サブジェクトとオブジェクトの両方がセキュリティーレベルでラベル付けされ、これはサブジェクトのクリアランスとオブジェクトの分類を必要とします。各セキュリティーレベルは、sensitivitycategory で設定されます。たとえば、内部リリーススケジュールは、機密扱いの内部文書カテゴリーに保管されます。
図4.1「クリアランスのレベル」 は、US 防衛コミュニティーが当初設計したクリアランス (機密情報取扱許可) レベルを示しています。上記の内部スケジュールの例に関連して、コンフィデンシャルクリアランスを取得したユーザーのみが、機密カテゴリーのドキュメントを表示できます。ただし、コンフィデンシャルクリアランスのみを有するユーザーは、より高いレベルまたはクリアランスを必要とする文書を表示することはできません。読み取りアクセスは、より低いレベルのクリアランスを有する文書に対してのみ許可され、より高いレベルのクリアランスを有する文書への書き込みアクセスは許可されます。

図4.1 クリアランスのレベル

図4.2「MLS を使用した許可されたデータフロー」 "Secret" セキュリティーレベルで実行しているサブジェクトと、セキュリティーレベルが異なるさまざまなオブジェクトとの間で許可されているデータフローをすべて表示します。簡単に言うと、Bell-LaPadula モデルでは、no read upno 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 ポリシーの有効化

  1. selinux-policy-mls パッケージをインストールします。
    ~]# yum install selinux-policy-mls
    Copy to Clipboard Toggle word wrap
  2. 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
    
    Copy to Clipboard Toggle word wrap
  3. SELinux が Permissive モードで実行していることを確認します。
    ~]# setenforce 0
    Copy to Clipboard Toggle word wrap
    ~]$ getenforce
    Permissive
    
    Copy to Clipboard Toggle word wrap
  4. fixfiles スクリプトを使用して、-F オプションを含む/.autorelabel ファイルを作成し、次回のシステムの再起動時にファイルに再ラベル付けされるようにします。
    ~]# fixfiles -F onboot
    Copy to Clipboard Toggle word wrap
  5. システムを再起動します。次回の起動時に、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.
    ***********
    
    Copy to Clipboard Toggle word wrap
    一番下の行にある * (アスタリスク) 文字は、ラベル付けされている 1000 ファイルを表します。上記の例では、11 の* 文字が、ラベルが付けられた 11000 ファイルを表しています。すべてのファイルにラベルを付けるのにかかる時間は、システムのファイル数と、ハードディスクドライブの速度により異なります。最新のシステムでは、このプロセスに 10 分程度かかる場合があります。ラベリングプロセスが終了すると、システムが自動的に再起動します。
  6. Permissive モードでは SELinux ポリシーは強制されませんが、Enforcing モードで実行された場合に拒否されたであろうアクションの拒否は引き続きログに記録されます。Enforcing モードに切り替える前に、root で次のコマンドを実行して、システムの最後の起動時に SELinux がアクションを拒否しなかったことを確認します。最後のシステムの起動時に SELinux がアクションを拒否しなかった場合に、このコマンドを実行しても出力は返されません。システムの起動時に SELinux がアクセスを拒否された場合のトラブルシューティングは、11章トラブルシューティング を参照してください。
    ~]# grep "SELinux is preventing" /var/log/messages
    Copy to Clipboard Toggle word wrap
  7. /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
    
    Copy to Clipboard Toggle word wrap
  8. システムを再起動し、SELinux が Enforcing モードで実行していることを確認します。
    ~]$ getenforce
    Enforcing
    
    Copy to Clipboard Toggle word wrap
    MLS ポリシーが有効になっていることも確認します。
    ~]# sestatus |grep mls
    Policy from config file:        mls
    
    Copy to Clipboard Toggle word wrap

4.13.3. 特定の MLS 範囲を持つユーザーの作成

以下の手順に従って、特定の MLS 範囲で新規の Linux ユーザーを作成します。

手順4.20 特定の MLS 範囲を持つユーザーの作成

  1. useradd コマンドを使用して新しい Linux ユーザーを追加し、その新しい Linux ユーザーを既存の SELinux ユーザー (この例では staff_u) にマッピングします。
    ~]# useradd -Z staff_u john
    Copy to Clipboard Toggle word wrap
  2. 新しく作成した Linux ユーザーにパスワードを割り当てます。
    prompt~]# passwd john
    Copy to Clipboard Toggle word wrap
  3. 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      *
    Copy to Clipboard Toggle word wrap
  4. ユーザー john に指定範囲を定義します。
    ~]# semanage login --modify --range s2:c100 john
    Copy to Clipboard Toggle word wrap
  5. 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      *
    Copy to Clipboard Toggle word wrap
  6. 必要に応じて、john のホームディレクトリーのラベルを修正するには、次のコマンドを入力します。
    ~]# chcon -R -l s2:c100 /home/john
    Copy to Clipboard Toggle word wrap

4.13.4. Polyinstantiated ディレクトリーの設定

/tmp ディレクトリーおよび /var/tmp/ ディレクトリーは、通常、すべてのプログラム、サービス、およびユーザーが一時的に保存するために使用されます。ただし、このような設定を行うと、競合状態攻撃や、ファイル名に基づく情報漏えいに対して脆弱になります。SELinux は、polyinstantiated ディレクトリーの形式でソリューションを提供します。これは、事実上、/tmp/var/tmp/ の両方がインスタンス化され、各ユーザーに対して非公開になっていることを意味します。ディレクトリーのインスタンス化を有効にすると、各ユーザーの /tmp ディレクトリーおよび /var/tmp/ ディレクトリーが、/tmp-inst および /var/tmp/tmp-inst に自動的にマウントされます。
ディレクトリーのポリインスタンス化を有効にするには、以下の手順を行います。

手順4.21 ポリインスタンス化ディレクトリーの有効化

  1. /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
    
    Copy to Clipboard Toggle word wrap
  2. /etc/pam.d/login ファイルーで、pam_namespace.so モジュールが session 用に設定されていることを確認します。
    ~]$ grep namespace /etc/pam.d/login
    session    required     pam_namespace.so
    
    Copy to Clipboard Toggle word wrap
  3. システムを再起動します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat