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
属性をユーザー・ドメインに割り当てるルールを追加するポリシー・モジュールを作成する必要があります。
- ルールを含むファイルを作成します。次に例を示します。
echo '(typeattributeset mcs_constrained_type (user_t))' > local_mcs_user.cil
-
新しいポリシー・モジュールをロードします。
sudo semodule -i local_mcs_user.cil
-
次のように、
mcs_constrained_type
がuser_t
ドメインに適用されるようになったことを確認します。seinfo -xt user_t|grep mcs_constrained_type
同じ方法でmcs_constrained_type
属性を他のSELinuxドメインに追加できます。
ユーザーへのMCSカテゴリの適用
MCSカテゴリをユーザーに適用することで、リソースへのユーザーのアクセスを制御できます。各SELinuxユーザーに使用可能にするカテゴリ範囲を定義できます。また、SELinuxユーザーにマップされているOracle Linuxユーザー・アカウントごとにサブ範囲を指定できます。様々なSELinuxユーザーの詳細、およびこれらのユーザーと標準Oracle Linuxユーザーとのマッピングの管理方法の詳細は、SELinuxユーザーの管理を参照してください。
-
SELinuxの
user_u
ユーザーに使用可能にするカテゴリ範囲を定義するには、次を実行します。sudo semanage user -m -rs0:c0,c1-s0:c0.c9 user_u
カテゴリ番号
c0
からc1023
までを使用するか、mcstrans
サービスの使用時にはカテゴリ別名を使用します。この例では、c0
からc9
までのカテゴリ範囲がuser_uユーザーに割り当てられています。 - カテゴリ範囲を定義したSELinuxユーザーにマップされているOracle Linuxユーザーごとに、適用する個々のカテゴリを指定できます。たとえば、oracleユーザーに
c1
カテゴリを適用するには、次を実行します。
ユーザーに割り当てるカテゴリは、マップされたSELinuxユーザーに定義した範囲内である必要があります。sudo semanage login -m -rs0:c1 oracle
同様に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
サービスによって適用された現在のマッピングのリストが返されます。