httpd, запрещающий доступ к файлам, не созданным в /var / www / html/

#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 .