Frage Was ist der beste Weg, Berechtigungen für Apache 2 Benutzer www-Daten in / var / www zu behandeln?


Hat jemand eine nette Lösung für den Umgang mit Dateien in /var/www? Wir betreiben Namen basierte virtuelle Hosts und der Apache 2 Benutzer ist www-Daten.

Wir haben zwei normale Benutzer & root. Also wenn man mit Dateien rumspielt /var/www, anstatt zu müssen ...

chown -R www-data:www-data

... die ganze Zeit, was ist ein guter Weg, damit umzugehen?

Ergänzende Frage: Wie hardcore gehst du dann auf Berechtigungen?

Dies war in kollaborativen Entwicklungsumgebungen immer ein Problem.


211
2018-05-11 05:13


Ursprung


Siehe auch: Was sind die besten Linux-Berechtigungen für meine Website? - Zoredache


Antworten:


Versuch, @ Zoredaches zu erweitern Antworten, wie ich es mir selbst gebe:

  • 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  ## zeigt Gruppen für Benutzer an

  • Ändern Sie den Besitz von alles unter / var / www zu root: www-pub

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

  • Ändern Sie die Berechtigungen aller Ordner auf 2775

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

    Gruppen-ID festlegen (SETGID) Bit (2) bewirkt, dass die Gruppe (www-pub) in alle neuen Dateien / Ordner kopiert wird, die in diesem Ordner erstellt wurden. Weitere Optionen sind SETUID (4) zum Kopieren der Benutzer-ID und STICKY (1), von dem ich glaube, dass nur der Besitzer Dateien löschen kann.

    Da ist ein -R rekursive Option, aber das wird nicht zwischen Dateien und Ordnern unterscheiden, also müssen Sie Verwenden Sie suchen, so:

    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 auf 0002

    Die Umask steuert die Standardberechtigungen für die Dateierstellung, 0002 bedeutet, dass die Dateien 664 und die Verzeichnisse 775 haben. Einstellen (durch Bearbeiten der umask Linie am unteren Rand von /etc/profile In meinem Fall bedeutet dies, dass Dateien, die von einem Benutzer erstellt wurden, für andere Benutzer in der www-Gruppe schreibbar sind, ohne dass dies erforderlich ist chmod Sie.

Testen Sie all dies, indem Sie eine Datei und ein Verzeichnis erstellen und den Besitzer, die Gruppe und die Berechtigungen mit überprüfen ls -l.

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


201
2017-09-15 05:11



@ Tom Großartig zu sehen, dass Sie die Verwendung empfehlen findBefehl dafür. Einen kleinen Performance-Tipp würde ich geben, wenn Sie viele Dateien / Verzeichnisse haben und Sie GNU find verwenden möchten + anstatt \; so dass der Befehl wird Arbeiten Sie mit mehreren Dateien da "Es ist schneller, einen Befehl für so viele Dateien wie möglich gleichzeitig auszuführen, anstatt nur einmal pro Datei. Dadurch sparen Sie die Zeit, die zum Starten des Befehls jedes Mal benötigt wird." Außerdem ist es einfacher zu tippen, da kein Backslash benötigt wird. - aculich
Aktualisiert mit @ aculichs Vorschlag, + not \; - Tom
@SunnyJ. versuchen Sie dies (ohne die äußeren Anführungszeichen): "find / var / www -type f -exec chmod 0664 '{}' \ +" Versuchen Sie es. Zwischen dem '{}' und dem \ + ist ein Leerzeichen. - Buttle Butkus
@ Tomway, um es zu durchbrechen, danke. Nur eine Anmerkung - ich denke, "SETUID (4), um die Benutzer-ID zu kopieren", wie in Ihrer Antwort enthalten ist falsch - SETUID wird ignoriert, wenn auf Verzeichnisse in Linux / Unix angewendet - Ref - Yarin
Ok, also vorbei usera und userb meinst du www-data und ftpuser ? Ich fand das sehr verwirrend mit jeder Erwähnung von www-data, was in der ursprünglichen Frage war. Auch, was ist der Sinn / Vorteil der Einstellung des Besitzers root? Sollten wir es einstellen ftpuser? - gskema


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 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 alles unter / var / www zu root: www-pub.
  • Ändern Sie die Berechtigungen aller Ordner auf 2775
  • Ändern Sie alle Dateien in 0664.
  • Ändern Sie die Umask für Ihre Benutzer auf 0002

Das bedeutet, dass jede neue Datei, die von einem Ihrer Benutzer erstellt wurde, der Benutzername www-pub 0664 sein sollte. Das Verzeichnis, das erstellt wird, lautet username: www-pub 2775. Apache erhält Lesezugriff auf alles über die Komponente "andere Benutzer". Das SETGID-Bit in den Verzeichnissen erzwingt, dass alle erstellten Dateien der Eigentümergruppe des Ordners gehören. Das Anpassen der Umask ist erforderlich, um sicherzustellen, dass das Schreibbit gesetzt ist, so dass jeder in der Gruppe die Dateien bearbeiten kann.

Wie für Hardcore ich auf Berechtigungen gehe. Es hängt vollständig von der Site / dem Server ab. Wenn es nur 1-2 Redakteure gibt und ich sie nur davon abhalten muss, Dinge zu kaputt zu machen, dann werde ich einfach gehen. Wenn das Geschäft etwas Komplexeres erforderte, würde ich etwas Komplexeres einrichten.


59
2018-05-11 05:49



Möglicher Zusatz - Cachespeicher / Upload-Verzeichnisse einstellen, die vom Webserver in www-data geschrieben werden müssen: www-data und 775. - gacrux
Würde es auch funktionieren, die Benutzer der Apache-Gruppe hinzuzufügen, statt sich auf "andere" Berechtigungen zu verlassen? Wenn Sie nur Dateien hochladen und diese Dateien von Apache gelesen werden müssen, scheint eine dritte Gruppe nur dann nützlich zu sein, wenn Sie diese Dateien bearbeiten müssen. - Simurr
Irgendeine Chance, das du ein wenig @Zoredache erweitern kannst? Ich grunkiere die grundlegende Verwendung von rwx-Bits, chmod, chown, adduser, usermod, aber du hast mich mit der zusätzlichen ersten Ziffer an den oktalen Berechtigungen, umasks und all dem verloren. Einige Beispielbefehle, die Ihre skizzierten Annäherungen veranschaulichen, würden sehr geschätzt werden. - Tom
Auf diese Weise kann jeder Benutzer auf alle anderen Benutzerdateien zugreifen! Dies bedeutet, dass BenutzerA die config.php von userB lesen kann, um beispielsweise seine mysql-Anmeldedaten zu stolpern - drAlberT
Mit acl kannst du sowohl mit Sicherheit als auch mit Zusammenarbeit umgehen :) - drAlberT


Ich denke, dass Sie POSIX ACL (Access Control Lists) finden können, um hilfreich zu sein. Sie ermöglichen ein feinkörnigeres Berechtigungsmodell im Vergleich zum Benutzer: Gruppe: anderes Modell. Ich habe festgestellt, dass es einfacher ist, sie in meinem Kopf zu behalten, da ich expliziter sein kann und auch das "Standardverhalten" 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 es basierend auf einer gemeinsamen Gruppe tun:

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

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

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

Manpages:

Tutorial


39
2018-05-11 16:26



Das ist der Weg ! +1 - drAlberT
ACL für den Gewinn +1 ... Für mehr sehen serverfault.com/a/360120/41823 - Yarin
Ich frage mich, ob es irgendwelche Leistungseinbußen für ACL vs grundlegende Berechtigungen gibt. - Buttle Butkus
Leider fehlt ACL bei Standardinstallationen / Distributionen zu oft. Es ist ein Problem, den Kernel auf jedem von mir verwalteten Server zu kompilieren oder, schlimmer noch, das Dateisystem zu ändern. Außerdem müssen Sie beim Backup von Dateien sehr vorsichtig sein, besonders wenn Sie den Server wechseln. ACL ist großartig, aber die aktuelle Unterstützung ist so niedrig, dass ich es für jeden empfehlen würde, der nicht die volle Kontrolle über alles auf dem Server und der Umgebung hat. Aber +1, um ACL dort zu zeigen, wo es wirklich Sinn macht! - Ninj
Gute Antwort +1; Ein Hinweis zum Ändern der Lese- / Schreibberechtigungen für den Apache-Prozess (www-data zum Beispiel) für die ganze Site schreibgeschützt (über setfacl oder chmod - oder beides) -> Dies wird natürlich alle Schreibvorgänge blockieren (zB das Hochladen / Aktualisieren von Plugins / Modulen von der Browserseite auf den meisten CMS). Ich glaube, dass viele populäre auch nur für den Schreibzugriff auf Benutzerpermlevel nicht das Gruppenlevel prüfen. Sie können immer noch aktualisieren, aber Updates müssen manuell angewendet werden und alle benutzerdefinierten Berechtigungen für Schreibordner (logs / temp / uploads / etc). Schreibgeschützt ist eine großartige Sicherheit, wenn Ihre Website damit arbeitet. Im Großen und Ganzen nicht. - bshea


Diese Frage war fragte noch einmal, und wie besprochen Auf Metaebene bieten die aktuellen Best Practices bessere Ansätze als zu dem Zeitpunkt, als dies 2009 noch möglich war. Diese Antwort versucht einige aktuelle Lösungen zu geben kollaborative Webentwicklungsumgebungen sicher handhaben.


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

  • Haben Sie einen separaten Benutzer für jede Site d. h. nicht alle Websites bedienen www-data. Dies ist wichtig, da Apache heutzutage nur noch selten dient statisch Inhaltsdateien, aber läuft dynamisch Websites. Diese Antwort konzentriert sich auf PHP, wie es ist am gebräuchlichsten Server-Site-Sprache, aber die gleichen Prinzipien gelten auch für die anderen.

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

  • Benutzen SSH-Dateiübertragungsprotokoll (SFTP). Während die Verwendung von FTP aus Sicherheitsgründen aufgegeben werden sollte (da sowohl die Passwörter als auch der Inhalt im Klartext gesendet werden), ist es ein sicherer Ersatz. SFTP bietet auch eine Funktion, die eine perfekte Lösung für die kollaborative Webentwicklung darstellt.

    Sobald 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 auf die Site-Dateien mit ihren persönlichen Benutzerkonten zuzugreifen, wie ursprünglich vorgeschlagen - können Sie verwenden SSH-Schlüssel für die Anmeldung.

    Jeder Entwickler kann ein Schlüsselpaar erzeugen und den privaten Schlüssel geheim halten. Dann wird der öffentliche Schlüssel dem hinzugefügt ~/.ssh/authorized_keys Datei für jedes Website-Benutzerkonto, an dem der Entwickler arbeitet. Dies hat viele Vorteile für die Verwaltung der Passwörter und Logins:

    • Jeder Entwickler kann auf eine beliebige Anzahl von Websites zugreifen, ohne die Last zu haben, alle Kennwörter zu speichern oder zu speichern, die mit dem Benutzer-pro-Site-Arrangement verbunden sind.

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

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

  • Verwenden Sie PHP-FPM. Es ist der aktuelle Ansatz für die Ausführung von PHP als Benutzer. Erstelle eine neue Schwimmbad für jeden Benutzer, d. h. einen Pool für jede Site. Dies ist sowohl für die Sicherheit als auch für die Leistung am besten geeignet, da Sie auch angeben können, wie viele Ressourcen eine einzelne Site verbrauchen kann.

    Siehe z.B. NeverEndingSicherheit Führen Sie php-fpm mit separaten Benutzer / uid und Gruppe auf Linux. Es gibt Tutorials wie HowtoForge Verwendung von PHP-FPM mit Apache unter Ubuntu 16.04 Das verwendet PHP-FPM nicht zur Erhöhung der Sicherheit durch Benutzertrennung, um einen einzelnen FPM-Socket über den Server zu verwenden.


7
2018-05-10 10:03