Я знаю, что этот вопрос часто задают, но решения, которые я видел, не сработали для меня.
У меня включен только один виртуальный хост, и я пытаюсь разрешить доступ к папке, которая не находится в корневом каталоге документов
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Alias /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-data
export 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
. Есть идеи?
П.С. Версия Ubuntu 14.04, Apache 2.4.7, и я не редактировал другие файлы конфигурации.
Выполните chmod + x
в своем пользовательском каталоге и перезапустите apache. 755 разрешений должны работать. У меня были проблемы с 644 .
Возможно, у вас включен selinux. Попробуйте
getenforce
. Если отображается "Enforcing", попробуйте
setenforce 0
и попробуйте, если это решит вашу проблему.
Если в случае с 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 проблема была решена.
У меня возникла эта проблема, когда я пытался запустить apache в контейнере докеров на хосте Ubuntu 16.04, который вместо этого использовал ядро 4.4. of 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
принадлежит к группе пользователей по умолчанию.)
Это имеет значение, когда есть несколько пользователей, и важно, чтобы пользователи не имели доступа к домашним папкам друг друга.