ドキュメントルートに mvコマンドでファイルを持ってくると、ブラウザからそのファイルにアクセスできない問題(SELinuxが原因の場合)
※当サイトにはプロモーションが含まれています。
公開日:
更新日:

忘れがちなのでメモしておきます。
環境
- OS: CentOS 7
/var/www/以下にディレクトリが作ってあり、そこをドキュメントルートにしている。- SELinuxを有効にしている。
問題となる現象
- ドキュメントルートに mvコマンドでファイルを持ってくると、そのファイルにブラウザからアクセスできない。
原因
- mvしたファイルのセキュリティコンテキストが適切でないために、HTTPサーバのプロセスがこのファイルへアクセスしようとしても SELinuxが止めてしまう。
解決方法
問題となっているファイルに対して、以下のコマンドを実行するだけです。
$ sudo restorecon path/to/file
- これにより、ファイルのセキュリティコンテキストを、HTTPサーバのプロセスがアクセスできるセキュリティコンテキストに変更してくれます。
- restoreconコマンドは、対象となるパスに設定されている(ファイルそのものではなく、あくまでパスに対して設定されている)セキュリティコンテキストを適用してくれるコマンドです。
メモ
-
CentOS 7 ではデフォルトの状態で、
/var/www/以下に HTTPサーバープロセス用のタイプ(httpd_sys_content_t)がマッピングされているため、上記のようにrestoreconコマンドを実行すれば、セキュリティコンテキストを修正することができます。- この設定は、
/etc/selinux/targeted/contexts/files/file_contextsに記述されていますし、semanage fcontext --listコマンドでも確認することができます。 - 具体的には、以下のようにマッピングされています。
/var/www(/.*)? system_u:object_r:httpd_sys_content_t:s0 - この設定は、
-
もしこのようなマッピングがされていないパスであれば、
chconコマンドで 明示的にファイルのセキュリティコンテキストを変更する必要があります。
例
(1) mvコマンドで foo.phpファイルを移動してきたところ
- lsコマンドに -Z オプションを指定すると、各ファイルのセキュリティコンテキストが表示できます。
- セキュリティコンテキストのフォーマットは、「ユーザー:ロール:タイプ:レベル」となっています。

foo.phpファイルのセキュリティコンテキストを見ると、「unconfined_u:object_r:user_home_t:s0」となっています。
(2) restoreconコマンドでセキュリティコンテキストを復元したところ

foo.phpファイルのセキュリティコンテキストが、「unconfined_u:object_r:httpd_sys_content_t:s0」となりました。user_home_tがhttpd_sys_content_tに変わっています。
最終更新日: 2016-07-15