Unter welchem ​​Benutzer sollten NGinx und PHP ausgeführt werden?

15

Berechtigungen sind etwas, das mich eine Weile mit Linux verwechselt hat. Zur Zeit werden sowohl meine NGinx- als auch meine PHP-FPM-Instanzen mit dem Benutzer und der Gruppe ausgeführt:

www-daten

Ist das Standard? Beim Hochladen von Dateien treten Probleme auf.

Beispielsweise würde eine Datei sowohl mit den Benutzer- als auch mit den Gruppen-WWW-Daten hochgeladen. Aufgrund der Einstellung der Berechtigungen (0440) in meiner Webanwendung kann ich mich nicht mit meinem normalen Konto über ssh anmelden, um diese Dateien herunterzuladen. Dies kann nicht geändert werden.

Ich dachte daran, meine Nginx- und PHP-Instanz zu ändern, um die Gruppe beizubehalten, aber sie so zu ändern, dass sie unter meinem Benutzernamen ausgeführt wird.

Wie gehe ich hier mit Berechtigungen richtig um? Danke.

Der Pixel-Entwickler
quelle

Antworten:

12

So funktioniert das: Wenn Sie sich über FTP / SSH anmelden und Dateien hochladen, werden diese mit Ihren Berechtigungen erstellt. Wahrscheinlich ist Ihr Webroot von der Welt beschreibbar (0777), das ist unsicher - jeder Benutzer im System kann dort etwas schreiben. PHP wird mit unterschiedlichen Benutzerrechten ausgeführt (diese sind in PHP-FPM config und nicht in nginx config angegeben). Da das Verzeichnis in der Welt beschreibbar ist, können auch PHP-Benutzer (www-data) dort schreiben. Eigentümer dieser Datei sind jedoch www-Daten, nicht Ihr Konto. Es handelt sich um zwei unterschiedliche Konten in der Dateisystemberechtigungsstufe.

Ich schlage vor, dass Sie einen dedizierten Benutzer mit den geringstmöglichen Rechten erstellen, der das Webroot-Verzeichnis besitzt und für den FTP / SSH-Upload verwendet wird UND PHP ausführt. Sie sollten die PHP-FPM-Konfiguration ändern. Im Worker-Bereich befinden sich die Benutzereingabe und die NGINX-Konfiguration, sodass Sie Ihre Website-Dateien nicht mehr für die ganze Welt lesbar und sicherer machen können.

Führen Sie PHP nicht mit privilegierten Benutzern (Sudo-Funktionen, Schreibrechte außerhalb von Docroot) aus, da dies zu einer Gefährdung der Serversicherheit führen könnte.

Kristaps
quelle
1
Schöne Antwort, ich habe einen neuen Benutzer erstellt, neue Ordner, alles kopiert, die richtigen Berechtigungen angewendet und den Benutzer gechrootet. Funktioniert gut. Danke.
Der Pixel-Entwickler
Könnte ich einfach meinen FTP-Benutzer zur www-dataGruppe hinzufügen, anstatt den dedizierten Benutzer zu erstellen? Löst es das Problem von @ ThePixelDeveloper? Vielen Dank.
Vladyslav Turak
2

Die www-dataBenutzer & Gruppen sind ganz normal. Es kann www oder web auf anderen Systemen sein, aber die Idee ist dieselbe: Führen Sie die Webdienste mit einem dedizierten Konto aus. Wenn also Ihr Webserver kompromittiert ist, kann der Angreifer nur auf die Dateien zugreifen, denen dieses Konto gewährt wurde.

Wenn ein Benutzer die Webservices verwalten muss, sollten Sie ihn der entsprechenden Gruppe hinzufügen (WWW-Daten) oder ihm erlauben, dem entsprechenden Benutzer su (oder sudo) zuzuweisen (immer noch WWW-Daten).

Benoit
quelle
10
Der Grund für www-data ist, dass es sich um ein Konto ohne Berechtigungen handelt. Es kann nicht in eine Datei im gesamten Dateisystem geschrieben werden, sondern nur in Dateien, die von der Welt gelesen werden können. Zuvor verwendeten Sie den integrierten Benutzer "nobody", um dies zu erreichen. Indem Sie jedoch "www-Daten" erstellen, haben Sie die Möglichkeit, diesem Benutzer das Schreiben in einige Dateien zu ermöglichen, ohne diese Dateien für die Welt beschreibbar zu machen (was schlecht ist). Das Grundprinzip, dass "www-data" in jeder anderen Hinsicht genauso privilegiert ist wie "nobody", gilt.
Thomasrutter
@ thomasrutter, soweit ich weiß, sollte ich Nginx und PHP-FPM unter dem WWW-Datenbenutzer ausführen, der zur WWW-Datengruppe gehört. Wenn ich möchte, dass dieser Benutzer zu einem Ordner read& kann write, muss ich ihm die entsprechenden Berechtigungen erteilen. In den meisten Fällen sind dies der Webstammordner /var/www/htmlund die 755Berechtigung. Habe ich recht? Vielen Dank!
Vladyslav Turak
1

Ich versuche aus Sicherheitsgründen zu vermeiden, dass Nginx / PHP Skripte ausführt, die sich im Besitz von WWW-Daten befinden.

Ed Bloom
quelle
9
Würden Sie das näher erläutern?
Karussell