Apache: odmowa dostępu, ponieważ brakuje uprawnień do wyszukiwania

75

Wiem, że to pytanie jest często zadawane, ale rozwiązania, które widziałem, nie działały dla mnie.

Mam włączony tylko jeden wirtualny host i próbuję umożliwić dostęp do folderu, który nie znajduje się w katalogu głównym dokumentu

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>

Ustawiam /etc/apache2/envvarsw następujący sposób

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

Upewniłem się, że / home / nazwa użytkownika / Wideo / i jego podfoldery są własnością username:public, ustawiłem uprawnienia na 777 (po 775 nie działało) i upewniłem się, że użytkownik www-datanależy do grupy public.

Teraz, kiedy przeglądam http://localhost/movies, dostaję

[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

Ale kiedy ustawiam /etc/apache2/envvarsuruchamianie Apache pod username(moją własną nazwą użytkownika) wszystko działa dobrze. Problem dotyczy uprawnień, ale nie widzę tego w moim przypadku; szczególnie gdy ustawię uprawnienia na 777. Jakieś pomysły?

Wersja PS Ubuntu to 14.04, Apache to 2.4.7 i nie edytowałem innych plików konfiguracyjnych.

Yotam
źródło
Zrobiłem wszystko, co tam zasugerowali, jak napisałem, i to nie pomaga
Yotam
Czy jest jakaś szansa, że ​​masz zamontowaną /homez włączoną ACL? (na końcu bitów uprawnień jest znak „+”, jeśli tak jest (sprawdź z ls -l))
Polosson
Nie, nie zrobiłem tego. W tej chwili uruchamiam Apache pod moim użytkownikiem, więc działa, ale chciałbym uruchomić go pod innym użytkownikiem ze względów bezpieczeństwa.
Yotam
Używam Linuksa po raz pierwszy. Pobrałem wersję Ubuntu 14.04 LTE. Mam do czynienia z tym samym problemem. Czy ktoś może pomóc?
Imdad

Odpowiedzi:

95

Zrób chmod +xna swoim katalogu użytkownika i uruchom ponownie apache. Uprawnienia 755 powinny działać. Miałem problemy z 644 .

Piotr
źródło
6
Rzeczywiście, aby dwukrotnie sprawdzić uprawnienia do plików i katalogów, jeśli są dostępne, możesz użyć namei -m /home/youruser/public_html/yourfile.extlub wypróbować people.apache.org/~igalic/hacks/parsepath
Junior M
2
dla wyjaśnienia, każdy katalog, który Apache ma czytać, musi być czytelny dla użytkownika Apache. Najprawdopodobniej twój folder domowy użytkownika nie jest własnością użytkownika ani grupy, dlatego musisz ustawić 755 uprawnień, /home/usernameaby uzyskać do niego szybki dostęp.
ruuter
Miałem ten problem na OSX Mac OS High Sierra i to rozwiązanie działało dla mnie. Nie musiałem nawet restartować Apache.
odszedł
Po godzinach przeszukiwania okazuje się, że uprawnienia powinny być również poprawne dla katalogów nadrzędnych DocumentRoot. Dziękuję Ci bardzo . BTW, to nie musi restartować Apache
Księgowa م
27

Jeśli w przypadku problemu z selinux, zamiast po prostu go wyłączyć, ta strona i ta strona dają polecenie udzielenia dostępu:

chcon -R -t httpd_sys_content_t ~/public_html/
jozxyqk
źródło
1
Byłem pewien, że to mój problem. Cholera CentOS! Dzięki za polecenie, działa idealnie.
Balmipour
2
dzięki, właśnie musiałem zastąpić ~/public_html/część katalogiem głównym treści, którą próbowałem podać.
trpt4him
chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(w mojej sytuacji)
cssyphus
Odkryty selinux nie obsługuje prostych homedirów, a tylko jedna z tych funkcji była wymagana, a druga opcjonalna. Dzięki za przypomnienie o poprawce - po obowiązkowym okresie ponownego testowania przy każdym nowym wydaniu i rozczarowaniu, zwykle po prostu hackuję to na początku. Teraz dla systemd.
user2066657
17

Możliwe, że masz włączony selinux. Próbować

getenforce

Jeśli wyświetla się komunikat „Wymuszanie”, spróbuj

setenforce 0

i spróbuj rozwiązać problem.

Sopran
źródło
4
Nie wyłączaj SELinuksa jako poprawki. Napraw problemy z SELinux poprzez ponowne przypisanie portów lub ustawienie wartości logicznych.
siride
1
Ta odpowiedź pomaga zidentyfikować, że problem dotyczy SELinux. Ale wyłączenie tego nie jest zalecane.
Rajkumar R
15

Napotkałem ten sam problem, po wielu godzinach prób znalazłem rozwiązanie, które dokładnie rozwiązuje problem:

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

Zasadniczo serwer Apache wymaga nie tylko uprawnień do odczytu wszystkich obsługiwanych plików, ale także uprawnień do wykonywania wszystkich katalogów na ścieżce wirtualnego hosta.

Nazwę narzędzia można wykorzystać do znalezienia problemów z uprawnieniami, wymieniając uprawnienia wzdłuż każdego komponentu ścieżki:

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

W moim przypadku katalog na mojej ścieżce ma uprawnienie 700, co powoduje problem. Po zmianie na 701 problem został rozwiązany.

Lu Sun
źródło
1
Link tutaj jest pomocny, ponieważ wyjaśnia problem: W jednym z węzłów ścieżki katalogu brakuje uprawnień do wyszukiwania. Aby to znaleźć, użyj polecenia „namei”, a następnie „chmod” do 755.
user3751385,
Wyjaśnia prawdziwy powód, a także rozwiązanie. dzięki
Emdadul Sawon
1

Wystąpił ten problem, gdy próbowałem uruchomić apache w kontenerze dokera na hoście Ubuntu 16.04, który korzystał z jądra 4.4 zamiast 4.10.

Po uruchomieniu tego polecenia na hoście i ponownym wdrożeniu wszystko było w porządku:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 
Programista
źródło
Natknąłem się na ten problem, ale z dziwnym efektem, który mogę chmodlub chownwewnątrz pojemnika, i na chwilę tłumi on błędy Apache 403, ale po pewnym czasie cofa się. O ile mi wiadomo, nie ma interweniującego restartu kontenera ani innych istotnych zmian, które mogłyby być tego przyczyną. Ponieważ rzeczywiście korzystam z wersji 16.04, próbowałem zainstalować ten plik binarny, a moje 403 są na razie wstrzymane. Będę miał na to oko i dzięki!
halfer