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ängen27
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 dass115
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.