Apache2 Отказ в доступе – доступ к / запрещен, так как отсутствуют права поиска на одном из компонентов пути

Вопрос или проблема

Я использую apache и столкнулся с проблемой разрешений на Ubuntu 21.04

Версия сервера: Apache/2.4.46 (Ubuntu)
Сервер построен:   2021-06-17T17:09:41

sudo apache2ctl configtest вернул Syntax OK

мои логи

[Чт Июл 22 14:08:49.553904 2021] [core:error] [pid 33685] (13)Permission denied: [client 127.0.0.1:41084] AH00035: доступ к / запрещен (путь файловой системы '/home/ivan/hosts') из-за отсутствия разрешений на поиск в компоненте пути
[Чт Июл 22 14:08:49.609382 2021] [core:error] [pid 33685] (13)Permission denied: [client 127.0.0.1:41084] AH00035: доступ к /favicon.ico запрещен (путь файловой системы '/home/ivan/hosts') из-за отсутствия разрешений на поиск в компоненте пути, referer: http://gpon-actual.local/

мой хост

<VirtualHost *:80>
    ServerName gpon-actual.local
    DocumentRoot /home/ivan/hosts/gpon-actual
    DirectoryIndex index.php
    ErrorLog ${APACHE_LOG_DIR}/gpon-actual-error.log
    CustomLog ${APACHE_LOG_DIR}/gpon-actual-access.log combined
    <Directory "/home/ivan/hosts/gpon-actual">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        Allow from All
    </Directory>
</VirtualHost>

Я выполнял различные предложения, но ни одно из них не помогло

chmod +x hosts
chmod +rx hosts
sudo chown -R $USER:$USER hosts
sudo chmod 777 -R hosts/

В моем /etc/apache2/sites-available/site.conf я добавил

это было раньше

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

и я просто добавил после этого дополнительное:

<Directory /home/ivan/hosts/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

какие идеи?

Недавно столкнулся с этим на Ubuntu 22.04, Apache 2.4.52. Исправление оказалось простым. Мне нужно было выполнить:

chmod +x /home/<ИМЯ_ПОЛЬЗОВАТЕЛЯ>

Просто установка 755 на /home/*/public_html не была достаточной.

Пользователь @John Heyer предложил правильное решение проблемы на Ubuntu 22.04. Мне также нужно было сделать следующее, чтобы приложение заработало:

 sudo chmod +x /home/
 sudo chmod +x /home/ubuntu/
 sudo chmod +x /home/ubuntu/my_laravel_site_folder/
 sudo chmod +x /home/ubuntu/my_laravel_site_folder/public/

И вот оно. Решение потенциальной головной боли.

Хотя приведенные выше ответы, безусловно, являются одним из способов решения этой проблемы, если вы находитесь в мультипользовательской системе, имейте в виду, что они открывают разрешение на поиск в вашей домашней директории (и подкаталогах к пути документа) для всех пользователей в системе. Более (несколько) безопасный способ состоит в том, чтобы изменить членство группы каталогов в пути на пользователя процесса apache2 – обычно www-data.

sudo chgrp www-data /home/ivan

Вам также нужно будет сделать это для всех компонентов пути к веб-директории документа, хотя обратите внимание, что разрешение на поиск обычно позволяет группе по умолчанию, так что нет необходимости в chmod.

Это также имеет последствия, хотя и менее ощутимые… по крайней мере, только группа www-data (которая обычно не используется никем с оболочкой входа) имеет разрешение на поиск в вашей домашней директории. Также теоретически могут быть другие последствия изменения группы каталога таким способом, но я не могу сразу придумать никаких (но некоторые процессы могут проверить группу и пожаловаться).

Другой вариант, который вы могли бы попробовать, это жесткая ссылка, которую ОС скрывает от всего, что к ней обращается (она выглядит как обычный каталог). Однако жесткие ссылки обычно не разрешены для каталогов, и есть много причин, почему это может не сработать (например, если каталог /home/ находится на другой файловой системе, чем источник ссылки). Однако, чтобы попробовать, вы бы сделали что-то похожее:

sudo ln -F /home/ivan/hosts /home/
sudo chgrp -R www-data /home/hosts

Затем установите DocumentRoot на /home/hosts/gpon-actual, если это сработало.

В конечном итоге я не уверен, что есть 100% удовлетворительный способ сделать это, так что если вам действительно нужно это сделать, просто имейте в виду недостатки. На самом деле может оказаться лучше установить DocumentRoot где-то еще, а затем создать символическую ссылку на это местоположение в вашей домашней директории… т.е. в конфигурации виртуального хоста:

DocumentRoot </var/www/hosts/gpon-actual>
....

и затем….

sudo mv /home/ivan/hosts /var/www/
sudo chgrp -R www-data /var/www/hosts
ln -s /var/www/hosts /home/ivan/

Ответ или решение

Проблема, с которой вы столкнулись, связана с недостаточными правами доступа, что приводит к ошибке Apache "Permission denied". Ваша конфигурация Apache и системные права доступа необходимы для нормальной работы веб-сервера. Давайте подробно рассмотрим, как решить вашу проблему.

Проблема

Сущность ошибки заключается в том, что Apache не может получить доступ к каталогу /home/ivan/hosts, так как отсутствуют нужные права поиска на одном из компонентов пути. Логи Apache ясно указывают на это:

(13)Permission denied: [client 127.0.0.1:41084] AH00035: access to / denied (filesystem path '/home/ivan/hosts') because search permissions are missing on a component of the path

Решение

Чтобы разрешить Apache доступ к указанному каталогу, выполните следующие шаги:

1. Проверьте и измените права доступа

Для проверки прав доступа исполните команду:

ls -ld /home /home/ivan /home/ivan/hosts

Вывод покажет права для каждого из каталогов. Убедитесь, что у родительских каталогов (например, /home и /home/ivan) есть права на выполнение (execute) для Apache. Права должны быть не менее rwx (то есть 755).

Если прав недостаточно, выполните следующие команды:

sudo chmod +x /home
sudo chmod +x /home/ivan

2. Проверьте права доступа к вашему каталогу

Каталог hosts должен иметь следующие права на выполнение и чтение:

sudo chmod 755 /home/ivan/hosts

Это позволит Apache читать и выполнять файлы в этом каталоге.

3. Измените владельца каталога (опционально)

Если вы хотите, чтобы Apache мог обращаться к вашему каталогу без изменением прав доступа для всех пользователей, измените группу владельца:

sudo chgrp -R www-data /home/ivan/hosts

Обратите внимание, что для изменения прав доступа на родительских каталогах достаточно наличие группы www-data.

4. Настройка конфигурации Apache

Убедитесь, что ваш виртуальный хост правильно настроен для работы с указанным каталогом. Обратите внимание на секцию <Directory> в вашем конфигурационном файле:

<Directory "/home/ivan/hosts/gpon-actual">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Это обеспечит нужные разрешения для доступа к файлам.

Заключение

Если после выполнения вышеперечисленных шагов проблема сохраняется, проверьте дополнительные настройки конфигурации Apache и наличие ошибок в логах. Используйте соответствующие команды для перезапуска Apache после внесения изменений:

sudo systemctl restart apache2

Теперь вы должны быть способны устранить проблему с доступом и запустить свой проект на Apache. Если у вас будут возникать дополнительные сложности, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...