Erteilen von Schreibrechten für die WWW-Datengruppe

27

Ich erstelle eine Website und ein Teil der Funktion besteht darin, benutzergenerierte Daten mit PHP zu schreiben. Ich benutze Nginx unter Ubuntu 13.04. Momentan teste ich nur und alles wird über nginx auf locahost bereitgestellt.

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 besitze ich (iain) dieses Verzeichnis, aber es scheint sinnvoller zu sein, den Besitz des / var / www-Verzeichnisses und alles darin auf den Benutzer www-data zu übertragen (oder sollte das eine Gruppe sein?) Und mich selbst hinzuzufügen die www-datengruppe. Ist das Folgende der richtige Weg, um dies zu tun?

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

Bedeutet dies also, dass jeder in der WWW-Datengruppe jetzt in / var / WWW lesen, schreiben und ausführen kann?

duff
quelle

Antworten:

52

Zuerst useraddlegt einen neuen Benutzer. Da Sie (iain) bereits existieren, möchten Sie usermodstattdessen anrufen . Das wäre also:

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

(Beachten Sie die -aauf Debian-basierten Servern (Ubuntu eingeschlossen), die Sie zu dieser Gruppe hinzufügen und Ihre Mitgliedschaft zu anderen Gruppen behalten. Vergessen Sie es und Sie werden nur zur WWW-Datengruppe gehören - könnte eine schlechte Erfahrung sein, wenn eine von Auf SUSE-Servern wird die Option -Anicht -aGso man usermodsorgfältig gelesen , um das Problem zu beheben.)

Zweitens möchten Sie nicht, dass Apache uneingeschränkten Rechtszugriff hat /var/www: Dies ist möglicherweise eine schwerwiegende Sicherheitsverletzung. Lassen Sie in der Regel nur das zu, was Sie brauchen, und nichts weiter ( Grundsatz des geringsten Privilegs ). In diesem Fall müssen Sie Apache ( www-data) und Sie ( www-dataGruppe) zu schreiben (und lesen) in /var/www/example.com/public_html, so

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

Bearbeiten : Um Ihre ursprüngliche Frage zu beantworten, www-datakann nun jedes Mitglied von lesen und ausführen /var/www(da das letzte Bit Ihrer Berechtigungen 5 = Lesen + Ausführen ist). Da Sie den -RSchalter jedoch nicht verwendet haben, gilt dies nur /var/wwwfür die darin enthaltenen Dateien und Unterverzeichnisse und nicht für diese. Ob sie nun schreiben können, ist eine andere Frage und hängt von der Gruppe ab /var/www, die Sie nicht festgelegt haben. Ich denke, es ist typisch root:root, also nein, sie können (wahrscheinlich) nicht schreiben.

Bearbeiten am 22.06.2014 : Es wurde ein Hinweis hinzugefügt, dass die -aGOption auf Debian-basierten Servern gültig ist. Es variiert anscheinend mit der Distribution, also lesen Sie es mansorgfältig durch, bevor Sie es ausführen.

Calimo
quelle
OK, ich verstehe. Die Gruppe von / var / www ist in der Tat root: root. Danke für den Link. Scheint vernünftiger zu sein, die Gewohnheit zu haben, das zu gewähren, was benötigt wird, anstatt der Bequemlichkeit halber. Danke für die Anleitung.
Duff
2
Ok, also habe ich gerade versucht, mit /var/www/example.com/public_html zu schreiben, cp -r php /var/www/example.com/public_htmlund mir wurde die Erlaubnis verweigert. Ich bin in der www-Datengruppe, die rwxrwx --- Berechtigungen für dieses Verzeichnis hat. Warum ist das?
Duff
Hier könnte es viele Dinge geben. Zum Beispiel könnten Sie nicht die Erlaubnis haben, einige Dinge in PHP zu lesen, oder Sie haben sich nach dem usermod nicht abgemeldet und wieder angemeldet (ich habe meine Antwort in diesem Punkt mit addgroup aktualisiert, um dies zu vermeiden, und genau angegeben, wo sudo verwendet werden soll).
Calimo
Nach all den Antworten www-data:www-data, die dies betrafen , löste dieser das Problem mit fehlenden Berechtigungen. Vielen Dank.
Eugene