Ошибка 500 при новой установке Apache на Fedora 23. Один файл загружается, а другой нет

Ошибка 500 при новой установке Apache на Fedora 23. Один файл загружается, а другой нет

Ладно, я нахожу это немного странным.

Итак, большая часть моего опыта работы с Apache была связана с установкой Ubuntu server. Но после того, как жесткий диск моего сервера потерпел катастрофическую неудачу (с которой я, к счастью, восстановил все данные), я воспользовался возможностью перейти на последний сервер Fedora. На это было несколько причин, но самой большой из них были проблемы с установщиком Ubuntu Server, в частности, он не мог распознать мою беспроводную клавиатуру, а моя последняя проводная клавиатура сломалась.

В любом случае, я установил httpd (apache), php, postgresql и php-pgsql. А затем я переместил все страницы своего старого сайта в новый веб-каталог (/var/www/html/). Затем я получил ошибку 500.

Я решил ради забавы начать с нуля. Переместил свои веб-страницы в сторону (в /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

Но один загружается, а другой нет.

Могу ли я что-то сделать, чтобы найти дополнительные данные, которые могли бы разделить эти файлы?

Для справки, вот error_log apache:

[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(/.*)?"

Более подробную информацию вы можете найти наПортал клиентов Red Hat для Linux с улучшенной безопасностью.

Связанный контент