Apache nie ma dostępu do folderów w moim katalogu domowym

29

Zmieniłem konfigurację Apache, aby wskazywała folder w moim katalogu domowym:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/dbugger/html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dbugger/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Udzieliłem nawet mojej /home/dbugger/htmlzgody 777. Nadal jednak pojawia się ten sam komunikat o błędzie pod adresem http://localhost: „403 Forbidden”

Czego mi brakuje?

Namiot Enrique Moreno
źródło
Co z /home/dbuggerpozwoleniem?
Eric Carvalho,
Masz na myśli, że powinienem zrobić 777 moim całym folderem domowym? To wydaje się przesadzać. Nawet tworzenie 777 HTML nie jest bezpiecznym rozwiązaniem. Po prostu robię to, aby spróbować zidentyfikować źródło problemu.
Enrique Moreno Namiot
1
apache działa jako dane www użytkownika. Jeśli ten użytkownik nie ma uprawnień do wykonywania w twoim domu, apache nie będzie mógł odczytać żadnego pliku.
Eric Carvalho,
Czy nie ma sposobu, aby dodać podfolder mojego katalogu domowego do danych www bez zapewnienia pełnego dostępu do folderu domowego? Zgodnie z tą logiką wydaje się, że musiałbym również dać dostęp do WSZYSTKICH folderów HOME, tak jak musiałbym dać mu dostęp do / home. To wydaje się zbyt wiele
namiot Enrique Moreno

Odpowiedzi:

25

To zadziałało dla mnie

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Allow from all
</Directory>

Ważne było, aby się zmienić

Order allow, deny

do

Require all granted 
szydan
źródło
oszczędzasz mój czas, nie muszę zmieniać uprawnień
khaled_webdev
Cześć Cieszę się, że to pomogło
szydan
3
Pozwoliłem sobie na sprawdzenie, co to jest „wymaganie, by wszystko zostało udzielone”, i odkryłem, że jest to „nowy odpowiednik” Allow from allpocząwszy od Apache 2.4 - serverfault.com/questions/549517/…
Programster
8
nie, udzielenie dostępu do całego katalogu głównego nigdy nie jest dobrym pomysłem!
bjunix
9
Ustawianie AllowOverridesię Allna swoim głównym katalogu jest lekkomyślny w najlepszym wydaniu! Aby uzyskać szczegółowe informacje, zobacz httpd.apache.org/docs/2.4/mod/core.html#allowoverride .
Bombe,
19

Włącz userdirmoduł:

sudo a2enmod userdir 

Włącz wykonywanie PHP w katalogu użytkownika:

sudo nano /etc/apache2/mods-available/php5.conf  

(Lub jeśli na przykład używasz php7.0)

sudo nano /etc/apache2/mods-available/php7.0.conf

Skomentuj tę część (umieszczoną #na początku każdej linii):

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>

Naciśnij Ctrl+, Xaby zapisać

Włącz listę katalogów:

sudo nano /etc/apache2/apache2.conf

Dodaj:

<Directory /home/*/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Naciśnij Ctrl+, Xaby zapisać


Zrestartuj apache ( sudowymagany tutaj również):

sudo service apache2 restart

Teraz umieść pliki php w /home/yourname/public_htmlkatalogu i przejdź do
http://localhost/~yournameprzeglądarki.

dgreene
źródło
11

Apache działa jako użytkownik www-data. Jeśli nie ma pozwolenia na wykonanie w twoim domu, apache nie będzie mógł odczytać żadnego pliku.

Zmień grupę domową na www-data:

chgrp www-data /home/dbugger

I pozwól mu tylko na przeglądanie twojego katalogu domowego:

chmod g+x /home/dbugger

Możesz także ograniczyć uprawnienia /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Eric Carvalho
źródło
Czy mogę to zrobić, ale zamiast /home/dbuggerużywać /home/dbugger/html?
Enrique Moreno Namiot
Możesz również zastosować to uprawnienie /home/dbugger/htmlzamiast 777, ale musisz pamiętać, że jeśli dane www użytkownika nie mogą dostać się cddo twojego domu, nie będzie on miał dostępu do żadnego pliku lub podfolderu. Tak więc, jeśli twoje pozwolenie na dom to rwx------ dbugger:dbuggerapache, nie będziesz mógł uzyskać dostępu do żadnego pliku w domu. Jeśli nie chcesz trochę ograniczać dostępu, możesz spróbować dać tylko uprawnienia do wykonywania ( chmod g+x /home/dbugger), nie jestem pewien, ale myślę, że to działa.
Eric Carvalho,
Przepraszamy, ale żadne z tych rozwiązań nie zadziałało :(
Namiot Enrique Moreno
chgrp www-data /home/dbuggerw połączeniu z metodą @DavidGreene sprawiło, że zadziałało dla mnie
laurent
Możliwe jest również dodanie grupy użytkowników do użytkownika apache (www-data) sudo usermod -a -G dbugger www-data, po czym należy ponownie uruchomić apache.
TIIUNDER
1

Nie musisz zmieniać uprawnień, jeśli chcesz używać katalogu domowego do hostowania środowiska programistycznego, przynajmniej, że potrzebujesz uprawnień do zapisu dla niektórych aplikacji. Potrzebujesz modułu apache mod_userdir i możesz uzyskać dostęp do / home / nazwa_użytkownika / public_html / * jak ten http: //domain.local/~user_name/dir_name/ * do korzystania z hostów wirtualnych, aby użyć modułu mod_userdir, musisz utworzyć sym link taki:

$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/
$ sudo service apache2 restart
użytkownik1916831
źródło
5
Możesz także użyća2enmod userdir
Joril