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

33

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 Akten (theyre PHP Akten) laufen zu lassen, erhalte ich eine Störung 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 -Rdas Verzeichnis mit meinem Benutzernamen als Argument durchsucht, um den Besitz aller Dateien im Verzeichnis zu übernehmen. 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?

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

Richzilla
quelle
Ich bin nicht sicher, ob Dateiberechtigungen kopiert werden, wenn die Datei vorhanden ist. Kann dies jemand bestätigen? Wäre es andernfalls möglich, die Dateien einem anderen Benutzer (oder Root-Benutzer) zu übergeben und sie dann zurückzugewinnen?
Tagger
Ok, ich habe mein Problem gelöst, dass die Dateien nicht ausgeführt werden, aber ich habe es getan, indem ich einfach chmod -R 777 dirauf dem fraglichen Verzeichnis lief. Ich kann gar nicht anders, als zu denken, dass es eine bessere Möglichkeit gibt
richzilla
3
777-Berechtigungen in einer Datei ermöglichen es jedem, Ihre Dateien zu schreiben, was zu Schäden an Ihren Seiten oder zu Hackerangriffen führen kann. Sie sollten es mit 755 versuchen, das normalerweise für PHP-Dateien verwendet wird. Stellen Sie sicher, dass Sie die Option "Ausführung zulassen" für eine Datei nicht aktivieren müssen. In diesem Fall können Sie chmod [Dateiname] -x ausführen. Informationen zum Befehl chmod erhalten Sie, indem Sie auf den folgenden Link klicken
Geppettvs D'Constanzo
Was zeigt das Apache-Fehlerprotokoll?
Kees Cook

Antworten:

14

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

Wenn Sie Ihr Webroot an sich /home/user/htdocs, die /, /home, /home/userund /home/user/htdocssollte das Bit gesetzt auszuführen haben.


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.

Lekensteyn
quelle
Ausführliche Anweisungen dazu finden Sie in der Antwort von Marco unten
Kochfelder
2
@ Kochfelder Noch besser, askubuntu.com/a/46371/6969
Lekensteyn
44

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

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

um dem Benutzer www-dataund der Gruppe den Besitz des DocumentRoot-Ordners zu geben www-data.

Dann können Sie sich der Gruppe hinzufügen www-data

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 www-dataGruppe) beschreibbar machen:

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

Der Einfachheit halber können Sie Skripte public_html_fix.shmit folgenden Inhalten 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

Speichern Sie es in /home/$USER/binund machen Sie 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
Marko
quelle
1
arbeitete für mich ....
Emmanuel Okeke
Gute Antwort! - Mit Beispielen und sogar einem praktischen Skript und Anweisungen zur Verwendung / Installation von Excellent!
Andre,
2
Wenn dies auf einem gemeinsam genutzten Host durchgeführt wird, wie können Sie andere Benutzer in der www-dataGruppe daran hindern, Ihre Dateien zu lesen oder in diese zu schreiben?
jozxyqk
Wirklich tolle Antwort ... du hast mein Leben gerettet
NullPoiиteя
1
chmod -R 775 /home/$USER/public_htmlwirklich schrecklich. find /home/$USER/public_html -type d -exec chmod 775 {} \;und find /home/$USER/public_html -type f -exec chmod 664 {} \;ist viel besser
iharob
1

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.

So überprüfen Sie, ob Ihre Dateien von angezeigt werden www-rootps -aux | grep apache2Führen Sie den folgenden Befehl aus, um Apache-Benutzer oder welcher Benutzer Apache ausführt (run to check):

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 verwendet FollowSymlinks.conf bei Bedarf in Ihren Dateien verwendet

3) Sie haben DocumentRoot eingerichtet

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

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

Dann hänge deine Partition über Nautilus aus und mache a sudo mount -a. Wenn alles gut geht, sind Ihre Dateien jetzt unter /mnt. Aktualisieren Sie Ihre Symlinks und Sie können loslegen.

alexg
quelle
1

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

user458431
quelle
Ich mag dieses Konzept, aber es scheint für mich nicht zu funktionieren. Benutzer www-datagehört zur Gruppe myhome. Alle Dateien und Verzeichnisse haben Gruppenschreibberechtigungen und gehören zu myhome:myhome. Ich habe Apache neu gestartet. Apache kann immer noch keine neuen Dateien und Ordner schreiben. (PHP-Skript mit www-Daten: www-Daten Benutzer / Gruppe)
squarecandy