13.2. タイプ
高度なプロセス分離を提供するために、SELinux Targeted ポリシーで使用される主要なパーミッション制御方法は Type Enforcement です。すべてのファイルとプロセスにはタイプのラベルが付いています。タイプはプロセスの SELinux ドメインを定義し、ファイルの SELinux タイプを定義します。SELinux ポリシールールは、タイプにアクセスするドメインであるか、別のドメインにアクセスするドメインであるかにかかわらず、タイプが相互にアクセスする方法を定義します。アクセスは、それを許可する特定の SELinux ポリシールールが存在する場合にのみ許可されます。
以下の例では、
/var/www/html/ ディレクトリーに新しいファイルを作成し、親ディレクトリー (/var/www/html/) からhttpd_sys_content_t タイプを継承したファイルを示しています。
- 以下のコマンドを入力して、
/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
~]$ ls -dZ /var/www/html drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、/var/www/html/にhttpd_sys_content_tタイプのラベルが付けられていることを示しています。 - root で
touchユーティリティーを使用して新規ファイルを作成します。touch /var/www/html/file1
~]# touch /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを入力して 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 /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ls -Z コマンドは、
httpd_sys_content_t タイプのラベルが付けられた file1 を表示します。SELinux を使用すると、httpd はこのタイプでラベル付けされたファイルを読み取ることができますが、Linux の権限で書き込みアクセスが許可されている場合でも書き込みはできません。SELinux ポリシーは、httpd_t ドメイン (httpd が実行されている場所) で実行中のプロセスが読み取りと書き込みを実行できるタイプを定義します。これは、プロセスが別のプロセスによって使用されるファイルにアクセスできないようにするのに役立ちます。
たとえば、
httpd は、httpd_sys_content_t タイプ (Apache HTTP サーバー向け) のラベルが付いたファイルにアクセスできますが、デフォルトでは、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_rw_content_tタイプを使用して、httpd_sys_script_exec_tタイプのラベルが付いたスクリプトによる読み取りと書き込みの対象となるファイルにラベルを付ける必要があります。 httpd_sys_ra_content_t- このタイプのラベルが付いたファイルは、
httpd_sys_script_exec_tタイプのラベルが付いたスクリプトにより追加できますが、その他のタイプのスクリプトにより変更することはできません。httpd_sys_ra_content_tタイプを使用して、httpd_sys_script_exec_tタイプのラベルが付いたスクリプトによる読み取りと追加を行うファイルに、ラベルを付ける必要があります。 httpd_unconfined_script_exec_t- このタイプでラベル付けされたスクリプトは、SELinux の保護なしで実行されます。その他のオプションをすべて使い切った後、複雑なスクリプトにはこのタイプのみを使用してください。
httpdまたはシステム全体の SELinux 保護を無効にするのではなく、このタイプを使用することが推奨されます。
注記
httpd で利用可能なタイプの詳細を確認するには、以下のコマンドを入力します。
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
grep httpd /etc/selinux/targeted/contexts/files/file_contexts
~]$ grep httpd /etc/selinux/targeted/contexts/files/file_contexts
手順13.1 SELinux コンテキストの変更
ファイルおよびディレクトリーのタイプは、chcon コマンドで変更できます。chcon で行った変更は、ファイルシステムの再ラベル付けや restorecon コマンドでは存続しません。SELinux ポリシーは、ユーザーが任意のファイルの SELinux コンテキストを変更できるかどうかを制御します。以下の例では、
httpd が使用する新しいディレクトリーと index.html ファイルを作成し、そのファイルおよびディレクトリーにラベルを付けて、それらに httpd がアクセスできるようにします。
mkdirユーティリティーを root として使用して、httpdで使用されるファイルを保存するためのトップレベルのディレクトリー構造を作成します。mkdir -p /my/website
~]# mkdir -p /my/websiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - file-context 設定のパターンに一致しないファイルおよびディレクトリーには、
default_tタイプのラベルが付けられます。このタイプは、制限のあるサービスからはアクセスできません。ls -dZ /my drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /my
~]$ ls -dZ /my drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /myCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 -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.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
chcon の詳細は、「一時的な変更: chcon」 を参照してください。
semanage fcontext コマンド (policycoreutils-python パッケージにより semanage が提供される) を使用して、再ラベル付けおよび restorecon コマンドに持続するラベル変更を行います。このコマンドは、file-context 設定に変更を加えます。次に、file-context 設定を読み取る restorecon を実行してラベルの変更を適用します。以下の例では、
httpd が使用する新しいディレクトリーと index.html ファイルを作成し、そのディレクトリーとファイルのラベルを永続的に変更して、httpd が使用できるようにします。
mkdirユーティリティーを root として使用して、httpdで使用されるファイルを保存するためのトップレベルのディレクトリー構造を作成します。mkdir -p /my/website
~]# mkdir -p /my/websiteCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。
semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"
~]# semanage fcontext -a -t httpd_sys_content_t "/my(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow "/my(/.*)?"式は、ラベルの変更がmy/ディレクトリーと、その下のすべてのファイルおよびディレクトリーに適用されることを意味します。 - root で
touchユーティリティーを使用して、新規ファイルを作成します。touch /my/website/index.html
~]# touch /my/website/index.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root で以下のコマンドを入力し、ラベルの変更を適用します (restorecon は、手順 2 の semanage コマンドで変更された file-context 設定を読み取ります)。
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
~]# 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:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
semanage の詳細は 「永続的な変更 - semanage fcontext」 を参照してください。