Hat jemand eine schöne Lösung für den Umgang mit Dateien in /var/www
? Wir betreiben namensbasierte virtuelle Hosts und der Apache 2-Benutzer ist www-data .
Wir haben zwei reguläre Benutzer und root. Also, wenn Sie mit Dateien herumspielen /var/www
, anstatt ...
chown -R www-data:www-data
... die ganze Zeit, was ist eine gute Art, damit umzugehen?
Zusatzfrage: Wie hardcore gehst du denn mit Berechtigungen um?
In kollaborativen Entwicklungsumgebungen war dies immer ein Problem.
Antworten:
Versuch, die Antwort von @ Zoredache zu erweitern , da 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ängenusermod -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 festlegen, 7 = rwx für Eigentümer (root), 7 = rwx für Gruppe (www-pub), 5 = rx für Welt (einschließlich Apache-WWW-Datenbenutzer)Das Set Group 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), um die Benutzer-ID zu kopieren, und STICKY (1), bei dem meines Erachtens nur der Eigentümer Dateien löschen kann.
Es gibt eine
-R
rekursive Option, die jedoch nicht zwischen Dateien und Ordnern unterscheidet. Daher müssen Sie find wie folgt verwenden :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 für die Dateierstellung. 0002 bedeutet, dass die Dateien 664 und die Verzeichnisse 775 haben. Wenn Sie dies festlegen (durch Bearbeiten der
umask
Zeile unten/etc/profile
in meinem Fall), bedeutet dies, dass Dateien, die von einem Benutzer erstellt wurden, von anderen Benutzern im WWW-Verzeichnis geschrieben werden können. Gruppe ohne sie zu brauchenchmod
.Testen Sie all dies, indem Sie eine Datei und ein Verzeichnis erstellen und den Eigentümer, die Gruppe und die Berechtigungen mit überprüfen
ls -l
.Hinweis: Sie müssen sich abmelden / anmelden, damit Änderungen an Ihren Gruppen wirksam werden!
quelle
find
Befehl empfehlen . Ein kleiner Leistungstipp, den ich geben würde, wenn Sie viele Dateien / Verzeichnisse haben und GNU find verwenden, ist die Verwendung von+
anstatt,\;
damit der Befehl für mehrere Dateien ausgeführt wird, weil "es schneller ist, einen Befehl für so viele Dateien wie möglich auszuführen Dies spart Zeit, die benötigt wird, um den Befehl jedes Mal zu starten. " Es ist auch einfacher zu tippen, da kein Backslash erforderlich ist.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.
Dies bedeutet, dass jede neue Datei, die von einem Ihrer Benutzer erstellt wird, Benutzername sein sollte: www-pub 0664 und jedes Verzeichnis, das erstellt wird, 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 Anpassen der umask ist erforderlich, um sicherzustellen, dass das Schreibbit so eingestellt ist, dass jeder in der Gruppe die Dateien bearbeiten kann.
Was das Hardcore angeht, gehe ich auf Berechtigungen. Es hängt komplett von der Site / dem Server ab. Wenn es nur 1-2 Editoren gibt und ich sie nur davor bewahren muss, die Dinge zu brechen, werde ich es einfach machen. Wenn das Geschäft etwas Komplexeres erfordert, würde ich etwas Komplexeres einrichten.
quelle
Ich denke, Sie werden POSIX ACL (Access Control Lists) als hilfreich empfinden. Sie ermöglichen ein detaillierteres Berechtigungsmodell im Vergleich zum Modell user: group: other. Ich habe festgestellt, dass sie sich leichter im Kopf behalten lassen, da ich expliziter sein und auch das "Standard" -Verhalten für einen Zweig des Dateisystems festlegen kann.
Beispielsweise können Sie die Berechtigungen der einzelnen Benutzer explizit angeben:
Oder Sie können dies basierend auf einer freigegebenen Gruppe tun:
Und vielleicht möchten Sie Ihren Apache-Benutzer schreibgeschützt lassen
Manpages:
Lernprogramm
quelle
www-data
für den Apache-Prozess ( z. B.) auf Nur-Lesen für die gesamte Site (über setfacl oder chmod - oder beides) die meisten CMS zum Beispiel). Ich glaube, viele beliebte testen auch nur den Schreibzugriff auf Benutzerberechtigungsebene, nicht auf Gruppenebene. Sie können weiterhin aktualisieren, Aktualisierungen müssen jedoch manuell durchgeführt werden und es müssen benutzerdefinierte Berechtigungen für Schreibordner (logs / temp / uploads / etc) vergeben werden. Schreibgeschützt ist eine große Sicherheit, wenn Ihre Website damit funktioniert. Im Großen und Ganzen tun dies die meisten nicht.Diese Frage wurde erneut gestellt , und wie auf Meta diskutiert , bieten die aktuellen Best Practices bessere Ansätze als 2009, als diese gestellt wurden. Diese Antwort versucht, einige aktuelle Lösungen für den sicheren Umgang mit kollaborativen Webentwicklungsumgebungen bereitzustellen .
Für einen sicheren Webserver und eine kollaborative Entwicklung gibt es mehr als nur die Dateiberechtigungen:
Separaten Benutzer für jede Site haben, dh nicht alle Sites bedienen, die verwenden
www-data
. Dies ist wichtig, da Apache heutzutage selten nur statische Inhaltsdateien bereitstellt, sondern dynamische Websites ausführt. Diese Antwort konzentriert sich auf PHP, da es die gebräuchlichste Sprache für Server-Sites ist, aber die gleichen Prinzipien gelten auch für die anderen.Wenn Sie ein Sicherheitsproblem an einem einzelnen Standort haben, kann es sich auf jeden Standort ausbreiten, der als derselbe Benutzer ausgeführt wird. Ein Angreifer kann alles sehen, was der Benutzer sieht, einschließlich der Datenbankanmeldeinformationen, und jede Site ändern, für die der Benutzer Schreibberechtigungen hat.
Verwenden Sie das SSH File Transfer Protocol (SFTP). Während die Verwendung von FTP aus Sicherheitsgründen aufgegeben werden sollte (da sowohl die Kennwörter als auch der Inhalt im Nur-Text-Format gesendet werden), bietet SFTP als sicherer Ersatz eine Funktion, die eine perfekte Lösung für die gemeinsame 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 Kennwö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
~/.ssh/authorized_keys
für jedes Website-Benutzerkonto, an dem der Entwickler arbeitet , zur Datei 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 freigeben, 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, um PHP als Benutzer auszuführen. Erstellen Sie einen neuen Pool für jeden Benutzer, dh einen Pool pro Standort. Dies ist sowohl für die Sicherheit als auch für die Leistung am besten, da Sie auch angeben können, wie viel Ressourcen eine einzelne Site verbrauchen kann.
Siehe zB NeverEndingSecurity's Run php-fpm mit separater Benutzer-ID und Gruppe unter Linux . Es gibt Tutorials wie HowtoForges Using PHP-FPM with Apache unter Ubuntu 16.04 , die kein PHP-FPM verwenden, um die Sicherheit durch Benutzertrennung zu erhöhen.
quelle