Apache: Zugriff verweigert, da Suchberechtigungen fehlen


75

Ich weiß, diese Frage wird oft gestellt, aber die Lösungen, die ich gesehen habe, haben bei mir nicht funktioniert.

Ich habe nur einen virtuellen Host aktiviert und versuche, den Zugriff auf einen Ordner zu aktivieren, der sich nicht unter dem Dokumentstamm befindet

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>

Ich stelle /etc/apache2/envvarswie folgt ein

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

Ich habe sichergestellt, dass / home / username / Videos / und seine Unterordner Eigentum von sind username:public, die Berechtigungen auf 777 gesetzt (nachdem 775 nicht funktioniert hat) und sichergestellt, dass der Benutzer www-datazur Gruppe gehört public.

Wenn ich jetzt stöbere, http://localhost/moviesbekomme ich

[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

Aber wenn ich /etc/apache2/envvarsApache unter username(meinem eigenen Benutzernamen) laufen lasse, funktioniert alles einwandfrei. Das Problem hängt mit der Erlaubnis zusammen, aber ich verstehe nicht, wie in meinem Fall. vor allem wenn ich die erlaubnisse auf setze 777. Irgendwelche Ideen?

PS Ubuntu-Version ist 14.04, Apache ist 2.4.7 und ich habe keine anderen Konfigurationsdateien bearbeitet.



Ich habe alles getan, was sie dort vorgeschlagen haben, wie ich geschrieben habe, und es hilft nichts
Yotam

Gibt es eine Chance, dass Sie Ihre /homemit aktivierter ACL gemountet haben ? (Es gibt ein "+" Zeichen am Ende der Erlaubnis-Bits, wenn es der Fall ist (überprüfen Sie mit ls -l))
Polosson

Nein, ich habe es nicht getan. Im Moment führe ich Apache unter meinem Benutzer aus, daher funktioniert es, aber ich möchte es aus Sicherheitsgründen unter einem anderen Benutzer ausführen.
Yotam

Ich benutze Linux zum ersten Mal. Ich habe die Ubuntu 14.04 LTE-Version heruntergeladen. Ich stehe vor dem gleichen Problem. Kann jemand bitte helfen?
Imdad

Antworten:


95

Führen Sie einen chmod +xBefehl in Ihrem Benutzerverzeichnis aus und starten Sie Apache neu. 755 Berechtigungen sollten funktionieren. Ich hatte Probleme mit 644 .


6
In der Tat und um die Datei- und Verzeichnisberechtigungen zu überprüfen, können Sie people.apache.org/~igalic/hacks/parsepathnamei -m /home/youruser/public_html/yourfile.ext
Junior M

2
Zur Verdeutlichung muss jedes Verzeichnis, das Apache lesen soll, für Apache-Benutzer lesbar sein. Höchstwahrscheinlich gehört Ihr Benutzer-Ausgangsordner nicht Ihrem Benutzer und Ihrer Gruppe. Daher müssen Sie 755 Berechtigungen /home/usernamefestlegen, um schnell darauf zugreifen zu können.
Ruuter

Ich hatte dieses Problem unter OSX Mac OS High Sierra und diese Lösung funktionierte für mich. Musste nicht einmal Apache neu starten.
gegangen

Nach stundenlangem Suchen stellt sich heraus, dass die Berechtigungen auch für die übergeordneten Verzeichnisse von DocumentRoot korrekt sein sollten. Vielen Dank . Übrigens muss Apache
Accountant م

27

Wenn im Fall von Selinux das Problem ist, anstatt es nur zu deaktivieren, geben diese Seite und diese Seite den Befehl zum Gewähren des Zugriffs:

chcon -R -t httpd_sys_content_t ~/public_html/

1
Ich war mir sicher, dass es mein Problem war. Verdammtes CentOS! Danke für den Befehl, funktioniert einwandfrei.
Balmipour

2
danke, musste nur den ~/public_html/Teil durch das Stammverzeichnis des Inhalts ersetzen, den ich zu bedienen versuchte.
trpt4him

chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(in meiner Situation)
Cssyphus

Erkanntes Selinux kann keine einfachen Homedirs verarbeiten, und nur eine dieser Funktionen war erforderlich, während die andere optional war. Vielen Dank für die Erinnerung an die Fehlerbehebung - nach der obligatorischen Wiederholungstestperiode bei jeder neuen Veröffentlichung und Enttäuschung, hacke ich das normalerweise nur im Kickstart heraus. Nun zu systemd.
user2066657

17

Möglicherweise haben Sie Selinux aktiviert. Versuchen

getenforce

Wenn "Enforcing" angezeigt wird, versuchen Sie es

setenforce 0

und versuchen Sie, ob dies Ihr Problem behebt.


4
Deaktivieren Sie SELinux nicht einfach als Fix. Beheben Sie die SELinux-Probleme, indem Sie Ports neu zuweisen oder Boolesche Werte festlegen.
Siride

1
Diese Antwort hilft zu identifizieren, dass das Problem mit SELinux zusammenhängt. Das Deaktivieren wird jedoch nicht empfohlen.
Rajkumar R

15

Ich bin auf dasselbe Problem gestoßen, nachdem ich es stundenlang versucht hatte, fand ich eine Lösung, die das Problem genau löst:

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

Grundsätzlich erfordert der Apache-Server nicht nur Leseberechtigungen für alle von ihm bereitgestellten Dateien, sondern auch die Ausführungsberechtigung für alle Verzeichnisse im Pfad Ihres virtuellen Hosts.

Das Dienstprogramm namei kann zum Auffinden von Berechtigungsproblemen verwendet werden, indem die Berechtigungen für jede Komponente des Pfads aufgelistet werden:

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

In meinem Fall hat ein Verzeichnis in meinem Pfad die Berechtigung 700, was das Problem verursacht. Nachdem es auf 701 geändert wurde, wurde das Problem behoben.


1
Der Link hier ist hilfreich, da er das Problem erklärt: Einem der Knoten im Verzeichnispfad fehlen die Suchberechtigungen. Verwenden Sie den Befehl "namei", um dies zu finden, und "chmod" für 755.
user3751385

Es erklärt den wahren Grund sowie die Lösung. Danke
Emdadul Sawon

1

Dieses Problem trat auf, als ich versuchte, Apache in einem Docker-Container auf einem Ubuntu 16.04-Host auszuführen, der den 4.4-Kernel anstelle von 4.10 verwendete.

Nachdem ich diesen Befehl auf dem Host ausgeführt und erneut bereitgestellt hatte, ging es mir gut:

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

Ich bin auf dieses Problem gestoßen, aber mit dem seltsamen Effekt, den ich chmododer chowninnerhalb des Containers erzielen kann , und es unterdrückt die Apache 403-Fehler für eine Weile, um sie einige Zeit später wiederherzustellen. Soweit ich das beurteilen kann, gibt es keinen zwischenzeitlichen Neustart des Containers oder eine andere wesentliche Änderung, die die Ursache dafür sein könnte. Da ich in der Tat mit 16.04 arbeite, habe ich versucht, diese Binärdatei zu installieren, und meine 403s werden vorerst in Schach gehalten. Ich werde ein wachsames Auge darauf haben und danke!
halfer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.