Come posso cambiare l'utente NGINX?


37

Ho uno script PHP che crea una directory e genera un'immagine nella directory. Funzionava perfettamente con Apache ma recentemente abbiamo deciso di passare a NGINX per sfruttare maggiormente la nostra RAM limitata. Sto usando il comando PHP mkdir () per creare la directory:

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

Dopo il passaggio a NGINX, ricevo il seguente avviso:

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

Ho già controllato tutte le autorizzazioni delle directory principali, quindi ho deciso che probabilmente avrei bisogno di cambiare "utente" NGINX o PHP-FPM ma non sono sicuro di come farlo (non ho mai dovuto specificare l'utente permessi per APACHE). Non riesco a trovare molte informazioni su questo. Qualsiasi aiuto sarebbe grande!

(Nota: oltre a questo piccolo blocco, il passaggio a NGINX è stato piuttosto semplice; lo sto usando per la prima volta e mi sono letteralmente bastati circa 10 minuti per alzarmi e funzionare con NGINX. Ora sto solo stirando fuori dai nodi.)


1
Se nginx è stato installato da un gestore di pacchetti, probabilmente la cosa migliore è usare semplicemente 'ps' per vedere quale utente sta eseguendo nginx e cambiare il proprietario della directory in quell'utente. Di solito la sicurezza è configurata abbastanza bene dai pacchetti di default, cambiando utente si può turbare qualcos'altro.
Joachim Isaksson,

nginx.confe www.confdi default IIRC.
PeeHaa,

Se stai usando fastcgi, controlla se riesci ad eseguire il phexcript. che ti permetterà di eseguire siti diversi sotto il loro specifico utente. Sono sicuro che alcune istruzioni di installazione sono disponibili online.
hakre,

Risposte:


58

Esegui nginx e php-fpm come www: www

1. Nginx

Modifica nginx.conf e imposta l' utente suwww www;

Se il processo principale viene eseguito come root, allora nginx setuid () / setgid () su USER / GROUP. Se GROUP non viene specificato, nginx utilizza lo stesso nome di USER. Di default è nessuno utente e nessuno o gruppo nogroup o --user = USER e --group = GROUP dallo script ./configure.

2. PHP-FPM

Modifica php-fpm.conf e imposta user e group su www.

user - Utente Unix dei processi. "Dati www" predefiniti

group - Gruppo di processi Unix. "Dati www" predefiniti


1
Okay ho appena cambiato nginx.conf (era impostato su user www-data). Tuttavia, non vedo alcun utente definito in php-fpm.conf. Devo solo aggiungerlo all'inizio usando la stessa sintassi ( user www www)?
David,

La sintassi di php-conf non è la stessa os nginx.conf. Trova la [www]parte e aggiungi user=wwwnella riga successiva e group=wwwnella riga successiva.
glavić,

Ho ottenuto il seguente errore quando si riavvia nginx: Riavvio nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David,

Quindi è possibile eseguire Nginx e php-fpm come l'utente che dispone delle autorizzazioni appropriate per le directory appropriate o creare un nuovo utente chiamato www eseguendo "sudo useradd -g www www". Fateci sapere se avete bisogno di spiegazioni più dettagliate.
Roman Prykhodchenko,

1
@xorinzor: no, usa quello che hai: D
glavić

25

In Ubuntu 14.04 il file per cambiare utente e di gruppo in PHP-FPM è: /etc/php5/fpm/pool.d/www.conf. In questo file cambia questi parametri:

user = www
group = www
listen.owner = www
listen.group = www

3
Questo è anche il caso di Ubuntu 16.10.
Craimasjien,

1
Questo è anche il caso di Ubuntu 18.04
siliconrockstar

Questa sarebbe un'ottima aggiunta alla risposta accettata.
Ashkan Kh. Nazary

Per PHP 7.2 è in/etc/php/7.2/fpm/pool.d/www.conf
Cromax il

6

Per rispondere alla tua vera domanda è solo cambiare la userlinea in questo nginx.confmodo:

user    [username];

Esempio:

user    www-data;

L'utente preferito per l'esecuzione di Nginx differisce effettivamente tra i sistemi operativi. A volte Nginx dovrebbe funzionare come www-data. Altre volte dovrebbe funzionare come nobody.

Su alcuni sistemi operativi (come Windows), non importa, e la userlinea nginx.confpuò essere commentata o completamente esclusa.


Se aggiungo la direttiva utente e riavvio il servizio Nginx, viene generato un errore che dice che "utente" è una direttiva sconosciuta. Va bene quindi lasciarlo fuori?
JoeTidee,

Sì, a seconda del sistema operativo e / o di Nginx, alcune versioni non richiedono una direttiva utente esplicita.
rubynorails,

Ho dovuto collocare la direttiva utente nella parte superiore del mio file di configurazione Nginx per poter essere riconosciuta.
Joe Tidee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.