#html #linux #apache #webserver
#HTML #linux #apache #веб-сервер
Вопрос:
Я играю с веб-сервером и столкнулся со своеобразной проблемой. У меня совершенно новый веб-сервер Centos7 httpd (Apache).
Если выполнить эту последовательность:
sudo vi /var/www/html/ first.html
# enter "<p>hello</p>" and save
И нажмите {IP Address}/first.html
, он работает как ожидалось и отображает «привет» в браузере.
Но когда я делаю это:
sudo vi /home/centos/second.html
# enter "<p>hello</p>" and save
sudo mv /home/centos/second.html /var/www/html/second.html
И нажмите {IP Address}/second.html
, чтобы вернуть 403 Forbidden You don't have permission to access/second.html on this server.
Я выполнил ls -al
с этим в качестве вывода:
-rw-r--r--. 1 root root 13 Aug 18 23:33 first.html
-rw-r--r--. 1 root root 13 Aug 18 23:34 second.html
И я выполнил шестнадцатеричный дамп, чтобы подтвердить, что каждый бит был одинаковым для следующего вывода:
[centos@ip-172-31-10-192 html]$ hexdump -C first.html
00000000 3c 70 3e 68 65 6c 6c 6f 3c 2f 70 3e 0a |<p>hello</p>.|
0000000d
[centos@ip-172-31-10-192 html]$ hexdump -C second.html
00000000 3c 70 3e 68 65 6c 6c 6f 3c 2f 70 3e 0a |<p>hello</p>.|
0000000d
Как вы можете видеть, в самих файлах нет различий. Теперь я предположил, что каким-то образом процесс создания редактирует какой-то файл конфигурации, разрешающий доступ к, first.html
но не second.html
поэтому я запустил grep -rin "first" /etc/httpd/
и grep -rin "second" /etc/httpd/
и не нашел соответствующего вывода. Так что, черт возьми, происходит? Почему html-файл, созданный через vi
then mv
, обрабатывается иначе, чем идентичный файл, созданный непосредственно через vi
?
Ответ №1:
Итак, я нашел решение, а также в чем заключалась проблема, прежде чем я нажал отправить по этому вопросу, но хотел передать это кому-либо еще.
Проблема возникла из-за того, что я использовал mv
для перемещения существующего файла на веб-сервер вместо cp
того, который создал бы новый файл.
Заслуга Тревора вhttps://forums.centos.org/viewtopic.php?t=6834 .
Проблема возникает при переносе чего-либо из одного места в другое. При перемещении сохраняется контекст selinux оригинала, поэтому, если вы удаляете что-либо в / home или / tmp, ему присваивается контекст selinux, соответствующий его местоположению. Теперь вы отправляете это в /var/ www / html, и он принимает контекст, говорящий, что он принадлежит / tmp или / home вместе с ним, и httpd не разрешен политикой для доступа к этим файлам.
Если вы копируете файлы, а не сохраняете их, контекст selinux назначается в соответствии с местоположением, в которое вы копируете, а не откуда оно поступает. Запуск restorecon возвращает контекст к значению по умолчанию и исправляет его тоже.
Комментарии:
1. Чтобы решить эту проблему, просто запустите
restorecon -r /var/www/html
.