3 SELinuxセキュリティ・コンテキストの管理

SELinuxでは、すべてのファイル・システム、ファイル、ディレクトリ、デバイス、プロセスにセキュリティ・コンテキストが関連付けられています。ファイルの場合、SELinuxはファイル・システムの拡張属性にコンテキスト・ラベルを格納します。コンテキストには、システム・オブジェクト(SELinuxユーザー、そのロール、タイプ、セキュリティ・レベル)についての追加情報が含まれます。SELinuxはこのコンテキスト情報を使用して、プロセス、Linuxユーザー、ファイル別にアクセスを制御します。この章では、SELinuxのセキュリティ・コンテキストの管理方法について説明します

特定のコマンド(lspsおよびid)で-Zオプションを指定し、次の構文を使用してSELinuxコンテキストを表示できます。

SELinux user:Role:Type:Level           
SELinux user

SELinuxユーザー・アカウントは、通常のLinuxユーザー・アカウントを補完します。SELinuxは、すべてのLinuxユーザーを、ユーザー・セッション内のプロセスのSELinuxコンテキストで使用されるSELinuxユーザーIDにマップします。

Role

ロール・ベース・アクセス制御(RBAC)セキュリティ・モデルでは、ロールはSELinuxプロセス・ドメインまたはファイル・タイプとSELinuxユーザーとの間の中間抽象レイヤーとして機能します。プロセスは特定のSELinuxドメインで実行され、ファイル・システム・オブジェクトにはSELinuxファイル・タイプが割り当てられます。SELinuxユーザーには指定されたロールを実行する権限が与えられ、ロールには指定されたSELinuxドメインおよびファイル・タイプへの権限が与えられます。ユーザーのロールが、ユーザーがアクセスできるプロセス・ドメインおよびファイル・タイプ、またユーザーがアクセスできるプロセスおよびファイルを定義します。

Type

タイプは、SELinuxファイル・タイプまたはSELinuxプロセス・ドメインを定義します。それぞれのドメインで実行することで、プロセスは互いに分離されています。この分離によって、他のプロセスが使用しているファイルにプロセスがアクセスするのを防ぎ、他のプロセスにプロセスがアクセスするのを防ぎます。SELinuxポリシー・ルールは、プロセス・ドメインがファイル・タイプおよび他のプロセス・ドメインに対して有するアクセス権を定義します。

Level

レベルは、Multi-Level Security (MLS)およびMulti-Category Security (MCS)の属性です。MLS範囲は機密レベルのペアで、low_level-high_levelで示されます。レベルが同一の場合、範囲はlow_levelと略記できます。たとえば、s0s0-s0は同じです。各レベルには、レベルが適用されるセキュリティ・カテゴリのオプション・セットがあります。セットが連続する場合は、略記できます。たとえば、s0:c0.c3s0:c0,c1,c2,c3は同じです。

 SELinuxユーザー・マッピングの表示

semanageコマンドを使用して、SELinuxユーザー・アカウントとLinuxユーザー・アカウントの間のマッピングを表示します。

semanage login -l
Login Name           SELinux User         MLS/MCS Range        Service

__default__          unconfined_u         s0-s0:c0.c1023       *
root                 unconfined_u         s0-s0:c0.c1023       *
system_u             system_u             s0-s0:c0.c1023       *

デフォルトでは、SELinuxはrootおよびデフォルトのシステムレベル・ユーザーsystem_u以外のLinuxユーザーをLinuxの__default__ユーザーにマップし、その後、SELinuxのunconfined_uユーザーにマップします。MLS/MCS範囲とは、Multi-Level Security (MLS)とMulti-Category Security (MCS)で使用されるセキュリティ・レベルです。

 SELinuxコンテキスト情報の表示

ファイルに関連付けられているコンテキスト情報を表示するには、ls -Zコマンドを使用します。
ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 config
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 jail
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 team0.cfg
指定されたファイルまたはディレクトリに関連付けられているコンテキスト情報を表示するには、次のように入力します。
ls -Z /etc/selinux/config
-rw-r--r--. root root system_u:object_r:selinux_config_t:s0 /etc/selinux/config
プロセスに関連付けられているコンテキスト情報を表示するには、ps -Zコマンドを使用します。
ps -Z
LABEL                                                 PID  TTY   TIME     CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3038 pts/0 00:00:00 su
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3044 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3322 pts/0 00:00:00 ps
現在のユーザーに関連付けられているコンテキスト情報を表示するには、id -Zコマンドを使用します。
id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

デフォルト・ファイル・タイプの変更

ファイル・システム階層のデフォルトのファイル・タイプを変更しなければならないことがあります。たとえば、httpd/var/www/html以外のDocumentRootディレクトリを使用する場合があります。

ディレクトリ階層/var/webcontentのデフォルトのファイル・タイプをhttpd_sys_content_tに変更するには:
  1. semanageコマンドを使用して、ディレクトリ階層のファイル・タイプhttpd_sys_content_tを定義します。

    sudo /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/var/webcontent(/.*)?"
    このコマンドは、次のエントリをファイル/etc/selinux/targeted/contexts/files/file_contexts.localに追加します。
    /var/webcontent(/.*)?     system_u:object_r:httpd_sys_content_t:s0
  2. restoreconコマンドを使用して、ディレクトリ階層全体に新しいファイル・タイプを適用します。
    sudo /sbin/restorecon -R -v /var/webcontent

 デフォルト・ファイル・タイプのリストア

次のステップでは、httpd_sys_content_t設定を持つディレクトリ階層/var/webcontentのデフォルト・ファイル・タイプをリストアします。
  1. semanageコマンドを使用して、ディレクトリ階層のファイル・タイプ定義をファイル/etc/selinux/targeted/contexts/files/file_contexts.localから削除します。

    sudo /usr/sbin/semanage fcontext -d "/var/webcontent(/.*)?"
  2. restoreconコマンドを使用して、ディレクトリ階層全体にデフォルトのファイル・タイプを適用します。
    sudo /sbin/restorecon -R -v /var/webcontent

ファイル・システムのラベルの変更

文字列file_tを含むエラー・メッセージが表示された場合、問題は通常、ファイル・システムのコンテキスト・ラベルが正しくないことにあります。

コマンドラインを使用してファイル・システムのラベルを変更するには:

  1. ファイル/.autorelabelを作成して、システムをリブートします。

  2. fixfiles onbootコマンドを実行して、システムをリブートします。