Я использовал Webmin для создания следующего виртуального хоста:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
И при перезапуске Apache я получаю
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
Дело в том, что каталог абсолютно существует. Я смотрю прямо на это. pwd
показывает мне, что это мой текущий каталог, и т. д. Это не так сложно, чтобы написать это правильно. Я не могу найти другие ошибки или предупреждения в журналах httpd. apache: apache владеет каталогом и всеми подкаталогами / файлами. Здесь нет никаких символических ссылок или чего-либо еще. Чего мне не хватает или на что еще мне посмотреть, чтобы определить, почему это так?
ОС CentOS 6.0
apache-2.2
centos
Джейк Уилсон
источник
источник
DocumentRoot
, что может дать вам некоторое представление о том, что видит веб-сервер. Вы также можете проверить другие каталоги по пути, хотя, если он действительно под ними,/var/www/
проблем не должно бытьОтветы:
Первое, что пришло мне на ум, - имеет ли Apache разрешение на доступ к этому каталогу?
Кроме того, это: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
источник
apache:apache
, однако я перешел по этой ссылке (то есть по SO по какой-то причине?), И действительно проблема была в SELinux. SELinux вызывает больше проблем, чем хорошо.setenforce 0
исправил ее, но, глядя на разрешенияls-laZ
, символическая ссылка имеет те же разрешения, что и другие файлы, к которым она может получить доступ, кроме chmod. Файлы -rw-r - r--, а символическая ссылка - lrwxrwxrwx. Может ли это быть причиной того, что он не работает с Setenforce 1?Вот учебный подход к делу SELinux:
Узнайте, активен ли SELinux:
Если это так, некоторые сравнительные проверки могут помочь. Например, на сервере установлен DocumentRoot по умолчанию
/var/www/html
, но мы хотим, чтобы он был где-то еще, например/path/to/document/root
.Если SELinux не активно возится с ресурсом,
ls -dZ
в каталоге будет показано что-то вроде:С другой стороны, если применяются контексты SELinux, это
ls -dZ
выглядит примерно так:Если мы сравним с рабочим DocumentRoot, это будет выглядеть примерно так:
_r
И_t
относятся к-r
(--role
и-t
(--type
) аргументыchcon
Вот сокращенная страницы человека.:На первый взгляд может показаться, что следующее работает, но может и не работать.
Если веб-сервер по-прежнему не видит DocumentRoot, обратите внимание, что контекст имеет значение вплоть до корня:
На этом этапе веб-сервер может видеть каталог.
Да, я научился трудному пути сегодня вечером.
ПРИМЕЧАНИЕ: использование chcon концептуально имеет недостаток в документации RedHat ( 5.6.1. Временные изменения: chcon ), которая гласит:
Используйте semanage и restorecon для внесения более постоянных изменений. Краткий пример:
Что касается restorecon , обратите внимание, что -F требуется для воздействия на весь контекст (т. Е. На пользователя и тип). Кроме того, -R означает делать изменения рекурсивно. Аргументы -v или -p могут показывать прогресс как многословно, так и кратко. Используйте -FRnv, чтобы увидеть, что произойдет, без внесения каких-либо изменений.
После того, как semanage используется таким образом, можно просмотреть локальные изменения безопасности с помощью команды вроде:
Результаты экспорта semanage могут быть сохранены и использованы при импорте semanage, чтобы упростить применение набора изменений к различным системам.
ПРИМЕЧАНИЕ. Этот ответ предоставляет базовый контекст типа для сайта. Безопасность может быть гораздо более гранулированной. Например, посмотрите список типов, которые могут применяться к страницам веб-сервера, с помощью команды, например:
ПРИМЕЧАНИЕ. Такие утилиты, как semanage и seinfo, могут быть не установлены по умолчанию. По крайней мере, в некоторых дистрибутивах требуемые пакеты могут быть названы примерно так:
источник
Это звучит как SELinux. Я бы посоветовал вам поработать с ним. Посмотрите в каталоге / var / log / audit для подтверждения.
В худшем случае вы всегда можете отключить selinux, как отмечалось ранее, но я предлагаю вам поработать с ним. Например, если бы я создал каталог для использования с Apache, у него не было бы правильного контекста, как отмечено здесь.
Так что, если это произойдет, я просто применяю контекст из другого каталога, который в данном случае является html:
источник
Используйте эту команду в корне, чтобы изменить контекст безопасности «httpd_sys_content_t», который позволяет выполнять Apache.
Используйте
ls -dZ /var/www/whatever
для просмотра сведений о ролях безопасностиисточник