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で遊んでいてはまったのだから、まあ、いいか。
寝よう。

前へ

CentOS 6にyum installでImageMagickをインストール

次へ

広島市内の市内電車(広電)で「的場町」電停から広島港(宇品)に移動