Вопрос или проблема
Я использую 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. Если у вас будут возникать дополнительные сложности, не стесняйтесь обращаться за помощью.