Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

27.18.6. SELinux オプション

特権付き SCC を除くすべての定義済み SCC では、seLinuxContextMustRunAs に設定します。そのため、Pod の要件と一致する可能性が高い SCC の場合、Pod での SELinux ポリシーの使用を強制的に実行します。Pod で使用される SELinux ポリシーは、その Pod 自体やイメージ、SCC、またはプロジェクト (デフォルトを指定する) で定義できます。

SELinux のラベルは Pod の securityContext.seLinuxOptions セクションで定義でき、userroletype、および level を使用できます。

注記

このトピックでは、レベルと MCS ラベルを置き換え可能な用語として使用します。

...
 securityContext: 1
    seLinuxOptions:
      level: "s0:c123,c456" 2
...
1
level は、Pod 全体に対してグローバルに定義することも、コンテナーごとに個別に定義することもできます。
2
SELinux の level ラベル。

以下の例は SCC とデフォルトプロジェクトからの抜粋です。

$ oc get -o yaml --export scc scc-name
...
seLinuxContext:
  type: MustRunAs 1

# oc get -o yaml --export namespace default
...
metadata:
  annotations:
    openshift.io/sa.scc.mcs: s0:c1,c0 2
...
1
MustRunAs によりボリュームのラベルが再設定されます。
2
ラベルを Pod や SCC で指定しない場合は、プロジェクトのデフォルトが適用されます。

特権付き SCC を除くすべての定義済み SCC では、seLinuxContextMustRunAs に設定します。これにより、Pod での MCS ラベルの使用が強制的に実行されます。 MCS ラベルは、Pod 定義やイメージで定義するか、またはデフォルトとして指定されます。

SCC によって、SELinux ラベルを必要とするかどうかが決まります。また、SCC でデフォルトラベルを指定できます。 seLinuxContext ストラテジーを MustRunAs に設定していて、Pod (またはイメージ) がラベルを定義していない場合は、OpenShift Container Platform は SCC 自体またはプロジェクトから選択されるラベルにデフォルト設定されます。

seLinuxContextRunAsAnyに設定した場合は、デフォルトラベルは提供されず、コンテナーによって最終的なラベルが決められます。Docker の場合、コンテナーでは一意の MCS ラベルが使用されますが、これが既存のストレージマウントのラベル付けに一致する可能性はほとんどありません。SELinux 管理をサポートしているボリュームについては、指定されるラベルからアクセスできるようにラベルの再設定がなされ、ラベルの排他性によってはそのラベルのみがアクセスできるようになります。

この場合、特権なしコンテナーについては以下の 2 つが関係します。

  • ボリュームには、特権なしのコンテナーからのアクセス可能なタイプが指定されます。このタイプは、通常は Red Hat Enterprise Linux (RHEL) バージョン 7.5 以降の container_file_t になります。このタイプはボリュームをコンテナーコンテキストとして処理します。以前の RHEL バージョンの RHEL 7.4、7.3 などでは、ボリュームに svirt_sandbox_file_t タイプが指定されます。
  • level を指定した場合は、指定される MCS ラベルを使用してボュームのラベルが設定されます。

Pod からボリュームにアクセスできるようにするためには、Pod で両方のボリュームカテゴリーを持つ必要があります。そのため、s0:c1,c2 の Pod は、s0:c1,c2 のボリュームにアクセスできます。s0 のボリュームは、すべての Pod からアクセスできます。

Pod で承認が失敗する場合、またはパーミッションエラーが原因でストレージのマウントが失敗している場合は、SELinux の実施による干渉が生じている可能性があります。これについては、たとえば以下を実行してチェックできます。

# ausearch -m avc --start recent

これは、ログファイルに AVC (Access Vector Cache) のエラーがないかどうかを検査します。