Ich versuche zunicht777
Ich möchte die Berechtigung für meinen Ordner erteilen /var/www/html
, aber ich möchte meine Dateien ohne bearbeiten sudo
. Daher dachte ich daran, einen symbolischen Link zu einem Ordner in meinem Home-Verzeichnis innerhalb zu erstellen /var/www/html
. Ich habe ihn mit folgendem erstellt:
sudo ln -sT /home/andre/www/moodle/ moodle
und die ls -la
Ausgabe ist diese:
andre@andre-270E5G:/var/www/html$ ls -la
total 8
drwxr-xr-x 2 root root 4096 Mai 4 10:20 .
drwxr-xr-x 4 root root 4096 Abr 29 14:29 ..
lrwxrwxrwx 1 root root 23 Mai 4 10:20 moodle -> /home/andre/www/moodle/
Mein Ordner verfügt also moodle
über Lese-, Schreib- und Ausführungsberechtigungen für alle, und das ist nicht das, was ich will. Ich habe den Befehl verwendet:
sudo chmod -R 775 moodle/
habe versucht, es zu ändern, aber es blieb bei den Lese-, Schreib- und Ausführungsberechtigungen für alle. Ich habe dasselbe mit dem moodle
Ordner in versucht /home/andre/www/moodle
, aber es blieb gleich. Die Ausgabe von ls -la
in /home/andre/www/
ist:
andre@andre-270E5G:~/www$ ls -la
total 28
drwxrwxr-x 3 andre andre 4096 Mai 4 10:02 .
drwx------ 49 andre andre 20480 Mai 4 10:01 ..
drwxrwxr-x 41 andre andre 4096 Mai 4 10:02 moodle
Der Ordner verfügt also moodle
über /home/andre/www/
die gewünschten Berechtigungen.
Als zusätzliches Problem localhost/moodle
erhalte ich beim Zugriff die Fehlermeldung „403 Forbidden“.
Was mache ich hier falsch?
Antwort1
Sie sollten niemals eine Website aus Ihrem Home-Verzeichnis heraus betreiben müssen. IMMER. Andernfalls müssten Sie dem Webserver die Möglichkeit geben, /home/
die Verzeichnisstruktur zu durchsuchen, aber auch /home/$USER/
(das Stammverzeichnis Ihres Benutzers, wo wir versuchen können, zu sehen, was sonst noch in Ihrem Benutzerverzeichnis vorhanden ist) sowie alle anderen Unterordner darin. Ein schlecht oder falsch konfigurierter oder ungepatchter Webserver kann auf diese Weise massive Datenlecks oder den Verlust von Anmeldeinformationen usw. verursachen, was Ihre persönlichen Daten und Anmeldungen bei verschiedenen Dingen gefährden würde. Der von Ihnen verwendete Symlink-Ansatz hilft aus demselben Grund auch nicht, wie wenn Sie versuchen, Apache Leseberechtigungen zu erteilen /home/andre/www/moodle
– der Webserver muss Ihr Stammverzeichnis durchsuchen können, um zu dem Speicherort zu gelangen, /var/www/html
auf den der Symlink verweist, was immer noch dieses Sicherheitsrisiko darstellt.
Verwenden Sie zunächst sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Dadurch werden Ihre Dateien nach kopiert /var/www/html
und von Ihrem eigenen Home-Verzeichnis ferngehalten. Anschließend werden die Berechtigungen neu festgelegt, damit Sie und der Webserver auf alles in diesem Verzeichnis zugreifen können, und Ihrem Benutzer vollständige Lese-/Schreibberechtigung für alle Dateien und Verzeichnisse erteilt. Dann müssen Sie /var/www/html
für Ihre Site immer nur von aus arbeiten.
Dies erfolgt praktisch in vier Schritten, nachdem Sie Ihre Daten zurück kopiert haben nach /var/www/html
:
- Geben Sie Apache Zugriff auf die Ordner und Dateien, damit die Site ohne 403-Fehler bereitgestellt werden kann.
- Weisen Sie Ihrem Benutzer den „Eigentümer“ der Dateien und Ordner zu und erteilen Sie sich selbst Lese-/Schreibberechtigung für alle Dateien und Ordner sowie die Möglichkeit, die Verzeichnisse zu durchlaufen.
- (Optional, aber empfohlen)Richten Sie es so ein, dass für alle von hier an in der gesamten Verzeichnisstruktur erstellten Dateien oder Ordner die Gruppe auf eingestellt ist
www-data
. - (Optional)Abschließende Sicherheitsbereinigung, bei der wir Berechtigungen so einrichten, dass Sie und der Webserver die Site-Daten sehen können, andere Benutzer jedoch nicht auf Dateien oder die Verzeichnisstruktur der Site zugreifen können.
(1) Erlauben Sie Apache den Zugriff auf die Ordner und Dateien.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Dadurch wird die „Gruppe“ rekursiv www-data
für die Ordner und Dateien festgelegt. Dadurch erhält der Webserver die Berechtigung, rekursiv zu verfahren und auf die Stammverzeichnisstruktur der Site-Dokumente zuzugreifen ( +x
nur für Verzeichnisse). Außerdem wird dadurch sichergestellt, dass der Webserver Leseberechtigungen für alle Dateien hat, sodass Site-Daten empfangen werden können.
In einigen Fällen müssen Sie dem Webserver möglicherweise Schreibberechtigungen für eine Datei oder ein Verzeichnis erteilen. Dies erreichen Sie, indem Sie Folgendes tun: sudo chmod g+w /var/www/html/PATH
(wobei dies PATH
der Pfad zu der Datei oder dem Ordner in der Verzeichnisstruktur ist, in der Sie die Schreibberechtigungen für den Webserver anwenden müssen).
BEACHTEN: In vielen Fällen können dadurch „sichere“ Informationen über eine Site-Konfiguration preisgegeben werden (z. B. Anmeldeinformationen für den Datenbankzugriff usw.). Sie sollten daher „andere“ Zugriffsberechtigungen für diese Daten in diesen einzelnen Dateien oder Verzeichnissen wie folgt entfernen: sudo chmod o-rwx /var/www/html/FILEPATH
(ersetzen Sie dies FILEPATH
durch den Pfad relativ zum /var/www/html
Ordner für die Datei).
Beachten Sie auch, dass Sie diese Befehle in Zukunft möglicherweise erneut ausführen müssen, wenn bei „neuen Dateien“ 403-Fehler auftreten, um dem Webserver die richtigen Berechtigungen zu erteilen, damit dieser weiterhin auf Dateien und Ordner zugreifen kann, die erstellt oder kopiert wurden und deren www-data
Gruppe nicht richtig festgelegt wurde.
(2) Geben Sie Ihrem Eigentümer Lese-/Schreibrechte für die Ordner und Dateien und erlauben Sie den Ordnerzugriff, um die Verzeichnisstruktur zu durchlaufen.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Ersetzen Sie USER
im ersten Befehl durch Ihren eigenen Benutzernamen!
Wir machen hier drei Dinge. Zuerst legen wir Ihren Benutzer als „Eigentümer“ aller Dateien und Verzeichnisse in fest /var/www/html
. Als Nächstes legen wir Lese- und Schreibberechtigungen für die Ordner fest und erlauben Ihnen, auf die Ordner zuzugreifen, um in sie zu gelangen (das +x
Element in den Verzeichniselementen). Dann legen wir für alle Dateien Lese-/Schreibberechtigungen für den Eigentümer fest, den wir gerade festgelegt haben.
(3)(Optional)Stellen Sie sicher, dass jede neue Datei danach mit www-data
dem Benutzer „Zugriff“ erstellt wird.
sudo find /var/www/html -type d -exec chmod g+s {} +
Dadurch wird das Bit „set gid“ für die Gruppe in den Verzeichnissen gesetzt. Dateien und Ordner, die in diesen Verzeichnissen erstellt werden, haben immer www-data
die gleiche Gruppe, was dem Webserver den Zugriff gestattet.
(4)(Optional)Abschließende Sicherheitsbereinigung, wenn Sie nicht möchten, dass andere Benutzer die Daten sehen können
Ihr Benutzer muss die Verzeichnisse und Dateien sehen können. Der Webserver muss dies ebenfalls können. Andere Systembenutzer (außer root) sollen die Daten möglicherweise nicht sehen. Geben wir ihnen diesen Zugriff also nicht und sorgen wir dafür, dass nur Ihr Benutzer und der Webserver die Daten sehen können.
sudo chmod -R o-rwx /var/www/html/
NOTIZ:Sie müssen dies zu einem späteren Zeitpunkt nicht erneut ausführen oder die Berechtigungen für die Berechtigungskategorie „andere“ hier bearbeiten. Wenn die „anderen“ Benutzer nicht darauf zugreifen können /var/www/html/
(sie verfügen nicht +x
über das erforderliche Bit, /var/www/html
um die Dateistruktur und Verzeichnisstruktur zu durchlaufen, noch über das +r
Bit, um die Dateilisten zu lesen), dann sind die Berechtigungen für Elemente unter diesem Verzeichnis für andere Benutzer oder Gruppen nicht wirklich wichtig.
Es gibt auch eine etwas weniger invasive Lösung, allerdings gibt es keine Garantie dafür, dass sie für alle neuen Dateien funktioniert und auch nicht für alle Dateisysteme., mit Dateizugriffskontrolllisten. Dadurch können Sie den Besitz der Dateien bei www-data
anderen belassen, erhalten aber im Grunde genommen effektive Eigentümerrechte, auch wenn Sie die Dateien nicht persönlich besitzen.
Diese Lösung ist etwas weniger invasiv und ermöglicht es Ihnen, ein Verzeichnis und alle darin enthaltenen Dateien zu besitzen www-data:www-data
oder root:www-data
sich selbst Zugriff zu gewähren. Es verwendetZugriffskontrolllisten, wodurch Sie mehreren Benutzern Berechtigungen erteilen können, ohne einzelne Gruppen einrichten zu müssen. Dadurch können die Systembenutzer auch root
Dateien www-data
besitzen, aber Sie können auch von Fall zu Fall zusätzliche Berechtigungen hinzufügen und die Berechtigungen für bestimmte Benutzer feinabstimmen, sodass sie Dinge lesen, aber nicht bearbeiten können usw.
Angenommen, wir arbeiten immer noch mit /var/www/html/
und möchten nicht, dass neugierige Benutzer außer uns und dem System (und natürlich Root) unsere Daten sehen, müssen wir Folgendes tun:
- Geben Sie das Eigentum an den Systembenutzer des Webservers zurück
www-data
.
sudo chown -R www-Daten:www-Daten /var/www/html
- Sie erhalten rekursiv Lese-/Schreibrechte für die Dateien, während anderen Benutzern (ausgenommen
www-data
undroot
natürlich) kein Zugriff auf die Dateien gewährt wird.
sudo find /var/www/html -type f -exec setfacl -mu:IHRBENUTZERNAME:rw -m other::--- {} \;
www-data
Erteilen Sie sich selbst rekursiv Lese-/Schreib-/Durchlaufrechte für die Verzeichnisse, entziehen Sie anderen Benutzern (mit Ausnahme von und ) den Zugriff auf die Ordnerroot
und legen Sie dies als „Standard“-ACL für neue Dateien in den Verzeichnissen fest.
sudo find /var/www/html -type d -exec setfacl -d -mu:IHRBENUTZERNAME:rwx -mo::--- {} \;
- Wir müssen das Bit auch für alle Verzeichnisse setzen
setgid
, damit der Webserver beim Erstellen einer Datei weiterhinwww-data
über Gruppenberechtigungen darauf zugreifen kann.
sudo find /var/www/html -type d -exec chmod g+s {} \;
Und jetzt haben Sie Zugriff auf alle Verzeichnisse,UndSie mussten den Zugriff nicht entziehen, www-data
was hilfreich ist, da der Webserver nach wie vor überall Dateien erstellen kann, wie es nötig ist (z. B. haben PHP-basierte Frontends ihre eigenen Cache-Verzeichnisse und solche müssen für den ordnungsgemäßen Betrieb erstellt und beschrieben werden).
Einzige Einschränkung: Wenn Sie manuell neue Dateien erstellen, müssen Sie diese entsprechend chownen, um dem Webserver das Eigentum zuzuweisen. Das ist ganz einfach sudo chown www-data:www-data filename
, und die Zugriffskontrolllisten sollten Ihnen dennoch effektive Eigentümerrechte für die Datei einräumen.
Es gibt mehrere Fälle, in denen ich dies als Systemadministrator für eine Art von nicht standardmäßigem Zugriff tun musste, ohne die Eigentümer einer bestimmten Datei zu ändern. Dies funktioniert, hat aber seine eigenen Probleme, da nicht jedes DateisystemunterstütztDateizugriffslisten.
Antwort2
Ausgezeichnete Antwort von Thomas Ward https://askubuntu.com/a/767534/717860
Sie können alle empfohlenen Schritte mit nur 3 Befehlen statt 8 Befehlen ausführen:
3 Befehle:
sudo chown -R ubuntu:www-data /var/www
sudo find /var/www -type d -exec chmod 2750 {} \+
sudo find /var/www -type f -exec chmod 640 {} \+
führt die gleiche Arbeit aus wie die folgenden 8 Befehle:
sudo chgrp -R www-data /var/www
sudo find /var/www -type d -exec chmod g+rx {} +
sudo find /var/www -type f -exec chmod g+r {} +
sudo chown -R ubuntu /var/www/
sudo find /var/www -type d -exec chmod u+rwx {} +
sudo find /var/www -type f -exec chmod u+rw {} +
sudo find /var/www -type d -exec chmod g+s {} +
sudo chmod -R o-rwx /var/www/
Antwort3
Die ganze Idee, Symlinks zu verwenden, um ein Berechtigungsproblem zu lösen, ist fehlerhaft und kann nicht funktionieren. Die Berechtigungen, die für den Symlink selbst angezeigt werden, sind meist irrelevant, sie können nicht verwendet werden, um die Berechtigungen des „echten“ Verzeichnisses zu umgehen. Das Erstellen eines Symlinks von /var/www/html/moodle
nach /home/andre/www/moodle/
umgeht nicht die Berechtigungen für /home/andre/www/moodle/
. Jeder, der Dinge in tun möchte, /var/www/html/moodle
kann dies nur tun, wenn er die erforderlichen Berechtigungen für hat /home/andre/www/moodle/
.
Ihre Ausführung von sudo chmod -R 775 moodle/
tatsächlichtathatte eine Auswirkung, aber anders als Sie dachten, wurde nicht die Berechtigung des symbolischen Links geändert, sondern die des symbolischen Links als Ziel /home/andre/www/moodle/
.
Der 403-Fehler, den Sie im Webserver erhalten, liegt wahrscheinlich daran, dass Ihr Webserver nicht über die erforderlichen Berechtigungen zum Aufrufen verfügt /home/andre
. Dies ist kein „zusätzliches Problem“, sondern auf dasselbe Berechtigungsproblem zurückzuführen.
Anstatt also symbolische Links zu verwenden, müssen Sie Berechtigungen finden, die es Ihnen ermöglichen, die Dateien zu bearbeiten und dem Webserver den Zugriff auf diese zu ermöglichen (oder sie sogar zu bearbeiten, das hängt von der Anwendung ab). Welche Berechtigungen das genau sind, hängt von Ihrem genauen Anwendungsfall ab (Ihrer Anwendungs- und Serverkonfiguration).
Grundsätzlich halte ich es für sinnvoll, dass die Dateien Ihnen gehören und Sie Schreib-/Leserechte haben, der Webserver über die Gruppenberechtigungen nur Lesezugriff auf die Dateien hat und alle anderen Benutzer keinerlei Zugriff haben.
Ein Berechtigungsbeispiel (das aufgrund fehlender Informationen für Ihren Anwendungsfall möglicherweise nicht funktioniert):
andre@fermat:/var/www/html$ ls -al moodle/
total 0
drwxr-x--- 2 andre www-data 60 mai 4 16:20 .
drwxr-xr-x 3 root root 80 mai 4 16:20 ..
-rw-r----- 1 andre www-data 0 mai 4 16:20 index.html
Sie sehen, dass das Verzeichnis über genügend Zugriff verfügt, damit Sie als Eigentümer es betreten und seinen Inhalt ändern können, der Webserver (in der Gruppe www-data
) kann darauf zugreifen und es lesen. Die Dateien selbst sind für Sie (den Eigentümer) lesbar und beschreibbar und für den Webserver (in der Gruppe www-data
) lesbar. Alle anderen Benutzer haben keinerlei Zugriff.
Auch hier gilt: Bitte betrachten Sie dies nur als Beispiel. Der genaue Benutzer/die genaue Gruppe Ihres Webservers hängt von Ihrer Konfiguration ab. Und Ihre Anwendung (Moodle) benötigt möglicherweise andere Berechtigungen. Konsultieren Sie dazu die Dokumentation.