14.2. タイプ

高度なプロセス分離を提供するために SELinux のターゲットポリシーで使用されるメインのパーミッション制御方法が、Type Enforcement (タイプの強制) になります。すべてのファイルおよびプロセスにタイプのラベルが付けられます。タイプはプロセスの SELinux ドメインを定義し、ファイルの SELinux タイプを定義します。SELinux ポリシールールは、ドメインがタイプにアクセスする場合でも、ドメインが別のドメインにアクセスする場合でも、タイプ同士がアクセスする方法を定義します。アクセスを許可する特定の SELinux ポリシールールが存在する場合にのみ、アクセスは許可されます。
以下では /var/www/html/ ディレクトリーに新規ファイルを作成し、このファイルが親ディレクトリー (/var/www/html/) から httpd_sys_content_t タイプを継承していることを例示します。
  1. 以下のコマンドを実行して、/var/www/html/ の SELinux コンテキストを表示します。
    ~]$ ls -dZ /var/www/html
    drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
    /var/www/html/httpd_sys_content_t タイプでラベル付けされていることが分かります。
  2. root で touch ユーティリティーを使用して新規ファイルを作成します。
    ~]# touch /var/www/html/file1
  3. 以下のコマンドを実行して 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 が実行されるドメイン) で実行しているプロセスが読み取りと書き込みができるタイプを定義しています。これにより、プロセスが別のプロセス用のファイルにアクセスすることを防いでいます。
たとえば、httpdhttpd_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_tmysqld_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

手順14.1 SELinux のコンテキストを変更する

ファイルやディレクトリーのタイプは chcon コマンドを使用して変更できます。chcon による変更は、ファイルシステムの再ラベルや restorecon コマンドを実行すると失われます。特定ファイルの SELinux コンテキストをユーザーが変更できるかどうかは、SELinux ポリシーで制御します。以下の例では、httpd 用に index.html ファイルと新規ディレクトリーを作成し、httpd がこれらにアクセスできるようにするラベルを付けます。
  1. root で mkdir ユーティリティーを使用し、httpd が使用するファイルを保存する最上位のディレクトリーを作成します。
    ~]# mkdir -p /my/website
  2. ファイルコンテキスト設定のパターンに合致しないファイルやディレクトリーには、default_t タイプのラベルが付いている場合があります。制限のあるサービスは、このタイプのファイルやディレクトリーにはアクセスできません。
    ~]$ ls -dZ /my
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /my
  3. 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 コマンド (semanagepolicycoreutils-python パッケージで提供) を使用します。このコマンドにより、変更がファイルコンテキスト設定に追加されます。この後に restorecon を実行すると、ファイルコンテキスト設定が読み込まれ、ラベル変更が適用されます。以下の例では、httpd が使用する新規ディレクトリーと index.html ファイルを作成し、httpd がアクセスできるようにラベルを永続的に変更します。
  1. root で mkdir ユーティリティーを使用し、httpd が使用するファイルを保存する最上位のディレクトリーを作成します。
    ~]# mkdir -p /my/website
  2. root で以下のコマンドを実行して、ラベル変更をファイルコンテキスト設定に追加します。
    ~]# semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"
    "/my(/.*)?" は、ラベル変更が my/ ディレクトリーとその下のファイルおよびディレクトリーすべてに適用されることを意味します。
  3. root で touch を使用して新規ファイルを作成します。
    ~]# touch /my/website/index.html
  4. 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」を参照してください。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。