Sie sollten niemals eine Website in Ihrem Home-Verzeichnis ausführen müssen . JE. Andernfalls müssten Sie dem Webserver die Möglichkeit geben, durch/home/
die Verzeichnisstruktur zu navigieren, aber auch in/home/$USER/
(das Basisverzeichnis Ihres Benutzers, in dem wir nachsehen können, was in Ihrem Benutzerverzeichnis noch vorhanden ist) sowie in andere Unterordner da drin. Ein schlecht konfigurierter oder falsch konfigurierter oder nicht gepatchter Webserver kann auf diese Weise zu massiven Datenverlusten oder zum Verlust von Anmeldeinformationen führen, wodurch Ihre persönlichen Daten und Anmeldungen für verschiedene Dinge gefährdet werden. Der von Ihnen verwendete Symlink-Ansatz hilft auch nicht aus demselben Grund wie der Versuch, Apache Leseberechtigungen zu erteilen/home/andre/www/moodle
- Der Webserver muss in der Lage sein, Ihr Home-Verzeichnis zu durchlaufen, um zu dem Speicherort zu gelangen, auf den der Symlink /var/www/html
verweist, der immer noch das Sicherheitsrisiko darstellt.
Erstens verwenden sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Dadurch werden Ihre Dateien in /var/www/html
Ihr eigenes Ausgangsverzeichnis kopiert und von diesem ferngehalten. Wir werden dann die Berechtigungen wiederholen, damit Sie und der Webserver auf alles in diesem Verzeichnis zugreifen können und Ihrem Benutzer das vollständige Lesen / Schreiben aller Dateien und Verzeichnisse ermöglichen. Dann müssen Sie immer nur /var/www/html
für Ihre Website arbeiten.
Dies geschieht in vier Schritten, nachdem Sie Ihre Daten zurückkopiert haben /var/www/html
:
- Geben Sie Apache Zugriff auf die Ordner und Dateien, damit die Site ohne 403 Fehler bereitgestellt werden kann.
- Geben Sie Ihrem Benutzer "Eigentümer" über die Dateien und Ordner, und geben Sie sich das Lesen / Schreiben aller Dateien und Ordner sowie die Möglichkeit, die Verzeichnisse zu durchlaufen.
- (Optional, aber empfohlen) Richten Sie es so ein, dass für alle darauf erstellten Dateien oder Ordner in der gesamten Verzeichnisstruktur die Gruppe festgelegt ist
www-data
.
- (Optional) Endgültige Sicherheitsbereinigung, bei der wir Berechtigungen einrichten, damit 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) Ermöglichen 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 {} +
Dies setzt rekursiv die 'Gruppe' www-data
für die Ordner und Dateien. Dadurch erhält der Webserver die Berechtigung, die Stammverzeichnisstruktur des Site-Dokuments erneut aufzurufen und darauf zuzugreifen (nur +x
für Verzeichnisse). Außerdem wird sichergestellt, dass der Webserver über Leseberechtigungen für alle Dateien verfügt, sodass Standortdaten empfangen werden können.
Möglicherweise gibt es einige Fälle, in denen Sie den Web - Server Schreibzugriff auf eine Datei geben, oder in ein Verzeichnis - dies kann , indem Sie erreicht wird sudo chmod g+w /var/www/html/PATH
(wo PATH
ist der Pfad zur Datei oder einen Ordner in der Verzeichnisstruktur in dem Sie die Anwendung müssen Schreibrechte für den Webserver).
HINWEIS : In vielen Fällen können hierdurch "sichere" Informationen zu einer Site-Konfiguration angezeigt werden (z. B. Anmeldeinformationen für den Datenbankzugriff usw.), und Sie sollten "andere" Zugriffsberechtigungen für diese Daten in diesen einzelnen Dateien oder Verzeichnissen mit entfernen Folgendes: sudo chmod o-rwx /var/www/html/FILEPATH
(Ersetzen FILEPATH
durch den Pfad relativ zum /var/www/html
Ordner für die Datei).
Beachten Sie auch, dass Sie diese Befehle möglicherweise in Zukunft erneut ausführen müssen, wenn bei 'neuen Dateien' 403 Probleme auftreten, damit der Webserver weiterhin über die richtigen Berechtigungen für den Zugriff auf Dateien und Ordner verfügt, die in und erstellt oder kopiert wurden Die www-data
Gruppe wird nicht richtig festgelegt.
(2) Gewähren Sie Ihrem Eigentümer Lese- / Schreibrechte für die Ordner und Dateien und erlauben Sie dem Ordnerzugriff, 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 mit Ihrem 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 ermöglichen Ihnen den Zugriff auf die Ordner, um in diese zu gelangen (das +x
Element in den Verzeichniselementen). Wir setzen dann alle Dateien auf Lese- / Schreibrechte für den Eigentümer, die wir gerade eingestellt haben.
(3) (Optional) Stellen Sie sicher, dass jede neue Datei danach mit www-data
dem Benutzer 'access' erstellt wird.
sudo find /var/www/html -type d -exec chmod g+s {} +
Dies setzt das "set gid" -Bit für die Gruppe in den Verzeichnissen. Dateien und Ordner, die in diesen Verzeichnissen erstellt wurden, gelten immer www-data
als Gruppe und ermöglichen den Zugriff auf den Webserver.
(4) (Optional) Endgültige Sicherheitsbereinigung, wenn Sie nicht möchten, dass andere Benutzer die Daten sehen können
Wir brauchen Ihren Benutzer, um die Verzeichnisse und Dateien zu sehen. Wir brauchen dazu auch den Webserver. Möglicherweise möchten wir nicht, dass andere Systembenutzer (außer root) die Daten sehen. Lassen Sie sie also nicht diesen Zugriff gewähren, und legen Sie fest, dass nur Ihr Benutzer und der Webserver die Daten sehen können.
sudo chmod -R o-rwx /var/www/html/
HINWEIS: Sie müssen dies zu einem späteren Zeitpunkt nicht erneut ausführen oder die Berechtigungen für die Kategorie "Andere" hier bearbeiten. Wenn die 'anderen' Benutzer nicht ankommen können /var/www/html/
(sie haben nicht das erforderliche +x
Bit /var/www/html
, um die Dateistruktur und Verzeichnisstruktur zu durchlaufen, noch das +r
Bit, um die Dateilisten zu lesen), dann die Berechtigungen für Elemente unter diesem Verzeichnis für andere Benutzer oder Gruppen wird nicht wirklich zu viel ausmachen.
Es gibt auch eine etwas weniger invasive Lösung, obwohl nicht garantiert ist, dass sie für alle neuen Dateien funktioniert, und auch nicht für alle Dateisysteme , die Dateizugriffskontrolllisten enthalten. Auf diese Weise können Sie das Eigentum an den Dateien www-data
für bestimmte Zwecke behalten, erhalten jedoch in jeder Hinsicht effektive Eigentumsrechte, 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 sich root:www-data
selbst Zugriff zu gewähren. Es verwendet Zugriffssteuerungslisten , mit denen Sie mehrere Benutzer über Berechtigungen verfügen können, ohne einzelne Gruppen einzurichten. Auf diese Weise können Benutzer root
oder www-data
Systembenutzer auch Dateien besitzen, aber Sie können auch von Fall zu Fall zusätzliche Berechtigungen hinzufügen und die Berechtigungen für bestimmte Benutzer so anpassen, dass sie Dinge lesen, aber nicht bearbeiten können.
Angenommen, wir arbeiten noch mit /var/www/html/
anderen Benutzern zusammen und möchten nicht, dass andere Benutzer als wir und das System (und natürlich root) unsere Daten sehen, müssen wir die folgenden Dinge tun:
- Geben Sie dem Webserver-Systembenutzer den Besitz zurück
www-data
.
sudo chown -R www-daten: www-daten / var / www / html
- Geben Sie Ihnen rekursiv Lese- / Schreibzugriff auf die Dateien, während Sie anderen Benutzern (außer
www-data
und root
natürlich) keinen Zugriff auf die Dateien gewähren.
sudo find / var / www / html -type f -exec setfacl -mu: IHR BENUTZERNAME: rw -m other :: --- {} \;
- Geben Sie sich rekursiv das Lesen / Schreiben / Durchlaufen der Verzeichnisse, entfernen Sie den Zugriff auf die Ordner für andere Benutzer (ohne
www-data
und root
) 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: IHR BENUTZERNAME: rwx -mo :: --- {} \;
- Wir müssen auch das
setgid
Bit für alle Verzeichnisse setzen, damit der Webserver beim Erstellen einer Datei weiterhin www-data
über Gruppenberechtigungen darauf zugreifen kann .
sudo find / var / www / html -type d -exec chmod g + x {} \;
Und jetzt haben Sie Zugriff auf alle Verzeichnisse, und Sie mussten den Zugriff nicht wegnehmen www-data
, um Hilfe zu erhalten, da der Webserver weiterhin überall Dateien erstellen kann, wie es erforderlich ist (z. B. PHP-basierte Frontends mit eigenen Cache-Verzeichnissen und dergleichen) müssen für den ordnungsgemäßen Betrieb erstellt und beschrieben werden).
Die einzige Einschränkung: Wenn Sie manuell neue Dateien erstellen, müssen Sie diese entsprechend anzeigen, um dem Webserver den Besitz zu übertragen. Das ist ganz einfach sudo chown www-data:www-data filename
, und in den Zugriffssteuerungslisten sollten Sie weiterhin über effektive Eigentümerrechte für die Datei verfügen.
Es gibt mehrere Fälle, in denen ich dies als Sysadmin für einen nicht standardmäßigen Zugriff tun musste, ohne die Besitzer einer bestimmten Datei zu ändern. Dies funktioniert, hat jedoch seine eigenen Kopfschmerzen, da nicht jedes Dateisystem Dateizugriffslisten unterstützt .
+x
für Dateien würde ausführbare Berechtigungen geben, und wir möchten nicht, dass PHP-Dateien notwendigerweise über die PHP-Befehlszeile oder als ausführbare Datei auf dem Server selbst ausgeführt werden - wir möchten, dass sie vom PHP-Parser auf dem Webserver verarbeitet werden (und wir brauchen keine PHP-Dateien, damit+x
der PHP-Parser sie lesen und verarbeiten kann). Verzeichnisse müssen vorhanden+x
sein, um das Durchsuchen der Verzeichnisse zu ermöglichen. Wenn also ein Verzeichnis nicht vorhanden ist+x
und ich kein Root-Benutzer bin, kann ich nicht in das Verzeichnis gelangen. Dies ist das Problem, das Sie hatten , wenn Apache nicht mit Ihren Symlinks und Ihrem Heimnetzwerk zusammenarbeitet Verzeichnis.