Apache: доступ запрещен, поскольку разрешения на поиск отсутствуют

Я знаю, что этот вопрос задают часто, но решения, которые я видел, не сработали для меня.

У меня включен только один виртуальный хост, и я пытаюсь включить доступ к папке, которая не находится в корне документа

ServerAdmin webmaster@localhostDocumentRoot /var/www/htmlAlias /movies /home/username/Videos/Movies<Directory /home/username/Videos/Movies/>    Options Indexes FollowSymLinks    AllowOverride None    Require all granted</Directory>

Я установил /etc/apache2/envvars следующим образом

export APACHE_RUN_USER=www-dataexport APACHE_RUN_GROUP=public

Я убедился, что /home/username/Videos/ и его вложенные папки принадлежат username:public, установил разрешения на 777 (после того, как 775 не сработало) и убедился, что пользователь www-data принадлежит к группе public.

Теперь, когда я перехожу к http://localhost/movies Я получаю

[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path

Но когда я установил /etc/apache2/envvars для запуска Apache под username (мое собственное имя пользователя) все работает нормально. Проблема связана с разрешениями, но я не вижу, как это сделать в моем случае; особенно когда я устанавливаю разрешения на 777. Есть какие-нибудь идеи?

P.S. Версия Ubuntu - 14.04, Apache - 2.4.7, и я не редактировал другие файлы конфигурации.

Сделайте chmod +x в вашем каталоге пользователя и перезапустите apache. 755 разрешения должны работать. У меня были проблемы с 644.

Если в случае с selinux проблема, вместо того, чтобы просто отключить его, эта страница и эта страница дайте команду для предоставления доступа:

chcon -R -t httpd_sys_content_t ~/public_html/

Я столкнулся с той же проблемой, после нескольких часов попыток я нашел решение, которое точно решает проблему:

https://wiki.apache.org/httpd/13PermissionDenied

По сути, сервер Apache требует не только разрешений на чтение для всех файлов, которые он обслуживает, но и разрешений на выполнение для всех каталогов в пути вашего виртуального хоста.

Утилита namei может быть использована для поиска проблем с разрешениями путем перечисления разрешений вдоль каждого компонента пути:

namei --modes /usr/local/apache2/htdocs/foo/bar.html

В моем случае каталог в моем пути имеет разрешение 700, это вызывает проблему. После изменения его на 701 проблема была решена.

Возможно, у вас включен selinux. Попробуй

getenforce

Если он показывает "Принудительное исполнение", попробуйте

setenforce 0

и попробуйте, исправит ли это вашу проблему.

Я столкнулся с этой проблемой, когда пытался запустить apache в контейнере docker на хосте Ubuntu 16.04, который использовал ядро 4.4 вместо 4.10.

Как только я запустил эту команду на хосте и повторно развернул, все было в порядке:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 

Вместо предоставления доступа к домашним каталогам ~ и ~/public_html (напр. около chmod 755 ...) для всех пользователей альтернативой является добавление пользователь apache2 (обычно www-data для Ubuntu) в личную группу текущего пользователя (группа с тем же именем, что и имя пользователя):

sudo adduser www-data $(whoami)sudo service apache2 reload

(предполагая ~/public_html принадлежит к группе пользователей по умолчанию.)

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

возможный дубликат Как мне предоставить пользователю www-data доступ к папке в моей домашней папке?

Я впервые использую Linux. Я скачал версию Ubuntu 14.04 LTE. Я сталкиваюсь с той же проблемой. Кто-нибудь может помочь, пожалуйста?

Есть ли шанс, что вы смонтировали свой “/home” с включенным ACL? (в конце битов разрешения есть знак “+”, если это так (проверьте с помощью ls -l))

Нет, я этого не делал. Прямо сейчас я запускаю Apache под своим пользователем, так что он работает, но я бы хотел запустить его под другим пользователем по соображениям безопасности.

Я сделал все, что они там предложили, как я уже писал, и это не помогает