GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der beste Weg, um Berechtigungen für die www-Benutzerdaten von Apache 2 in /var/www zu handhaben?

Lösung 1:

Versuch, die Antwort von @Zoredache zu erweitern, da ich es selbst versuche:

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

    06

    15 ## muss -a verwenden, um an bestehende Gruppen anzuhängen

    27

    39 ## Anzeigegruppen für Benutzer

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

    46 ## -R für rekursiv

  • Ändern Sie die Berechtigungen aller Ordner auf 2775

    56 ## 2=Gruppen-ID festlegen, 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 des Gruppen-ID-Bits (SETGID) (2) bewirkt, dass die Gruppe (www-pub) in alle neuen Dateien/Ordner kopiert wird, die in diesem Ordner erstellt werden. Andere Optionen sind SETUID (4), um die Benutzer-ID zu kopieren, und STICKY (1), was meiner Meinung nach nur den Besitzer Dateien löschen lässt.

    Da ist ein 63 rekursive Option, aber das wird nicht zwischen Dateien und Ordnern unterscheiden, also müssen Sie find verwenden, etwa so:

    71

  • Ändern Sie alle Dateien in 0664

    86

  • Ändern Sie die umask für Ihre Benutzer auf 0002

    Die umask steuert die standardmäßigen Berechtigungen zum Erstellen von Dateien, 0002 bedeutet, dass Dateien 664 und Verzeichnisse 775 haben Zeile am Ende von 103 in meinem Fall) bedeutet, dass Dateien, die von einem Benutzer erstellt wurden, von anderen Benutzern in der www-Gruppe beschreibbar sind, ohne dass 115 erforderlich ist sie.

Testen Sie all dies, indem Sie eine Datei und ein Verzeichnis erstellen und den Eigentümer, die Gruppe und die Berechtigungen mit 122 überprüfen .

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

Lösung 2:

Ich bin mir nicht ganz sicher, wie Sie die Berechtigungen konfigurieren möchten, aber dies kann Ihnen einen Ausgangspunkt geben. Wahrscheinlich gibt es bessere Wege. Ich nehme an, 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 zu dieser Gruppe hinzu.
  • Ändern Sie den Besitz von allem unter /var/www zu root:www-pub.
  • Ändern Sie die Berechtigungen aller Ordner auf 2775
  • Ändern Sie alle Dateien auf 0664.
  • Ändern Sie die umask für Ihre Benutzer auf 0002

Das bedeutet, dass jede neue Datei, die von einem Ihrer Benutzer erstellt wird, Benutzername:www-pub 0664 und jedes Verzeichnis, das erstellt wird, Benutzername:www-pub 2775 sein sollte. Apache erhält über die Komponente „andere Benutzer“ Lesezugriff auf alles. Das SETGID-Bit in den Verzeichnissen erzwingt, dass alle Dateien, die erstellt werden, der Gruppe gehören, die den Ordner besitzt. Das Anpassen der umask ist erforderlich, um sicherzustellen, dass das Schreibbit gesetzt ist, sodass jeder in der Gruppe die Dateien bearbeiten kann.

Wie hart 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 sehr kaputt zu machen, dann werde ich es einfach angehen. Wenn das Geschäft etwas Komplexeres erfordern würde, würde ich etwas Komplexeres einrichten.

Lösung 3:

Ich denke, Sie finden POSIX ACL (Zugriffskontrolllisten) hilfreich. Sie ermöglichen ein feineres Berechtigungsmodell im Vergleich zum user:group:other-Modell. 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 gemeinsamen Gruppe tun:

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

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

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

Handbuchseiten:

  • setfacl
  • getfacl

Anleitung

Lösung 4:

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

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

  • Separaten Benutzer für jede Website haben d. h. nicht alle Websites mit 135 bedienen . Dies ist wichtig, da Apache heutzutage selten nur statisch bedient Inhaltsdateien, aber dynamisch ausgeführt Webseiten. Diese Antwort konzentriert sich auf PHP, da es die gebräuchlichste Server-Site-Sprache ist, aber die gleichen Prinzipien gelten auch für die anderen.

    Wenn Sie ein Sicherheitsproblem auf einer einzelnen Site haben, kann es sich auf alle Sites ausbreiten, die unter demselben Benutzer ausgeführt werden. Ein Angreifer kann alles sehen, was der Benutzer sieht, einschließlich Datenbank-Anmeldeinformationen, und jede Site ändern, für die der Benutzer Schreibberechtigungen hat.

  • Verwenden Sie SSH File Transfer Protocol (SFTP). Während die Verwendung von FTP aus Sicherheitsgründen aufgegeben werden sollte (da es sowohl die Passwörter als auch den Inhalt im Klartext sendet), hat der sichere Ersatz von SFTP auch eine Funktion, die eine perfekte Lösung für die kollaborative Webentwicklung darstellt.

    Sobald Sie die Sites und einen Benutzer pro Site 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 den Zugriff auf die Site-Dateien über ihre persönlichen Benutzerkonten wie ursprünglich vorgeschlagen – können Sie SSH-Schlüssel für die Anmeldung verwenden.

    Jeder Entwickler kann Schlüsselpaare generieren und den privaten Schlüssel geheim halten. Dann wird der öffentliche Schlüssel zu 142 hinzugefügt 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 sich alle Passwörter merken oder speichern zu müssen, die mit der Benutzer-pro-Site-Anordnung verbunden sind.

    • Die Passwörter müssen nicht jedes Mal geändert und weitergegeben werden, wenn jemand das Unternehmen verlässt.

    • Sie können sehr sichere Passwörter verwenden oder die passwortbasierte Anmeldung ganz deaktivieren.

  • Verwenden Sie PHP-FPM . Dies ist der aktuelle Ansatz, um PHP als Benutzer auszuführen. 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, da Sie auch angeben können, wie viele Ressourcen eine einzelne Site verbrauchen darf.

    Siehe z.B. NeverEndingSecurity's Führen Sie php-fpm mit separatem Benutzer/UID und Gruppe unter Linux aus. Es gibt Tutorials wie HowtoForge's Using PHP-FPM with Apache on Ubuntu 16.04, die PHP-FPM nicht verwenden, um die Sicherheit durch Benutzertrennung zu erhöhen, und führen zur Verwendung eines einzigen FPM-Sockets auf dem Server.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Unterschied zwischen /var/log/messages, /var/log/syslog und /var/log/kern.log?

  3. Was ist der beste Weg, um ein Signal an alle Mitglieder einer Prozessgruppe zu senden?

  4. Verwenden Sie ein Git-Repository auf /var/www/html/

  5. Django static_root in /var/www/... - keine Berechtigungen für collectstatic

Der richtige Weg zum Bearbeiten von /etc/passwd- und /etc/group-Dateien unter Linux

Beschränken Sie den FTP-Zugriff nur auf /var/www mit Vsftpd?

UNIX/Linux:Was ist die korrekte Berechtigung für die Verzeichnisse /tmp und /var/tmp?

Schreibberechtigung über Filezilla sftp nach /var/www/html verweigert

Was ist der Unterschied zwischen /tmp und /run?

Wie richte ich Linux-Berechtigungen für den WWW-Ordner ein?