Show Table of Contents
13.2. タイプ
高度なプロセス分離を提供するために SELinux のターゲットポリシーで使用されるメインのパーミッション制御方法が、Type Enforcement (タイプの強制) になります。すべてのファイルおよびプロセスにタイプのラベルが付けられます。タイプはプロセスの SELinux ドメインを定義し、ファイルの SELinux タイプを定義します。SELinux ポリシールールは、ドメインがタイプにアクセスする場合でも、ドメインが別のドメインにアクセスする場合でも、タイプ同士がアクセスする方法を定義します。アクセスを許可する特定の SELinux ポリシールールが存在する場合にのみ、アクセスは許可されます。
以下では
/var/www/html/ ディレクトリーに新規ファイルを作成し、このファイルが親ディレクトリー (/var/www/html/) から httpd_sys_content_t タイプを継承していることを例示します。
- 以下のコマンドを実行して、
/var/www/html/の SELinux コンテキストを表示します。~]$
ls -dZ /var/www/htmldrwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/var/www/html/がhttpd_sys_content_tタイプでラベル付けされていることが分かります。 - root で
touchユーティリティーを使用して新規ファイルを作成します。~]#
touch /var/www/html/file1 - 以下のコマンドを実行して SELinux コンテキストを表示します。
~]$
ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
ls -Z コマンドを使用すると file1 には httpd_sys_content_t タイプのラベルが付けられていることが分かります。SELinux では、httpd がこのタイプのラベルが付いたファイルを読み込めるよう許可していますが、書き込みは許可していません。Linux のパーミッションが書き込みアクセスを許可していても、書き込みは許可されません。SELinux ポリシーでは、httpd_t ドメイン (httpd が実行されるドメイン) で実行しているプロセスが読み取りと書き込みができるタイプを定義しています。これにより、プロセスが別のプロセス用のファイルにアクセスすることを防いでいます。
たとえば、
httpd は httpd_sys_content_t タイプ (Apache HTTP Server 用) のラベルが付いたファイルを読み込むことはできますが、デフォルトでは samba_share_t タイプ (Samba 用) のラベルが付いたファイルにはアクセスできません。また、ユーザーのホームディレクトリーにあるファイルには user_home_t タイプのラベルが付けられます。これにより、デフォルトで httpd がユーザーのホームディレクトリーにあるファイルの読み取りや書き込みをすることを防いでいます。
以下で
httpd で使用されるタイプを例示します。タイプを使い分けることで柔軟なアクセス設定ができるようになります。
httpd_sys_content_t- このタイプは、静的な Web サイトで使用される
.htmlファイルなどの Web コンテンツに使用します。このタイプのラベルが付けられたファイルは、httpdおよびhttpdで実行されるスクリプトによるアクセスが可能となります (読み取り専用)。デフォルトでは、このタイプのラベルが付けられたファイルおよびディレクトリーには、httpdや他のプロセスは書き込みや編集ができません。デフォルトでは、/var/www/html/ディレクトリー内に作成またはコピーされたファイルにはhttpd_sys_content_tタイプのラベルが付けられることに注意してください。 httpd_sys_script_exec_t- このタイプは、
httpdで実行するスクリプトに使用します。一般的には/var/www/cgi-bin/内の CGI (Common Gateway Interface) スクリプトに使用されます。デフォルトでは、SELinux ポリシーにより、httpdは CGI スクリプトの実行が禁止されています。これを許可するには、スクリプトにhttpd_sys_script_exec_tタイプのラベルを付け、httpd_enable_cgiのブール値を有効にします。httpd_sys_script_exec_tのラベルが付けられたスクリプトは、httpdで実行されるとhttpd_sys_script_tドメインで実行されます。httpd_sys_script_tドメインには、postgresql_tやmysqld_tなどの他のシステムドメインへのアクセスがあります。 httpd_sys_rw_content_t- このタイプのラベルが付けられたファイルには、
httpd_sys_script_exec_tタイプのラベルが付いたスクリプトは書き込み可能となりますが、これ以外のラベルタイプのスクリプトによる編集はできません。httpd_sys_script_exec_tタイプのラベルが付いたスクリプトで読み込みや書き込みをするファイルには、httpd_sys_rw_content_tタイプのラベルを使用する必要があります。 httpd_sys_ra_content_t- このタイプのラベルが付けられたファイルは、
httpd_sys_script_exec_tタイプのラベルが付いたスクリプトによる追加が可能になりますが、これ以外のラベルタイプのスクリプトによる編集はできません。httpd_sys_script_exec_tタイプのラベルが付いたスクリプトで読み込みや追加をするファイルには、httpd_sys_ra_content_tタイプのラベルを使用する必要があります。 httpd_unconfined_script_exec_t- このタイプのラベルが付いたスクリプトは SELinux の保護なしで実行されます。他のオプションをすべて試してもうまくいかない複雑なスクリプトにのみ、このタイプを使用してください。
httpdの SELinux 保護を無効にする、またはシステム全体の SELinux 保護を無効にするよりは、このタイプの使用が望まれます。
注記
httpd で使用可能な他のタイプを確認するには、以下のコマンドを実行します。
~]$ grep httpd /etc/selinux/targeted/contexts/files/file_contexts
手順13.1 SELinux のコンテキストを変更する
ファイルやディレクトリーのタイプは
chcon コマンドを使用して変更できます。chcon による変更は、ファイルシステムの再ラベルや restorecon コマンドを実行すると失われます。特定ファイルの SELinux コンテキストをユーザーが変更できるかどうかは、SELinux ポリシーで制御します。以下の例では、httpd 用に index.html ファイルと新規ディレクトリーを作成し、httpd がこれらにアクセスできるようにするラベルを付けます。
- root で
mkdirユーティリティーを使用し、httpdが使用するファイルを保存する最上位のディレクトリーを作成します。~]#
mkdir -p /my/website - ファイルコンテキスト設定のパターンに合致しないファイルやディレクトリーには、
default_tタイプのラベルが付いている場合があります。制限のあるサービスは、このタイプのファイルやディレクトリーにはアクセスできません。~]$
ls -dZ /mydrwxr-xr-x root root unconfined_u:object_r:default_t:s0 /my - root で以下のコマンドを実行し、
my/ディレクトリーおよびサブディレクトリーのタイプをhttpdがアクセス可能なタイプに変更します。これで/my/website/の下に作成されるファイルは、default_tタイプではなくhttpd_sys_content_tタイプを継承するようになり、httpd がアクセスできるようになります。~]#
chcon -R -t httpd_sys_content_t /my/~]#touch /my/website/index.html~]#ls -Z /my/website/index.html-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /my/website/index.html
chcon についての詳細は、「一時的な変更: chcon」を参照してください。
再ラベル付けや
restorecon コマンドの実行後もこのラベル変更を維持するには、semanage fcontext コマンド (semanage は policycoreutils-python パッケージで提供) を使用します。このコマンドにより、変更がファイルコンテキスト設定に追加されます。この後に restorecon を実行すると、ファイルコンテキスト設定が読み込まれ、ラベル変更が適用されます。以下の例では、httpd が使用する新規ディレクトリーと index.html ファイルを作成し、httpd がアクセスできるようにラベルを永続的に変更します。
- root で
mkdirユーティリティーを使用し、httpdが使用するファイルを保存する最上位のディレクトリーを作成します。~]#
mkdir -p /my/website - root で以下のコマンドを実行して、ラベル変更をファイルコンテキスト設定に追加します。
~]#
semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?""/my(/.*)?"は、ラベル変更がmy/ディレクトリーとその下のファイルおよびディレクトリーすべてに適用されることを意味します。 - root で
touchを使用して新規ファイルを作成します。~]#
touch /my/website/index.html - root で以下のコマンドを実行し、ラベルの変更を適用します (ステップ 2 の
semanageコマンドで変更されたファイルコンテキスト設定がrestoreconにより読み込まれます)。~]#
restorecon -R -v /my/restorecon reset /my context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /my/website/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
semanage に関する詳細情報は、「永続的な変更: semanage fcontext」を参照してください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.