2013-09-16 13:33:11 +0000 2013-09-16 13:33:11 +0000
27
27

Erteilen von Schreibrechten für die Gruppe www-data

Ich erstelle eine Website und ein Teil der Funktion ist es, benutzergenerierte Daten mit php auszuschreiben. Ich verwende nginx auf Ubuntu 13.04. Im Moment bin ich nur am Testen und alles wird durch nginx auf locahost serviert.

Mein php-Skript kann die Textdatei nicht schreiben (obwohl ich dies manuell tun kann) und ich denke, es ist ein Berechtigungsproblem für das Schreiben in mein Verzeichnis /var/www/example.com/public_html.

Im Moment bin ich (iain) der Eigentümer dieses Verzeichnisses, aber es scheint sinnvoller zu sein, den Besitz des Verzeichnisses /var/www und alles darin auf den Benutzer www-data (oder sollte das die Gruppe sein?) zu übertragen und mich selbst zur Gruppe www-data hinzuzufügen. Ist das Folgende der richtige Weg, dies zu tun?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

Bedeutet das also, dass jeder in der www-data-Gruppe jetzt in /var/www lesen, schreiben und ausführen kann?

Antworten (1)

53
53
53
2013-09-16 13:53:44 +0000

Zunächst wird mit useradd ein neuer Benutzer angelegt. Da Sie (iain) bereits existieren, wollen Sie stattdessen usermod aufrufen. Das würde also lauten:

sudo usermod -aG www-data iain
addgroup www-data

(beachten Sie das -a auf Debian-basierten Servern (einschließlich Ubuntu), das Sie zu dieser Gruppe hinzufügt und Ihre Mitgliedschaft in anderen Gruppen beibehält. Vergessen Sie es und Sie gehören nur noch der Gruppe www-data an - könnte eine schlechte Erfahrung sein, wenn einer von ihnen ein Rad ist. Auf Servern vom Typ SUSE lautet die Option -A statt -aG, lesen Sie also genau nach, um es richtig zu machen).

Zweitens wollen Sie nicht, dass Apache vollen rw-Zugriff auf man usermod hat: Das ist potenziell eine große Sicherheitslücke. Als allgemeine Regel gilt: Erlauben Sie nur das, was Sie brauchen, und nicht mehr Prinzip des geringsten Privilegs ). In diesem Fall brauchen Sie apache (/var/www) und Sie (Gruppe www-data), um in www-data zu schreiben (und zu lesen), also

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

Edit : um Ihre ursprüngliche Frage zu beantworten, ja, jedes Mitglied von /var/www/example.com/public_html kann jetzt www-data lesen und ausführen (weil das letzte Bit Ihrer Berechtigungen 5 = read + exec ist). Aber weil Sie den Schalter /var/www nicht benutzt haben, gilt das nur für -R, und nicht für die darin enthaltenen Dateien und Unterverzeichnisse. Ob sie nun schreiben können, ist eine andere Sache und hängt von der Gruppe von /var/www ab, die Sie nicht gesetzt haben. Ich schätze, sie ist typischerweise /var/www, also nein, sie können (wahrscheinlich) nicht schreiben.

Bearbeitung am 2014-06-22 : Es wurde ein Hinweis hinzugefügt, dass die Option root:root auf Debian-basierten Servern gültig ist. Sie variiert offenbar mit der Distribution, also lesen Sie -aG sorgfältig, bevor Sie es ausführen.