Die meisten Antworten hier sind nicht aus Sicherheitsgründen verfasst. Es ist gut, das Gefühl zu haben, dass das Laufen sudo
jedes Mal nicht sehr klug ist. Wenn Sie einen Tippfehler machen (zum Beispiel eine einzelne Leerstelle an einer falschen Stelle: sudo rm -rf / var/www/dir
Nicht ausführen! ), Können Sie Ihr System in den Papierkorb werfen.
Hinweis: Ab Apache 2.4.7 / Ubuntu 14.04 /var/www
wurde verschoben, um /var/www/html
die Befehle in dieser Antwort entsprechend anzupassen .
Sehen:
Schlechte Ideen:
chmod 777
(sagarchalise) - Dies ermöglicht es jedem, der Zugriff auf Ihr System hat, in die Verzeichnisse und Dateien zu schreiben und somit dem Eindringling zu ermöglichen, jeden Code unter dem www-data
Benutzer auszuführen
chgrp -R www-data $HOME
(cob) - Dies ermöglicht www-data
das Lesen oder Schreiben von Dateien im Home-Verzeichnis. Dies berücksichtigt nicht die Regel des geringsten Privilegs
chown -R $USER:$USER /var/www
(kv1dr) - Sofern die Welt keine Leseberechtigung für hat /var/www
, kann der Webserver, unter dem ausgeführt www-data
wird, die Dateien nicht lesen (liefern) . Wenn es sich bei der Datei um ein öffentlich zugängliches einfaches HTML-Dokument handelt, ist es möglicherweise kein Problem, wenn die Welt die Datei lesen kann. Handelt es sich bei der Datei jedoch um eine PHP-Datei mit Kennwörtern, ist dies der Fall.
HINWEIS : In den folgenden Lösungen habe ich www-data
Schreibrechte gewährt . Es /usr/share/doc/base-passwd/users-and-groups.txt.gz
heißt jedoch:
www-daten
Einige Webserver werden als WWW-Daten ausgeführt. Webinhalte sollten nicht im Besitz dieses Benutzers sein, da sonst ein kompromittierter Webserver eine Website neu schreiben kann. Von Webservern geschriebene Daten gehören www-data.
Gewähren Sie der Gruppe nach Möglichkeit keine Schreibrechte www-data
. www-data
Es muss nur in der Lage sein, die Dateien zu lesen , damit der Webserver sie bereitstellen kann. Der einzige Fall, in dem www-data
Schreibberechtigungen erforderlich sind, betrifft Verzeichnisse, in denen Uploads und andere zu schreibende Speicherorte gespeichert sind.
Lösung 1
Fügen Sie sich der www-data
Gruppe hinzu und setzen Sie das setgid-Bit im /var/www
Verzeichnis so, dass alle neu erstellten Dateien auch diese Gruppe erben.
sudo gpasswd -a "$USER" www-data
Korrigieren Sie zuvor erstellte Dateien (vorausgesetzt, Sie sind der einzige Benutzer von /var/www
):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(Noch sicherer: Verwenden Sie 640
oder 2750
und manuell chmod g+w file-or-dir
, die vom Webserver beschreibbar sein müssen.)
Lösung 2
Erstellen Sie für jedes Projekt einen Symlink zu Ihrem Home-Verzeichnis. Angenommen, Ihr Projekt befindet sich in ~/projects/foo
und Sie möchten, dass es sich in befindet /var/www/foo
, führen Sie Folgendes aus:
sudo ln -sT ~/projects/foo /var/www/foo
Wenn in Ihrem Ausgangsverzeichnis other
(aus Sicherheitsgründen) kein Ausführungsbit (absteigend) gesetzt ist , ändern Sie die Gruppe in www-data
, setzen Sie jedoch nur das Ausführungsbit (kein Lesen / Schreiben). Gehen Sie für den ~/projects
Ordner genauso vor, da er möglicherweise andere Projekte als www enthält. (Dies ist nicht erforderlich, sudo
wenn Sie Ihren Benutzer zuvor zur www-data
Gruppe hinzugefügt haben .)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Setzen Sie die Gruppe www-data
auf Ein ~/projects/foo
und erlauben Sie dem Webserver, Dateien und Dateien + Verzeichnisse zu lesen und zu schreiben und in Verzeichnisse zu gelangen:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Noch sicherer: Verwenden Sie standardmäßig 640 und 2750 und manuell chmod-Dateien und -Verzeichnisse, die vom Webserver-Benutzer beschreibbar sein müssen. Das setgid-Bit sollte nur hinzugefügt werden, wenn ~/projects/foo
die Gruppe auf jede neu erstellte Datei zugreifen soll .
Von nun an können Sie auf Ihre Site unter zugreifen http://localhost/foo
und Ihre Projektdateien in bearbeiten ~/projects/foo
.
Siehe auch