5 Multi-Category SecurityによるSELinuxポリシーの拡張

Multi-Category Security (MCS)は、SELinux targetedポリシーおよびMulti-Level Security (MLS)ポリシーを拡張し、プロセスおよびファイルにカテゴリ・ラベルを割り当てることができます。MCSでは、ファイルにアクセスできるのは、そのファイルに適用されているのと同じカテゴリに割り当てられたプロセスまたはユーザーのみです。MCSは、他のすべてのセキュリティ・チェックが実行された後に適用されます。したがって、MCSは通常、アクセスをさらに制限するために使用されます。カテゴリ・タグの範囲はc0からc1023までですが、使用しやすくなるように、これらのカテゴリ値にテキスト・ラベルを定義できます。mcstransサービスは、システムの入出力を処理する際に、カテゴリ値とテキスト・ラベルとの変換に使用できます。

MLSは様々なセキュリティ・レベル、またはデータの機密性を定義するために使用でき、MCSは様々な目的でデータをグループ化するために使用できます。たとえば、システム上の複数の異なるプロジェクトに対して同じサービスを実行でき、各プロジェクト内のデータを様々な機密レベルにすることができます。ユーザーには、個別のプロジェクトについて、機密性クリアランスを満たしているデータへのアクセス権のみを付与する必要があります。MCSは、カテゴリ・タグを各プロジェクトに関連付けることで、この制限を適用します。その結果、ファイルまたはプロセスのセキュリティ・コンテキストは、SELinuxユーザー、SELinuxロール、SELinuxタイプ、MLS機密レベルおよびMCSカテゴリを組み合せたものになります。

表5-1データ機密性およびカテゴリ適用を示すマトリックス

機密性 カテゴリ
未指定 会計 マーケティング 開発
未分類 s0 s0:c0 s0:c1 s0:c2
内部 s1 s1:c0 s1:c1 s1:c2
制限あり s2 s2:c0 s2:c1 s2:c2
強い制限あり s3 s3:c0 s3:c1 s3:c2

この例の表では、強い制限のあるデータ(s3)にアクセスする必要がある、会計部門(c0)内の高い権限があるユーザーが、次のようなセキュリティ・コンテキストを定義されている可能性があります。

user_u:user_r:user_t:s3:c0

MCSの要件

MCS用システムを構成する前に、次の要件を満たしてください。

  • SELinuxは、enforcingモードで構成する必要があります。
  • SELinuxは、targetedまたはmlsポリシーを使用するように構成する必要があります。
  • chcatおよびsemanageコマンドを使用できるように、policycoreutils-python-utilsパッケージをインストールする必要があります。
  • setools-consoleパッケージをインストールすると、検証のためにseinfoコマンドを使用できます。
  • SELinuxの制限付きユーザーのマッピングは、MCSを使用する場合には一般的です。たとえば、権限のないユーザーはuser_uに割り当てられ、権限のあるユーザーはstaff_uに割り当てられます。MCSを構成する前にユーザー・マッピングを定義しておくと便利です。SELinuxユーザーの管理を参照してください。

ユーザーに対するMCSの有効化

MCSは、SELinuxでデフォルトでアクティブになっていますが、ユーザーに対して構成されていません。ユーザーに対してMCSを構成するには、mcs_constrained_type属性をユーザー・ドメインに割り当てるルールを追加するポリシー・モジュールを作成する必要があります。

  1. ルールを含むファイルを作成します。次に例を示します。
    echo '(typeattributeset mcs_constrained_type (user_t))' > local_mcs_user.cil
  2. 新しいポリシー・モジュールをロードします。

    sudo semodule -i local_mcs_user.cil
  3. 次のように、mcs_constrained_typeuser_tドメインに適用されるようになったことを確認します。

    seinfo -xt user_t|grep mcs_constrained_type

同じ方法でmcs_constrained_type属性を他のSELinuxドメインに追加できます。

ユーザーへのMCSカテゴリの適用

MCSカテゴリをユーザーに適用することで、リソースへのユーザーのアクセスを制御できます。各SELinuxユーザーに使用可能にするカテゴリ範囲を定義できます。また、SELinuxユーザーにマップされているOracle Linuxユーザー・アカウントごとにサブ範囲を指定できます。様々なSELinuxユーザーの詳細、およびこれらのユーザーと標準Oracle Linuxユーザーとのマッピングの管理方法の詳細は、SELinuxユーザーの管理を参照してください。

  1. SELinuxのuser_uユーザーに使用可能にするカテゴリ範囲を定義するには、次を実行します。

    sudo semanage user -m -rs0:c0,c1-s0:c0.c9 user_u

    カテゴリ番号c0からc1023までを使用するか、mcstransサービスの使用時にはカテゴリ別名を使用します。この例では、c0からc9までのカテゴリ範囲がuser_uユーザーに割り当てられています。

  2. カテゴリ範囲を定義したSELinuxユーザーにマップされているOracle Linuxユーザーごとに、適用する個々のカテゴリを指定できます。たとえば、oracleユーザーにc1カテゴリを適用するには、次を実行します。
    sudo semanage login -m -rs0:c1 oracle
    ユーザーに割り当てるカテゴリは、マップされたSELinuxユーザーに定義した範囲内である必要があります。

    同様にchcat -lコマンドでも、ユーザーに適用するカテゴリを変更できます。たとえば、次のように、c2カテゴリをoracleに追加し、c1カテゴリを削除できます。

    sudo chcat -l -- +c2,-c1 oracle

    このコマンドでは、--を使用して、-文字をオプション・スイッチとして解釈しないことを示しています。

詳細は、chcat(8)およびsemanage-user(8)マニュアル・ページを参照してください。

ファイルへのMCSカテゴリの適用

ファイルへのアクセス権があるユーザーは、そのユーザーにMCSカテゴリが割り当てられている場合には、そのファイルにそのカテゴリを適用できます。ファイルにカテゴリを適用することで、ユーザーは、同じカテゴリが割り当てられていないシステム上の他のユーザーからそのファイルへのアクセスをブロックできます。なお、すべてのSELinuxポリシーと同様に、標準のLinux任意アクセス制御も有効であるため、ユーザーにファイルへのカテゴリ・アクセス権がある場合でも、そのユーザーは、ファイル権限およびモードによってアクセスが防止されていると、ファイルにアクセスできないことがあります。

ユーザーがファイルに適用するカテゴリを設定できるのは、自分が設定するカテゴリが自分にも割り当てられている場合です。ファイル・カテゴリは、chcatコマンドを使用して設定します。たとえば、c1およびc2カテゴリをファイルに追加するには、次を実行します。

chcat -- +c1,+c2 /path/to/file

c1カテゴリを削除するには、次を実行します。

chcat -- -c1 /path/to/file

このコマンドでは、--を使用して、-文字をオプション・スイッチとして解釈しないことを示しています。詳細は、chcat(8)マニュアル・ページを参照してください。

ファイルのセキュリティ・コンテキストを一覧表示することで、ファイルに割り当てられるカテゴリを確認できます。

ls -lZ /path/to/file

新しいファイルとディレクトリは、デフォルトでは、親ディレクトリのSELinuxタイプを継承します。次のコマンドを実行することで、ファイルの親ディレクトリに割り当てられているカテゴリを確認できます。

ls -dZ /path/to/file

mcstransサービスの有効化

mcstransサービスにより、編集可能な構成エントリとして定義されている判読可能なテキスト・ラベルのマップに対して、MCSカテゴリおよびMLS機密性値が自動的に翻訳されます。targetedポリシーを使用している場合、構成ファイルは/etc/selinux/targeted/setrans.confにあります。mlsポリシーを使用している場合、/etc/selinux/mls/setrans.confにあるか/etc/selinux/mls/setrans.d内の個別の構成ファイルとして存在します。

mcstransサービスにより、ユーザーは、様々なSELinux出力でシステムによって返されたカテゴリ値と機密性値を簡単に理解できるようになり、セキュリティ・コンテキストの定義時に適切な値を設定しやすくなります。詳細は、setrans.conf(8)およびmcstransd(8)マニュアル・ページを参照してください。

mcstransサービスをインストールして有効にするには、次を実行します。

sudo dnf install -y mcstrans
sudo enable --now mcstrans

setrans.confファイルのいずれかを更新して独自のマッピングを作成する場合は、次のように、mcstransサービスを再起動する必要があります。

sudo systemctl restart mcstrans

次を実行することで、翻訳が適用されたことを確認できます。

chcat -L

このコマンドでは、mcstransサービスによって適用された現在のマッピングのリストが返されます。