Fedora 23 で Apache を新規セットアップすると 500 エラーが発生します。1 つのファイルは読み込まれますが、もう 1 つのファイルは読み込まれません。

Fedora 23 で Apache を新規セットアップすると 500 エラーが発生します。1 つのファイルは読み込まれますが、もう 1 つのファイルは読み込まれません。

そうですね、これは少し奇妙だと思います。

そのため、Apache に関する私の経験のほとんどは、Ubuntu サーバーのインストールに関するものでした。しかし、サーバーのハードドライブが壊滅的な障害に見舞われた後 (幸い、すべてのデータを回復できました)、最新の Fedora サーバーに切り替える機会を得ました。これにはいくつかの理由がありましたが、大きな理由は Ubuntu Server インストーラーの問題で、具体的にはワイヤレス キーボードを認識できず、前の有線キーボードが壊れていました。

とにかく、httpd (apache)、php、postgresql、php-pgsql をインストールしました。そして、古いサイトのページをすべて新しい Web ディレクトリ (/var/www/html/) に移動しました。すると、500 エラーが発生しました。

思い切ってゼロから始めることにしました。Web ページを横 (/var/www/html2/) に移動し、テスト用の小さなページを作成しました。基本的な HTML のみで、特別なことは何もせず、PHP も使用せず、基本的な内容だけです。

<html>
<head>
<title>HOME!!!</title>
</head>
<body>
<h1>THIS WORKS!!!</h1>
</body>
</html>

問題なく読み込まれました。

その後、すべてのページをメイン フォルダーに戻しました (今のところ .htaccess は除きます)。作成したページは問題なく動作しました。問題は PHP にあると疑って、下部に PHP コードを少し追加しました。

echo 'hello';

うまくいきました。

ここから奇妙なことが起こります。自分のサイトの古い footer.php をこの小さなテスト ページに組み込んでみたのですが、そこで問題が発生します。フッターがまったく読み込まれないのです。

<?php include 'footer.php'; ?>

ページの残りの部分は読み込まれますが、フッターは読み込まれません。そこで、思いつきで、フッター ファイルのすべての内容を footer2.php という新しいファイルにコピーし、テスト ページが footer2.php を参照するように変更したところ、問題なく完全に読み込まれるようになりました。

ようやく何かいい方法が見つかったと思い、footer.php の権限を footer2.php と一致するように変更しました。それでもまだ読み込まれません。

何らかの理由で、footer.php は読み込まれませんが、footer2.php は読み込まれます。

それでその差はいくらですか?

これらのファイルはまったく同じです! 証拠は次のとおりです:

[blackwidower@Twilight html]$ md5sum footer*
257cbd773ed765deb5ad0015852cdf20  footer2.php
257cbd773ed765deb5ad0015852cdf20  footer.php
[blackwidower@Twilight html]$ ls -l footer*
-rw-rw-r--. 1 blackwidower blackwidower 1271 Feb  1 00:08 footer2.php
-rw-rw-r--. 1 blackwidower blackwidower 1271 Feb  1 00:08 footer.php

しかし、一方は読み込まれますが、もう一方は読み込まれません。

これらのファイルを分離できるさらなるデータを見つけるために何かできることはありますか?

参考までに、Apache の error_log を以下に示します。

[Mon Feb 01 00:14:15.160242 2016] [core:notice] [pid 1800] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Mon Feb 01 00:14:15.161310 2016] [suexec:notice] [pid 1800] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.7.2. Set the 'ServerName' directive globally to suppress this message
[Mon Feb 01 00:14:15.192180 2016] [auth_digest:notice] [pid 1800] AH01757: generating secret for digest authentication ...
[Mon Feb 01 00:14:15.192361 2016] [http2:warn] [pid 1800] AH02951: mod_ssl does not seem to be enabled
[Mon Feb 01 00:14:15.193015 2016] [lbmethod_heartbeat:notice] [pid 1800] AH02282: No slotmem from mod_heartmonitor
[Mon Feb 01 00:14:15.218713 2016] [mpm_prefork:notice] [pid 1800] AH00163: Apache/2.4.18 (Fedora) PHP/5.6.17 configured -- resuming normal operations
[Mon Feb 01 00:14:15.218762 2016] [core:notice] [pid 1800] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Feb 01 00:14:43.969957 2016] [:error] [pid 1801] [client 192.168.7.7:49878] PHP Fatal error:  Call to undefined function displayCopyrightInfo() in /var/www/html/footer2.php on line 13
[Mon Feb 01 00:14:44.086110 2016] [core:error] [pid 1802] (13)Permission denied: [client 192.168.7.7:49880] AH00035: access to /images/cc-by-nc-nd-88x31.png denied (filesystem path '/var/www/html/images/cc-by-nc-nd-88x31.png') because search permissions are missing on a component of the path, referer: http://192.168.7.2/index2.php
[Mon Feb 01 00:14:44.087064 2016] [core:error] [pid 1804] (13)Permission denied: [client 192.168.7.7:49882] AH00035: access to /images/valid-xhtml10-blue.png denied (filesystem path '/var/www/html/images/valid-xhtml10-blue.png') because search permissions are missing on a component of the path, referer: http://192.168.7.2/index2.php
[Mon Feb 01 00:14:44.087737 2016] [core:error] [pid 1806] (13)Permission denied: [client 192.168.7.7:49884] AH00035: access to /images/vcss-blue.png denied (filesystem path '/var/www/html/images/vcss-blue.png') because search permissions are missing on a component of the path, referer: http://192.168.7.2/index2.php
[Mon Feb 01 00:15:47.538488 2016] [:error] [pid 1808] [client 192.168.7.7:49890] PHP Warning:  include(footer.php): failed to open stream: Permission denied in /var/www/html/index2.php on line 7
[Mon Feb 01 00:15:47.538534 2016] [:error] [pid 1808] [client 192.168.7.7:49890] PHP Warning:  include(): Failed opening 'footer.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/index2.php on line 7

編集:

ある人のアドバイスに従って、ls -Z を実行しました。次のような結果が見つかりました。

unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/footer2.php
               system_u:object_r:fusefs_t:s0 /var/www/html/footer.php

そこで私は差分を見つけました。質問です。これは何を意味するのでしょうか、そして、どうすれば修正できるのでしょうか?

答え1

そこで私は差分を見つけました。質問です。これは何を意味するのでしょうか、そして、どうすれば修正できるのでしょうか?

ユーザー @Dirk が指摘したことを補足すると、SELinux はシステムのセキュリティを強化するために「コンテキスト」に依存するシステムであり、コンテキストは特定のファイルまたはディレクトリに対してどのようなアクションを実行できるか、またはファイルを何に使用できるかを説明します。この場合、 にはfooter2.phpのコンテキストがあるhttpd_sys_content_tため、ファイルは「http 目的footer.php" の場合、SELinux セキュリティ システムからアクセスできるようにするには、同じコンテキスト ラベルを追加するか、親ディレクトリのコンテキストを復元するだけです (ほとんどのシステムでは、デフォルトで、その/var/www場所のファイルは " のラベルに設定されています)。http 目的これに代わる方法として、SELinux を完全に無効にすることもできますが、これは良い方法ではありません。

それで、

ファイルにコンテキスト ラベルを (永続的に) 設定するにはfooter.php:

semanage fcontext -a -t httpd_sys_content_t /var/www/html/footer.php
restorecon /var/www/html/footer.php

親ディレクトリ (およびそのすべてのコンテンツ) に対しても同じ操作を実行できます。

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -R "/var/www/html(/.*)?"

詳細は以下をご覧ください。セキュリティ強化 Linux 向け Red Hat カスタマー ポータル

関連情報