Apacheエラー「Permission denied: file permissions deny server access」の原因と解決方法
CentOS 6でApacheを起動し、PDFファイルをドキュメントルート直下に設置し、
http://192.168.0.20/test.pdf
といったURLでブラウザ(Windows 7のInternet Explorer 11)でアクセスすると、Forbiddenとなり、閲覧できない、ということがあった。
ドキュメントルート直下のファイルのパーミッションを確認すると、以下のようになっていた。
-rw-r--r--. 1 apache apache 20 4月 23 04:00 2015 index.html
-rw-r--r--. 1 apache apache 13M 7月 10 03:34 2015 test.pdf
index.htmlは、問題なく閲覧できたが、test.pdfは閲覧できず、Forbiddenとなる。
index.htmlファイルとtest.pdfファイルは、同じユーザ、同じグループ、同じパーミッションであるにもかかわらず、test.pdfが閲覧できない。
Apacheのエラーログを見ると、以下のようなエラーが記録されていた。
[Fri Jul 10 03:53:11 2015] [error] [client 192.168.0.8] (13)Permission denied: file permissions deny server access: /var/www/html/test.pdf
うーん。
再考。
index.htmlは、問題なく閲覧できたが、test.pdfは閲覧できず、Forbiddenとなる。
これがヒントっぽい。
test.pdfの拡張子を「.pdf」から「.html」に変更してアクセスしてみる。
http://192.168.0.20/test.html
拡張子を「.pdf」から「.html」に変更すると、Forbiddenとならずに、ファイル閲覧ができてしまった。
どうやら、何かが、ファイルの拡張子の種類によって、閲覧許可・不許可の制限をしているようだ。
何だか心当たりがあるようなないような・・・さっぱり思いつかなかったので、インターネットで色々調べていると、以下のサイトを発見。
カタカタブログ
ApacheでSELinuxが原因で403 Forbiddenエラー
こちらのサイトのおかげで、SELinuxが邪魔をしているのではないかと気づく。
あれ、いつも無効にしていたつもりなんだけれど、まさか、有効状態になっているのかな。
[root@test html]# getenforce
Enforcing
SELinuxが有効状態のようだった・・・。
SELinuxを一時的に無効化してみる。
[root@test html]# setenforce 0
[root@test html]# getenforce
Permissive
PDFファイルに、「.pdf」拡張子でアクセスしてみる。
http://192.168.0.20/test.pdf
Forbiddenとならずに、普通に閲覧できるようになった!
忘れないうちに、OSを再起動してもSELinuxが常に無効化状態となるように設定を変更しておく...。
[root@test html]# vi /etc/sysconfig/selinux
#SELINUX=enforcing ←行頭に「#」を付ける
SELINUX=disabled ←無効化記述を追加する
過去にもSELiuxを無効化するのを忘れて、はまってしまったことがあったが、久しぶりにはまってしまった・・・。
仕事ではなく、自宅のノートPCで遊んでいてはまったのだから、まあ、いいか。
寝よう。