Apache kann nicht auf Ordner in meinem Home-Verzeichnis zugreifen

29

Ich habe die Konfiguration von Apache so geändert, dass sie auf einen Ordner in meinem Ausgangsverzeichnis verweist:

<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>

Ich habe sogar meine /home/dbugger/htmlErlaubnis erteilt 777. Aber ich erhalte immer noch die gleiche Fehlermeldung unter http://localhost: "403 Forbidden"

Was fehlt mir?

Enrique Moreno Zelt
quelle
Was ist mit /home/dbuggerErlaubnis?
Eric Carvalho
Du meinst, ich sollte 777 zu meinem ganzen privaten Ordner machen? Das scheint es zu übertreiben. Selbst wenn man 777 html macht, ist das keine sichere Lösung. Ich mache es nur, um zu versuchen, die Wurzel des Problems zu identifizieren.
Enrique Moreno Zelt
1
Apache läuft als Benutzer www-Daten. Wenn dieser Benutzer zu Hause keine Ausführungsberechtigung hat, kann apache keine Dateien lesen.
Eric Carvalho
Gibt es nicht eine Möglichkeit, einen Unterordner meines Home-Verzeichnisses zu den WWW-Daten hinzuzufügen, ohne den vollständigen Zugriff auf den Home-Ordner zu haben? Dieser Logik zu folgen scheint, als müsste ich auch Zugriff auf ALLE HOME-Ordner gewähren, da ich ihm Zugriff auf / home gewähren müsste. Das scheint zu viel
Enrique Moreno Tent

Antworten:

25

Das hat bei mir funktioniert

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

Das Wichtigste war, sich zu ändern

Order allow, deny

zu

Require all granted 
szydan
quelle
Sie sparen meine Zeit, ich muss die Erlaubnis nicht ändern
khaled_webdev
Hallo, ich bin froh, dass es dir geholfen hat
szydan
3
Ich habe die Freiheit , aufzublicken , was „alle gewährten erfordern“ war und festgestellt , dass es die „neue Äquivalent“ ist Allow from allvon Apache 2.4 ab - serverfault.com/questions/549517/...
Programster
8
Nein, es ist niemals eine gute Idee, Zugriff auf die gesamte Wurzel zu gewähren!
Bjunix
9
Das Setzen AllowOverridevon Allin Ihrem Stammverzeichnis ist bestenfalls rücksichtslos! Weitere Informationen finden Sie unter httpd.apache.org/docs/2.4/mod/core.html#allowoverride .
Bombe
19

userdirModul aktivieren :

sudo a2enmod userdir 

Aktivieren Sie die PHP-Ausführung im Benutzerverzeichnis:

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

(Oder wenn Sie zum Beispiel PHP 7.0 verwenden)

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

Kommentieren Sie diesen Teil ( #am Anfang jeder Zeile):

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

Drücken Sie Ctrl+ Xzum Speichern

Verzeichnisliste aktivieren:

sudo nano /etc/apache2/apache2.conf

Füge das hinzu:

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

Drücken Sie Ctrl+ Xzum Speichern


Starten Sie Apache neu (auch sudohier erforderlich):

sudo service apache2 restart

Legen Sie nun Ihre PHP-Dateien in das /home/yourname/public_htmlVerzeichnis und gehen Sie
http://localhost/~yournamevon Ihrem Webbrowser aus zu.

Dgreene
quelle
11

Apache läuft als Benutzer www-data. Wenn es bei Ihnen zu Hause keine Ausführungsberechtigung hat, kann Apache keine Dateien lesen.

Ändern Sie die Gruppe Ihres Zuhauses in www-data:

chgrp www-data /home/dbugger

Und gib ihm nur die Erlaubnis, dein Homeverzeichnis zu durchlaufen:

chmod g+x /home/dbugger

Sie können auch Berechtigungen einschränken für /home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html
Eric Carvalho
quelle
Kann ich das tun, aber anstatt es zu /home/dbuggerbenutzen /home/dbugger/html?
Enrique Moreno Zelt
Sie können diese Berechtigung auch auf /home/dbugger/html777 anstatt auf 777 anwenden. Beachten Sie jedoch, dass der Benutzer www-data nicht cdauf Dateien oder Unterordner zugreifen kann, wenn er nicht zu Ihnen nach Hause kann. Wenn Sie also die Erlaubnis haben, zu Hause zu sein, kann rwx------ dbugger:dbuggerApache nicht auf Dateien in Ihrem Haus zugreifen. Wenn Sie den Zugriff nicht ein wenig einschränken möchten, können Sie versuchen, nur die Ausführungsberechtigung ( chmod g+x /home/dbugger) zu erteilen. Ich bin mir nicht sicher, aber ich denke, dass dies funktioniert.
Eric Carvalho
Sorry, aber keine dieser Lösungen hat funktioniert :(
Enrique Moreno Tent
chgrp www-data /home/dbuggerin kombination mit @DavidGreene funktionierte es für mich
laurent
Es ist auch möglich, Ihre Benutzergruppe zum Apache-Benutzer (www-data) hinzuzufügen. Danach sudo usermod -a -G dbugger www-datamüssen Sie Apache neu starten.
TIIUNDER
1

Sie müssen die Berechtigungen nicht ändern, wenn Sie Ihr Basisverzeichnis zum Hosten der Entwicklungsumgebung verwenden möchten, zumindest, wenn Sie für einige Anwendungen Schreibberechtigungen benötigen. Sie benötigen ein mod_userdir-Modul für Apache und können auf / home / benutzername / public_html / * wie folgt zugreifen: http: //domain.local/~benutzername/dir_name/ *, um einen virtuellen Host zu verwenden Link wie folgt:

$ 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
user1916831
quelle
5
Sie können aucha2enmod userdir
Joril