LoginSignup
7

More than 5 years have passed since last update.

ApacheでSELinuxに邪魔されて403Forbiddenになった

Posted at

はじめに

SELinux稼働中のサーバにてApacheでパパっとファイルの公開をしようとしたらちょっと躓いた。
SELinuxはこれまで思考停止で無効化(Disabled)にしていたのでメモ。

環境

  • Red Hat Enterprise Linux6.8(RHEL6)
  • Apache 2.2.15
  • SELinuxはOn(Enforcing)

事象

Apacheの設定はほぼほぼ初期設定のままだったので、DocmentRootも/var/www/htmlのまま。
ここに1つディレクトリ(/var/www/html/test)を掘って「http://hoge.co.jp/test 」で以下のように配置したファイル公開をしようとした。

# ll
total 28
-rw-r--r--. 1 root root 6949 Apr  2 15:21 file1.txt
-rw-r--r--. 1 root root 7127 Apr  2 15:21 file2.txt
-rw-r--r--. 1 root root 7123 Apr  2 15:19 file3.txt

普通だったら、あのよくある画面でファイルが見えるようになるはずなのだが、何も表示されない…
あのよくある画面にはなるのだが、肝心のファイルが全く見えない…

そこで、URLでファイルに直アクセスしたらどうなるのだろうと試した。
ブラウザで「http://hoge.co.jp/test/file1.txt 」としてアクセス。

403 Forbidden が表示される。。

原因

結論から言うと/var/www/html以下に置いたファイルには適切なラベル付けが必要なのだが(SELinuxのセキュリティポリシー)、それが今回不足していた。
Apacheのerror_logには「Permission Denied」が記録されており、確かに権限不足関連のトラブルっぽい。

説明を端折ってしまっていたが、今回配置した3つのファイルは別サーバからscpコマンドで別ディレクトリへ一旦持ってきてmvで/var/www/html/testディレクトリへ持ってきていた。
それがまずかったらしく(特にmv?)、各ファイルには適切なラベル(httpd_sys_content_t)が付与されていなかった。

例えば/tmpで作ったファイルを/var/www/html/testへ配置し、SELinuxが付与するラベルを表示するとこんな感じになる。

# ll -Z
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 hogehoge

lsコマンドに-Zオプションをつけることでファイルに付与されたラベルを確認できる。
今回は「user_tmp_t」が付与されている。(←これが今回の原因)

正しくはしれっと記載してあるが「httpd_sys_content_t」というラベルが付与されている必要があるらしい。

対処法

大きく2つある。
1. SELinuxを無効化する
2. 正しいラベルに付け替える

1についてはそりゃそうだろという感じなのでここでは2について説明する。

結論としてはrestoreconコマンドを使用して各ファイルのラベルを適切なものに付け替える事が可能なので以下のようにするとよい。

もう1度現在のラベルを確認しておくと

# ll -Z
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 hogehoge

ここで以下のようにする。

# restorecon hogehoge

再度ラベルを確かめてみる。

# ll -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 hogehoge

ラベルが「httpd_sys_content_t」に書き換わっていることが分かる。
この状態であれば、403 Forbiddenを食らうことなく正しくファイルを閲覧することができる。

最後に

Apacheに限らずPermission Denied系のエラーとなりファイルのオーナやパーミッションの設定をどう見直しても改善しない場合はSELinuxによるセキュリティを疑ってみる。
あと、どうやらmvコマンドは元々のラベルを引き継いでしまうのでcpコマンドの方がいいらしい。

「もう思考停止でDisabledにするあの時間は終わって、君もSELinuxと向き合う時なんだ」(今更過ぎる)

参考文献

ApacheでSELinuxが原因で403 Forbiddenエラー
SELinuxについてのメモ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7