it-swarm.com.de

Berechtigungsproblem: Wie kann Apache auf Dateien in meinem Home-Verzeichnis zugreifen?

Ich weiß, dass hier bereits Dateiberechtigungen behandelt wurden, aber ich habe Mühe, mich mit dem Konzept für mein Szenario vertraut zu machen.

  • Ich habe die Dateien auf einer alten Ubuntu-Installation erstellt.
  • Ich habe die Dateien in meine neue Ubuntu-Installation kopiert und in mein Webroot gestellt.
  • Wenn ich versuche, die Dateien (sie sind PHP Dateien) auszuführen, erhalte ich einen Fehler in Bezug auf Berechtigungen

in einem Versuch, dies zu beheben, ging ich davon aus, dass sie noch im Besitz des Vorbesitzers sein müssen. Daher habe ich chown -R für das Verzeichnis mit meinem Benutzernamen als Argument ausgeführt, um den Besitz aller Dateien in zu übernehmen das Verzeichnis. Es sollte beachtet werden, dass die Benutzernamen zwischen neuen und alten Ubuntu-Installationen gleich waren.

Wenn ich versuche, die Dateien erneut auszuführen, tritt das gleiche Problem auf: Fehler 500 aufgrund von Berechtigungsproblemen. Kann mir jemand sagen, welche anderen Schritte ich unternehmen sollte?

Die Webroot-Datei für meine Apache-Installation befindet sich in meinem Ausgangsordner. Wenn ich neue Dateien in meinem Webroot erstelle, funktionieren diese auch wie erwartet. Es sind nur die alten Dateien, die das Problem verursachen.

32
richzilla

In den Verzeichnissen über Ihrem Webroot sollte das Ausführungsbit gesetzt sein, damit Apache in die Verzeichnisse gelangen kann.

Wenn sich Ihre Webroot-Datei unter /home/user/htdocs befindet, sollte für /, /home, /home/user und /home/user/htdocs das Ausführungsbit gesetzt sein.


Die obige Lösung "funktioniert", ist aber nicht ideal. Wenn Sie einen Ordner erstellt haben, kann Apache nicht darauf schreiben. Das Gegenteil passiert auch.

Dies kann "behoben" werden, indem Sie umask 0007 einstellen und sich der Apache-Gruppe hinzufügen (www-Daten, wenn ich mich nicht irre), sodass neu erstellte Dateien und Ordner von der Gruppe beschrieben werden können.

Alternativ können Sie ein alternatives Apache MPM installieren: Apache2 MPM ITK ( Informationen zur Konfiguration ) und die Konfiguration so anpassen, dass Apache unter Ihrem Benutzer ausgeführt wird.

14
Lekensteyn

Wenn sich Ihre Serverdokumente im Verzeichnis /home/$USER/public_html befinden, müssen Sie ausführen

Sudo chown -R www-data:www-data /home/$USER/public_html

um dem Benutzer www-data und der Gruppe www-data den Besitz des DocumentRoot-Ordners zu übertragen.

Dann kannst du dich der Gruppe www-data hinzufügen

Sudo adduser $USER www-data

Schließlich müssen Sie den DocumentRoot-Ordner für den Eigentümer (www-data-Benutzer) und für sich selbst (als Teil der Gruppe www-data) beschreibbar machen:

Sudo chmod -R 775 /home/$USER/public_html

Der Einfachheit halber können Sie ein Skript namens public_html_fix.sh mit folgendem Inhalt erstellen:

#!/bin/bash

Sudo adduser $USER www-data
Sudo chown -R www-data:www-data /home/$USER/public_html
Sudo chmod -R 775 /home/$USER/public_html

Speichere es in /home/$USER/bin und mache es ausführbar mit:

Sudo chmod +x /home/$USER/bin/public_html_fix.sh

Dann rufen Sie es auf, wann immer Sie es brauchen, von wo auch immer Sie sich auf dem Dateisystem befinden:

public_html_fix.sh
43
Marko

Abgesehen davon, dass ich Dateien chmodiert und Apache .conf-Dateien bearbeitet habe, wollte ich sagen, dass bei mir nichts funktioniert hat, da sich meine Dateien auf einer Partition befanden, die ich über Nautilus automatisch gemountet hatte. Dies begrenzt die Partition nur für Ihren Benutzer.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Ihre Dateien für www-root oder für einen beliebigen Benutzer, der Apache ausführt, sichtbar sind (führen Sie ps -aux | grep Apache2 aus, um zu überprüfen):

Sudo su -l www-data -s /bin/bash

und versuchen Sie, eine Datei aus Ihrem Dokumentenstamm zu lesen.

Wenn die Datei nicht lesbar ist, überprüfen Sie Folgendes:

1) Sie haben alle anderen Dateiberechtigungen festgelegt

2) Sie haben FollowSymlinks bei Bedarf in Ihren .conf Dateien verwendet

3) Sie haben DocumentRoot eingerichtet

3) Hängen Sie Ihre Partition für alle Benutzer ein. Ich musste /etc/fstab bearbeiten und meine Partition über die UUID angeben:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Hängen Sie dann Ihre Partition über Nautilus aus und führen Sie einen Sudo mount -a aus. Wenn alles gut geht, befinden sich Ihre Dateien jetzt unter /mnt. Aktualisieren Sie Ihre Symlinks und Sie können loslegen.

1
alexg

Ich habe festgestellt, dass dies am besten immer so eingerichtet ist, wie VirtualMin es tut.

erstelle Benutzer und Gruppe "myhome"

Machen Sie einen Apache-Benutzer zu einem Mitglied der Gruppe "myhome". Nicht anders herum, wie in einigen Erklärungen beschrieben

Damit hat Apache nun zusätzlich zu/home/myhome/www den Zugriff auf/home/myhome/myhome gelesen und ausgeführt

Der Benutzer "myhome" hat Schreibzugriff

1
user458431