it-swarm.com.de

Wie lassen sich Berechtigungen für Apache 2-Benutzer www-data in / var / www am besten verarbeiten?

Hat jemand eine nette Lösung für den Umgang mit Dateien in /var/www? Wir führen namensbasierte virtuelle Hosts aus und der Apache 2-Benutzer ist www-data.

Wir haben zwei reguläre Benutzer & root. Wenn Sie also mit Dateien in /var/www, anstatt ...

chown -R www-data:www-data

... was ist ein guter Weg, um damit umzugehen?

Zusatzfrage: Wie hardcore gehst du dann auf Berechtigungen?

Dieser war schon immer ein Problem in kollaborativen Entwicklungsumgebungen.

218
Gareth

Ich versuche, @ Zoredaches Antwort zu erweitern, während ich es selbst probiere:

  • Erstellen Sie eine neue Gruppe (www-pub) und fügen Sie die Benutzer dieser Gruppe hinzu

    groupadd www-pub

    usermod -a -G www-pub usera ## muss -a verwenden, um an vorhandene Gruppen anzuhängen

    usermod -a -G www-pub userb

    groups usera ## Gruppen für Benutzer anzeigen

  • Ändern Sie den Besitz von allem unter/var/www in root: www-pub

    chown -R root:www-pub /var/www ## -R für rekursiv

  • Ändern Sie die Berechtigungen aller Ordner in 2775

    chmod 2775 /var/www ## 2 = Gruppen-ID setzen, 7 = rwx für Eigentümer (root), 7 = rwx für Gruppe (www-pub), 5 = rx für Welt (einschließlich) Apache www-data user)

    Das Setzen der Gruppen-ID ( SETGID ) Bit (2) bewirkt, dass die Gruppe (www-pub) in alle neuen Dateien/Ordner kopiert wird, die in diesem Ordner erstellt wurden. Andere Optionen sind SETUID (4) zum Kopieren der Benutzer-ID und STICKY (1), mit dem meiner Meinung nach nur der Eigentümer Dateien löschen kann.

    Es gibt eine rekursive Option -R, Die jedoch nicht zwischen Dateien und Ordnern unterscheidet. Sie müssen also find verwenden, wie folgt:

    find /var/www -type d -exec chmod 2775 {} +

  • Ändern Sie alle Dateien in 0664

    find /var/www -type f -exec chmod 0664 {} +

  • Ändern Sie die Umask für Ihre Benutzer in 0002

    Die umask steuert die Standardberechtigungen zum Erstellen von Dateien. 0002 bedeutet, dass Dateien 664 und Verzeichnisse 775 haben. Wenn Sie dies festlegen (in meinem Fall durch Bearbeiten der Zeile umask am Ende von /etc/profile), Werden Dateien von erstellt Ein Benutzer kann von anderen Benutzern in der WWW-Gruppe geschrieben werden, ohne dass chmod erforderlich ist.

Testen Sie dies alles, indem Sie eine Datei und ein Verzeichnis erstellen und den Eigentümer, die Gruppe und die Berechtigungen mit ls -l Überprüfen.

Hinweis: Sie müssen sich abmelden/anmelden, damit Änderungen an Ihren Gruppen wirksam werden!

209
Tom

Ich bin nicht ganz sicher, wie Sie die Berechtigungen konfigurieren möchten, aber dies kann Ihnen einen Ausgangspunkt geben. Es gibt wahrscheinlich bessere Wege. Ich gehe davon aus, dass Sie möchten, dass beide Benutzer unter/var/www/etwas ändern können.

  • Erstellen Sie eine neue Gruppe (www-pub) und fügen Sie die Benutzer dieser Gruppe hinzu.
  • Ändern Sie den Besitz von allem unter/var/www in root: www-pub.
  • Ändern Sie die Berechtigungen aller Ordner in 2775
  • Ändern Sie alle Dateien in 0664.
  • Ändern Sie die Umask für Ihre Benutzer in 0002

Dies bedeutet, dass jede neue Datei, die von einem Ihrer Benutzer erstellt wurde, den Benutzernamen www-pub 0664 haben sollte. Jedes Verzeichnis, das erstellt wird, lautet Benutzername: www-pub 2775. Apache erhält über die Komponente "Andere Benutzer" Lesezugriff auf alles. Das SETGID-Bit in den Verzeichnissen erzwingt, dass alle erstellten Dateien der Gruppe gehören, der der Ordner gehört. Das Umaskieren der Umask ist erforderlich, um sicherzustellen, dass das Schreibbit gesetzt ist, damit jeder in der Gruppe die Dateien bearbeiten kann.

Wie hart ich auf Berechtigungen gehe. Dies hängt vollständig von der Site/dem Server ab. Wenn es nur 1-2 Editoren gibt und ich sie nur davon abhalten muss, Dinge zu schlecht zu machen, werde ich es einfach machen. Wenn das Geschäft etwas Komplexeres erfordern würde, würde ich etwas Komplexeres einrichten.

62
Zoredache

Ich denke, Sie können POSIX ACL (Zugriffssteuerungslisten) als hilfreich empfinden. Sie ermöglichen ein detaillierteres Berechtigungsmodell im Vergleich zum Modell user: group: other. Ich habe festgestellt, dass es einfacher ist, sie im Kopf zu behalten, da ich expliziter sein und auch das "Standard" -Verhalten für einen Zweig des Dateisystems festlegen kann.

Beispielsweise können Sie die Berechtigungen jedes Benutzers explizit angeben:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Oder Sie können dies basierend auf einer gemeinsam genutzten Gruppe tun:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

Und vielleicht möchten Sie Ihren Apache-Benutzer schreibgeschützt lassen

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Manpages:

Tutorial

39
Joe Holloway

Diese Frage wurde erneut gestellt und als diskutiert auf Meta bieten aktuelle Best Practices bessere Ansätze als 2009, als dies gestellt wurde. Diese Antwort versucht, einige aktuelle Lösungen für den sicheren Umgang mit kollaborativen Webentwicklungsumgebungen . anzugeben


Für einen sicheren Webserver und eine kollaborative Entwicklung gibt es mehr als nur die Dateiberechtigungen:

  • Für jede Site einen separaten Benutzer haben , d. H. Nicht alle Sites mit www-data Bedienen. Dies ist wichtig, da Apache heutzutage nur noch selten statisch Inhaltsdateien bereitstellt, sondern dynamisch Websites ausführt. Diese Antwort konzentriert sich auf PHP, da es sich um die am häufigsten verwendete Server-Site-Sprache handelt, aber die gleichen Prinzipien gelten auch für die anderen.

    Wenn Sie an einer einzelnen Site ein Sicherheitsproblem haben, kann es sich auf jede Site ausbreiten, die als derselbe Benutzer ausgeführt wird. Ein Angreifer kann alles sehen, was der Benutzer sieht, einschließlich Datenbankanmeldeinformationen, und jede Site ändern, für die der Benutzer Schreibberechtigungen hat.

  • Verwenden Sie SSH File Transfer Protocol (SFTP). Während der Verwendung von FTP sollte aus Sicherheitsgründen aufgegeben werden (da beide gesendet werden Passwörter und der Inhalt im Klartext), ist es ein sicherer Ersatz für SFTP. Es verfügt auch über eine Funktion, die eine perfekte Lösung für die kollaborative Webentwicklung darstellt.

    Nachdem Sie die Websites und einen Benutzer pro Website isoliert haben, müssen Sie Ihren Webentwicklern Zugriff gewähren, worum es bei dieser Frage geht. Anstatt ihnen die Passwörter für diese Site-Benutzer zu geben - oder wie ursprünglich vorgeschlagen über ihre persönlichen Benutzerkonten auf die Site-Dateien zuzugreifen - können Sie SSH-Schlüssel für die Anmeldung verwenden.

    Jeder Entwickler kann ein Schlüsselpaar generieren und den privaten Schlüssel geheim halten. Anschließend wird der öffentliche Schlüssel für jedes Website-Benutzerkonto, an dem der Entwickler arbeitet, zur Datei ~/.ssh/authorized_keys Hinzugefügt. Dies hat viele Vorteile für die Verwaltung der Passwörter und Anmeldungen:

    • Jeder Entwickler kann auf eine beliebige Anzahl von Websites zugreifen, ohne sich alle Kennwörter merken oder speichern zu müssen, die mit der Anordnung der Benutzer pro Website verbunden sind.

    • Sie müssen die Passwörter nicht jedes Mal ändern und teilen, wenn jemand das Unternehmen verlässt.

    • Sie können sehr sichere Kennwörter verwenden oder die kennwortbasierte Anmeldung insgesamt deaktivieren.

  • Verwenden Sie PHP-FPM . Dies ist der aktuelle Ansatz zum Ausführen von PHP als Benutzer. Erstellen Sie einen neuen Pool für jeden Benutzer, d. H. Einen Pool pro Site. Dies ist sowohl für die Sicherheit als auch für die Leistung am besten geeignet, da Sie auch angeben können, wie viel Ressourcen eine einzelne Site verbrauchen kann.

    Siehe z. NeverEndingSecurity's Führen Sie php-fpm mit separatem Benutzer/UID und Gruppe unter Linux aus . Es gibt Tutorials wie HowtoForges Verwenden von PHP-FPM mit Apache unter Ubuntu 16.04 , die PHP-FPM nicht zur Erhöhung der Sicherheit durch Benutzertrennung verwenden und die Verwendung eines einzelnen FPM-Sockets auf dem Server anleiten.

11
Esa Jokinen