Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.2. 問題の原因トップ 3

以下のセクションでは、問題の原因のトップ 3 を説明します。これらは、ラベリングの問題、ブール値およびサービスのポートの設定、SELinux ルールの展開、です。

8.2.1. ラベリングの問題

SELinux 実行中のシステム上では、すべてのプロセスとファイルにセキュリティー関連の情報を含むラベル付けがされます。この情報は、SELinux コンテキストと呼ばれます。このラベルが間違っていると、アクセスは拒否されます。アプリケーションのラベリングが間違っていると、移行先のプロセスにも正しいラベルがないことになり、結果として SELinux がアクセスを拒否することになりかねません。さらにはこのプロセスが、間違ったラベルのファイルを作成することにもなります。
一般的なラベリングの問題は、非標準のディレクトリーをサービスに使う場合に起こります。例えば、Web サイトに /var/www/html/ を使うのではなく、管理者は /srv/myweb/ を使いたかったとします。Red Hat Enterprise Linux 6 では、/srv/ ディレクトリーは var_t タイプでラベル付けされます。作成されたファイルとディレクトリーおよび /srv/ はこのタイプを継承します。また、(/myserver/ のような)新規作成のトップレベルのディレクトリーも default_t タイプでラベル付けされます。SELinux は、Apache HTTP Server (httpd) がこれら両方のタイプにアクセスできないようにします。アクセスを許可するには、/srv/myweb/ にあるファイルが httpd にアクセス可能であることを SELinux が認識している必要があります。
~]# semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
この semanage コマンドは、/srv/myweb/ ディレクトリー (およびその下にある全ファイルとディレクトリー) のコンテキストを SELinux ファイル設定に追加します[12]semanage コマンドはコンテキストを変更しません。Linux root ユーザーで restorecon コマンドを実行し、変更を適用します。
~]# restorecon -R -v /srv/myweb
ファイルコンテキスト設定へのコンテキスト追加に関する詳細情報は、「永続的な変更: semanage fcontext」 を参照してください。

8.2.1.1. 正しいコンテキストとは?

matchpathcon コマンドは、ファイルパスのコンテキストをチェックし、そのパスのデフォルトラベルと比較します。以下の例では、間違ったラベル付けがされているファイルを含んだディレクトリー上での matchpathcon の使用を説明しています。
~]$ matchpathcon -V /var/www/html/*
/var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
この例では、index.html および page1.html ファイルは user_home_t タイプでラベル付けされています。このタイプは、ユーザーのホームディレクトリーで使われるものです。mv コマンドを使ってファイルをホームディレクトリーから移動すると、ファイルに user_home_t タイプのラベル付けがされます。このタイプはホームディレクトリーの外にあってはならないので、restorecon コマンドを使って、ファイルを正しいタイプに戻します。
~]# restorecon -v /var/www/html/index.html 
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
あるディレクトリー下の全ファイルのコンテキストを復元するには、-R を使います。
~]# restorecon -R -v /var/www/html/
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
matchpathcon の詳細例に関しては、「デフォルト SELinux コンテキストのチェック」 を参照してください。


[12] /etc/selinux/targeted/contexts/files/ 内のファイルは、ファイルおよびディレクトリーのコンテキストを定義します。このディレクトリー内のファイルは restoreconsetfiles が読み取り、ファイルとディレクトリーをデフォルトのコンテキストに復元します。