Wie ändere ich den NGINX-Benutzer?

37

Ich habe ein PHP-Skript, das ein Verzeichnis erstellt und ein Bild an das Verzeichnis ausgibt. Dies hat unter Apache einwandfrei funktioniert, aber wir haben kürzlich beschlossen, auf NGINX umzusteigen, um unseren begrenzten Arbeitsspeicher besser zu nutzen. Ich benutze den PHP-Befehl mkdir (), um das Verzeichnis zu erstellen:

mkdir(dirname($path['image']['server']), 0755, true);

Nach dem Wechsel zu NGINX wird folgende Warnung angezeigt:

Warning: mkdir(): Permission denied in ...

Ich habe bereits alle Berechtigungen der übergeordneten Verzeichnisse überprüft. Daher habe ich festgestellt, dass ich wahrscheinlich den NGINX- oder PHP-FPM-Benutzer ändern muss, bin mir aber nicht sicher, wie ich das tun soll (ich musste nie einen Benutzer angeben) Berechtigungen für APACHE). Ich kann nicht viele Informationen dazu finden. Jede Hilfe wäre toll!

(Hinweis: Abgesehen von dieser kleinen Unterbrechung war der Wechsel zu NGINX ziemlich nahtlos. Ich benutze es zum ersten Mal und es dauerte buchstäblich nur etwa 10 Minuten, um mit NGINX in Betrieb zu gehen. Jetzt bügele ich nur noch raus die knicke.)

David
quelle
1
Wenn nginx von einem Paketmanager installiert wurde, ist es wahrscheinlich das Beste, einfach 'ps' zu verwenden, um zu sehen, unter welchem ​​Benutzer nginx ausgeführt wird, und den Eigentümer des Verzeichnisses in diesen Benutzer zu ändern. Normalerweise ist die Sicherheit durch die Pakete ziemlich gut eingestellt, ein Benutzerwechsel kann etwas anderes stören.
Joachim Isaksson
nginx.confund www.confstandardmäßig IIRC.
PeeHaa
Wenn Sie fastcgi verwenden, prüfen Sie, ob Sie die PHP-Skripte auslesen können. Auf diese Weise können Sie verschiedene Websites unter ihrem spezifischen Benutzer ausführen. Ich bin sicher, dass einige Setup-Anweisungen online verfügbar sind.
Hakre

Antworten:

58

Führen Sie nginx & php-fpm als www: www aus

1. Nginx

Bearbeiten Sie die Datei nginx.conf und setzen Sie den Benutzer aufwww www;

Wenn der Master-Prozess als root ausgeführt wird, setzt nginx uid () / setgid () auf USER / GROUP. Wenn GROUP nicht angegeben ist, verwendet nginx denselben Namen wie USER. Standardmäßig ist es nobody user und nobody oder nogroup group oder --user = USER und --group = GROUP aus dem Skript ./configure.

2. PHP-FPM

Bearbeite die php-fpm.conf und setze Benutzer und Gruppe auf www.

user - Unix-Benutzer von Prozessen. Standard "www-Daten"

group - Unix-Gruppe von Prozessen. Standard "www-Daten"

glavić
quelle
1
Okay, ich habe gerade die nginx.conf geändert (sie wurde auf gesetzt user www-data). Allerdings sehe ich nicht jeden Benutzer definiert in php-fpm.conf. Sollte ich es einfach mit der gleichen Syntax ( user www www) nach oben setzen?
David
Die Syntax von php-conf stimmt nicht mit der von nginx.conf überein. Finden Sie ein [www]Teil und fügen Sie es user=wwwin der nächsten Zeile und group=wwwin der nächsten hinzu.
Glavić
Ich habe die folgende Fehlermeldung beim Neustart nginx: Neustarten von nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David
Dann können Sie entweder Nginx und php-fpm als Benutzer mit den entsprechenden Berechtigungen für die entsprechenden Verzeichnisse ausführen oder einen neuen Benutzer mit dem Namen www erstellen, indem Sie "sudo useradd -g www www" ausführen. Bitte lassen Sie es uns wissen, wenn Sie genauere Erklärungen benötigen.
Roman Prykhodchenko
1
@xorinzor: nein, benutze was du hast: D
glavić
24

In Ubuntu 14.04 die Datei zu ändern Benutzer und Gruppen in PHP-FPM ist: /etc/php5/fpm/pool.d/www.conf. In dieser Datei ändern Sie diese Parameter:

user = www
group = www
listen.owner = www
listen.group = www
iarroyo
quelle
3
Dies gilt auch für Ubuntu 16.10.
Craimasjien
1
Dies gilt auch für Ubuntu 18.04
siliconrockstar
Dies wäre eine sehr gute Ergänzung zu der akzeptierten Antwort.
Ashkan Kh. Nazary
Für PHP 7.2 ist es in/etc/php/7.2/fpm/pool.d/www.conf
Cromax
6

Um Ihre eigentliche Frage zu beantworten, müssen Sie nur die userZeile nginx.confwie folgt ändern :

user    [username];

Beispiel:

user    www-data;

Der bevorzugte Benutzer für die Ausführung von Nginx unterscheidet sich je nach Betriebssystem. Manchmal soll Nginx als laufen www-data. Ein anderes Mal soll es eigentlich so laufen nobody.

Auf einigen Betriebssystemen (wie Windows) spielt es keine Rolle, und der userLine-In nginx.confkann auskommentiert oder gänzlich ausgeschlossen werden.

rubynorails
quelle
Wenn ich die Benutzeranweisung hinzufüge und den Nginx-Dienst neu starte, wird ein Fehler ausgegeben, der besagt, dass der Benutzer eine unbekannte Anweisung ist. Ist es daher in Ordnung, ihn einfach wegzulassen?
JoeTidee
Ja, je nach Betriebssystem und / oder Nginx erfordern einige Versionen keine explizite Benutzeranweisung.
Rubynorails
Ich musste die Benutzeranweisung ganz oben in meiner Nginx-Konfigurationsdatei platzieren, damit sie erkannt wurde.
JoeTidee