¿Cómo cambio el usuario de NGINX?

37

Tengo un script PHP que crea un directorio y genera una imagen en el directorio. Esto funcionaba bien con Apache, pero recientemente decidimos cambiar a NGINX para hacer un mayor uso de nuestra RAM limitada. Estoy usando el comando PHP mkdir () para crear el directorio:

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

Después del cambio a NGINX, recibo la siguiente advertencia:

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

Ya he verificado todos los permisos de los directorios principales, así que he determinado que probablemente necesito cambiar el 'usuario' de NGINX o PHP-FPM, pero no estoy seguro de cómo hacerlo (nunca tuve que especificar el usuario permisos para APACHE). Parece que no puedo encontrar mucha información sobre esto. ¡Cualquier ayuda sería genial!

(Nota: además de este pequeño problema, el cambio a NGINX ha sido bastante sencillo; lo estoy usando por primera vez y, literalmente, solo tardó unos 10 minutos en comenzar a funcionar con NGINX. Ahora solo estoy planchando fuera de las torceduras.)

David
fuente
1
Si nginx fue instalado por un administrador de paquetes, lo mejor es probablemente usar 'ps' para ver a qué usuario se está ejecutando nginx y cambiar el propietario del directorio a ese usuario. Por lo general, la seguridad está configurada bastante bien de forma predeterminada por los paquetes, el cambio de usuario puede alterar algo más.
Joachim Isaksson
nginx.confy www.confpor defecto IIRC.
PeeHaa
Si está utilizando fastcgi, verifique si puede eliminar los phpscripts. eso le permitirá ejecutar diferentes sitios bajo su usuario específico. Estoy seguro de que algunas instrucciones de configuración están disponibles en línea.
Hakre

Respuestas:

58

Ejecute nginx y php-fpm como www: www

1. Nginx

Edite nginx.conf y configure el usuario enwww www;

Si el proceso maestro se ejecuta como root, entonces nginx establecerá setuid () / setgid () en USER / GROUP. Si no se especifica GROUP, entonces nginx usa el mismo nombre que USER. Por defecto, no es usuario de nadie y nadie o nogroup group o --user = USER y --group = GROUP del script ./configure.

2. PHP-FPM

Edite php-fpm.conf y configure el usuario y el grupo en www.

usuario: usuario de procesos de Unix. Predeterminado "www-data"

group: grupo de procesos de Unix. Predeterminado "www-data"

glavić
fuente
1
De acuerdo, acabo de cambiar nginx.conf (estaba configurado en user www-data). Sin embargo, no veo ningún usuario definido en php-fpm.conf. ¿Debo agregarlo al principio usando la misma sintaxis ( user www www)?
David
La sintaxis php-conf no es la misma os nginx.conf. Encuentra [www]parte y agrega user=wwwen la siguiente línea, y group=wwwen la siguiente.
glavić
Tengo el siguiente error al reiniciar nginx: El reinicio nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David
Luego puede ejecutar Nginx y php-fpm como el usuario que tiene los permisos apropiados para los directorios apropiados o crear un nuevo usuario llamado www ejecutando "sudo useradd -g www www". Por favor, háganos saber si necesita una explicación más detallada.
Roman Prykhodchenko
1
@xorinzor: no, usa lo que tienes: D
glavić
25

En Ubuntu 14.04 en el archivo para el cambio de usuario y grupo en PHP-FPM es: /etc/php5/fpm/pool.d/www.conf. En este archivo, cambie estos parámetros:

user = www
group = www
listen.owner = www
listen.group = www
iarroyo
fuente
3
Este es también el caso de Ubuntu 16.10.
Craimasjien
1
Este es también el caso de Ubuntu 18.04
siliconrockstar
Esta sería una muy buena adición a la respuesta aceptada.
Ashkan Kh. Nazary
Para PHP 7.2 está en/etc/php/7.2/fpm/pool.d/www.conf
Cromax
6

Para responder a su pregunta real es simplemente cambiar la userlínea de la siguiente nginx.confmanera:

user    [username];

Ejemplo:

user    www-data;

El usuario preferido para que Nginx se ejecute, ya que en realidad difiere entre los sistemas operativos. A veces se supone que Nginx se ejecuta como www-data. Otras veces se supone que debe ejecutarse como nobody.

En algunos sistemas operativos (como Windows), ni siquiera importa, y la userlínea nginx.confpuede comentarse o excluirse por completo.

rubynorails
fuente
Si agrego la directiva de usuario y reinicio el servicio Nginx, arroja un error que dice que el 'usuario' es una directiva no conocida, ¿por lo tanto, está bien dejarlo fuera?
JoeTidee
Sí, dependiendo del sistema operativo y / o Nginx, algunas versiones no requieren una directiva explícita del usuario.
rubynorails
Tuve que colocar la directiva de usuario en la parte superior de mi archivo de configuración de Nginx para que sea reconocida.
JoeTidee