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


75

Я знаю, що це питання задають багато, але рішення, яке я бачив, не працювало для мене.

У мене включений лише один віртуальний хост, і я намагаюся дозволити доступ до папки, яка не знаходиться під корінцем документа

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. Будь-які ідеї?

Версія PS Ubuntu - 14.04, Apache - 2.4.7, а я не редагував інші файли конфігурації.



Я робив усе, що там запропонували, як я писав, і це не допомагає
Йотам

Будь-який шанс у вас встановлений /homeз включеним ACL? (в кінці дозволу є знак "+", якщо це так (перевірити ls -l))
Polosson,

Ні, я цього не робив. Зараз я запускаю Apache під своїм користувачем, тому він працює, але я хотів би запустити його під іншим користувачем з міркувань безпеки.
Йотам

Я вперше використовую Linux. Я завантажив версію Ubuntu 14.04 LTE. Я зіткнувся з тією ж проблемою. Хто-небудь може допомогти, будь ласка?
Імдад

Відповіді:


95

Зробіть chmod +xна своєму користувачеві dir та перезапустіть apache. 755 дозволів має працювати. У мене були проблеми з 644 .


6
Дійсно, і для подвійної перевірки дозволів на файли та каталоги, якщо вони є, ви можете використовувати namei -m /home/youruser/public_html/yourfile.extабо спробувати people.apache.org/~igalic/hacks/parsepath
Junior M

2
Щоб уточнити, будь-який каталог, який ви бажаєте прочитати Apache, повинен бути читабельним для користувача Apache. Швидше за все, ваша домашня папка користувача не належить вашому користувачеві та групі, для цього вам потрібно встановити 755 дозволів /home/usernameдля доступу до неї з apace.
ruuter

У мене була проблема на OSX Mac OS High Sierra, і це рішення працювало на мене. Не потрібно було навіть перезапускати Apache.
пішов

Після годин пошуку виявляється, що дозволи повинні бути правильними і для батьківських каталогів DocumentRoot. Дуже дякую . До речі, для цього не потрібно перезапускати Apache
Бухгалтер

27

Якщо у випадку вибору проблеми з selinux, а не просто її відключення, ця сторінка і ця сторінка дають команду надати доступ:

chcon -R -t httpd_sys_content_t ~/public_html/

1
Я був впевнений, що це моє питання. Чорт CentOS! Thx для команди, працює чудово.
Бальміпур

2
дякую, просто довелося замінити ~/public_html/частину кореневою каталогом вмісту, який я намагався обслуговувати.
trpt4him

chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(у моїй ситуації)
cssyphus

Виявлений selinux не може працювати з простими хомедірами, і потрібна була лише одна з цих функцій, а інша була необов'язковою. Дякую за нагадування про виправлення - після обов'язкового періоду повторного тестування з кожним новим випуском та розчарування, я зазвичай просто зламаю це у старті. Тепер для systemd.
користувач2066657

17

Можливо, у вас включений selinux. Спробуйте

getenforce

Якщо на ній відображається "Насилення", спробуйте

setenforce 0

і спробуйте, якщо це вирішить вашу проблему.


4
Не вимикайте SELinux як виправлення. Вирішіть проблеми SELinux шляхом переназначення портів або встановлення булей.
Сіріде

1
Ця відповідь допомагає визначити, що проблема пов’язана з SELinux. Але відключати його не рекомендується.
Rajkumar R

15

Я зіткнувся з тією ж проблемою, після годин спроб я знайшов рішення, яке точно вирішує проблему:

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

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

Namei утиліти можна використовувати, щоб допомогти знайти проблеми з дозволами, перерахувавши дозволи до кожного компонента шляху:

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

У моєму випадку каталог на моєму шляху має дозвіл 700, це викликає проблему. Після зміни його на 701 проблема була вирішена.


1
Посилання тут корисне, оскільки воно пояснює проблему: В одному з вузлів шляху до каталогу відсутні дозволи доступу. Використовуйте команду "namei", щоб знайти це, а потім "chmod" на 755.
user3751385

Це пояснює справжню причину, а також рішення. спасибі
Емдадул Савон

1

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

Після того, як я запустив цю команду на хост і повторно розгорнувся, я був добре:

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

Я зіткнувся з цією проблемою, але з дивним ефектом, який я можу chmodабо chownвсередині контейнера, і це пригнічує помилки Apache 403 на деякий час, лише щоб відновити деякий час пізніше. Наскільки я не можу сказати, немає перезапуску втручаного контейнера чи інших істотних змін, які могли б стати причиною цього. Оскільки я справді працює 16.04, я спробував встановити цей двійковий файл, і мої 403 зараз перебувають у страху. Я буду пильно стежити за цим, і дякую!
півзахисник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.