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


Ich weiß, dass die Dateiberechtigungen hier schon einmal behandelt wurden, aber ich bemühe mich, das Konzept für mein Szenario zu verstehen.

  • Ich habe die Dateien auf einer alten Ubuntu-Installation erstellt.
  • Ich habe die Dateien in meine neue ubuntu-Installation kopiert und sie in meine Webroot gelegt.
  • Wenn ich versuche, die Dateien (theyre PHP-Dateien) auszuführen, erhalte ich einen Fehler bezüglich der Berechtigungen

Um dies zu beheben, ging ich davon aus, dass sie immer noch dem vorherigen Besitzer gehören müssen, also lief ich chown -R auf dem Verzeichnis, mit meinem Benutzernamen als Argument, um das Eigentum an allen Dateien im Verzeichnis zu übernehmen. Es sollte beachtet werden, dass die Benutzernamen zwischen neuen und alten Ubuntu-Installationen identisch waren.

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

Der Webroot für meine Apache-Installation befindet sich in meinem Home-Ordner. Wenn ich neue Dateien in meiner Webroot erstellen, funktionieren sie auch wie erwartet, es sind nur die alten Dateien, die das Problem verursachen.


29
2018-02-17 18:15


Ursprung


Ich bin nicht sicher, dass Dateiberechtigungen kopiert werden, wenn die Datei ist, kann das jemand bestätigen? Andernfalls wäre es möglich, die Dateien einem anderen Benutzer (oder Root) zu geben und sie dann zurück zu fordern? - Tagger
Ok, ich habe mein Problem gelöst, dass die Dateien nicht ausgeführt werden, aber ich habe es einfach ausgeführt chmod -R 777 dir auf dem betreffenden Verzeichnis. Ich kann nicht helfen zu denken, es gibt einen besseren Weg, es zu tun - richzilla
777 Berechtigungen in einer Datei ermöglichen es jedem, Ihre Dateien zu schreiben, was zu einer Beschädigung Ihrer Seiten oder Hacking führen kann. Sie sollten versuchen mit 755, die normalerweise für PHP-Dateien verwendet wird. Stellen Sie sicher, dass Sie nicht die Option "Ausführung zulassen" für eine Datei aktivieren müssen. In diesem Fall können Sie chmod [Dateiname] -x ausführen. Informationen zum Befehl chmod erhalten Sie, wenn Sie auf den folgenden Link klicken: catcode.com/teachmod/chmod_cmd.html - Geppettvs D'Constanzo
Was zeigt das Apache-Fehlerprotokoll? - Kees Cook


Antworten:


In den Verzeichnissen über Ihrem Webroot sollte das Ausführungs-Bit gesetzt sein, damit Apache in die Verzeichnisse absteigen kann.

Wenn Sie Ihren Webroot bei /home/user/htdocs, das /, /home, /home/user und /home/user/htdocs sollte das Ausführungsbit gesetzt 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 man umask 0007 setzt und sich der Apache-Gruppe (www-data, falls ich nicht irre) anschließe, so dass neu erstellte Dateien und Ordner von der Gruppe beschreibbar sind.

Alternativ können Sie ein alternatives Apache MPM installieren: Apache2 MPM ITK (Info zum Konfigurieren) und passen Sie die Konfiguration so an, dass Apache unter Ihrem Benutzer läuft.


14
2018-02-17 18:35



Für eine genaue Anleitung, wie Sie dies erreichen können, sehen Sie Marcos Antwort unten - hobs
@hobs Noch besser, askubuntu.com/a/46371/6969 - Lekensteyn


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

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

dem Benutzer den Besitz des DocumentRoot-Ordners zu geben www-data und Gruppe 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 beschreibbar nach Besitzer (www - data user) und zu sich selbst (als Teil des www-data Gruppe):

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

Aus praktischen Gründen können Sie das Skript benennen public_html_fix.sh mit Inhalt:

#!/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 innen /home/$USER/bin und mache es ausführbar mit:

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

Dann rufst du es an, wann immer du willst, von wo auch immer im Dateisystem du dich gerade befindest:

public_html_fix.sh

38
2017-10-09 00:28



hat für mich gearbeitet .... - Emmanuel Okeke
Gute Antwort! - Mit Beispielen und sogar einem Komfort-Skript und wie man / Excellent verwendet / installiert! - Andre
Wenn Sie dies auf einem freigegebenen Host tun, wie stoppen Sie andere Benutzer in der www-data Gruppe lesen Sie Ihre Dateien oder schreiben Sie für die Angelegenheit? - jozxyqk
Wirklich tolle Antwort ... du hast mein Leben gerettet - NullPoiиteя
chmod -R 775 /home/$USER/public_html wirklich 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


Abgesehen von Dateien chmodieren und Apache-.conf-Dateien bearbeiten möchte ich sagen, dass nichts für mich funktioniert hat, weil meine Dateien auf einer Partition waren, die ich über Nautilus automatisch gemountet hatte. Dies beschränkt die Partition nur für Ihren Benutzer.

Um zu überprüfen, ob Ihre Dateien sichtbar sind www-root oder welcher Benutzer Apache ausführt (run ps -aux | grep apache2 zu überprüfen), führen Sie den folgenden Befehl aus:

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

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

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

1) Sie haben alle anderen Dateiberechtigungen festgelegt

2) du hast benutzt FollowSymlinks in deinem .conf Dateien bei Bedarf

3) Sie haben DocumentRoot eingerichtet

3) mounten Sie Ihre Partition für alle Benutzer. Ich musste bearbeiten /etc/fstab und spezifiziere meine Partition über ihre UUID:

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

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


1
2018-04-29 18:02





Der beste Weg, den ich immer gefunden habe, ist VirtualMin.

Erstelle Benutzer und Gruppe "mein Zuhause"

Machen Sie Apache-Benutzer zu einem Mitglied der Gruppe "myhome". Nicht umgekehrt wie einige der hier beschriebenen Erklärungen

Nun hat apache den Zugang zu / home / myhome zusätzlich zu / home / myhome / www gelesen und ausgeführt

"myhome" Benutzer hat Schreibzugriff


1
2017-10-07 01:47



Ich mag dieses Konzept, aber es scheint nicht für mich zu funktionieren. Benutzer www-data gehö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-data: www-data Benutzer / Gruppe) - squarecandy