3 SELinuxセキュリティ・コンテキストの管理
SELinuxでは、すべてのファイル・システム、ファイル、ディレクトリ、デバイス、プロセスにセキュリティ・コンテキストが関連付けられています。ファイルの場合、SELinuxはファイル・システムの拡張属性にコンテキスト・ラベルを格納します。コンテキストには、システム・オブジェクト(SELinuxユーザー、そのロール、タイプ、セキュリティ・レベル)についての追加情報が含まれます。SELinuxはこのコンテキスト情報を使用して、プロセス、Linuxユーザー、ファイル別にアクセスを制御します。この章では、SELinuxのセキュリティ・コンテキストの管理方法について説明します
特定のコマンド(ls、psおよび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
と略記できます。たとえば、s0
とs0-s0
は同じです。各レベルには、レベルが適用されるセキュリティ・カテゴリのオプション・セットがあります。セットが連続する場合は、略記できます。たとえば、s0:c0.c3
とs0: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
-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
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
に変更するには:
-
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
-
restoreconコマンドを使用して、ディレクトリ階層全体に新しいファイル・タイプを適用します。
sudo /sbin/restorecon -R -v /var/webcontent
デフォルト・ファイル・タイプのリストア
httpd_sys_content_t
設定を持つディレクトリ階層/var/webcontent
のデフォルト・ファイル・タイプをリストアします。
-
semanageコマンドを使用して、ディレクトリ階層のファイル・タイプ定義をファイル
/etc/selinux/targeted/contexts/files/file_contexts.local
から削除します。sudo /usr/sbin/semanage fcontext -d "/var/webcontent(/.*)?"
-
restoreconコマンドを使用して、ディレクトリ階層全体にデフォルトのファイル・タイプを適用します。
sudo /sbin/restorecon -R -v /var/webcontent