Comment changer l'utilisateur NGINX?

37

J'ai un script PHP qui crée un répertoire et affiche une image dans le répertoire. Cela fonctionnait très bien sous Apache, mais nous avons récemment décidé de passer à NGINX pour utiliser davantage notre RAM limitée. J'utilise la commande PHP mkdir () pour créer le répertoire:

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

Après le passage à NGINX, je reçois l'avertissement suivant:

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

J'ai déjà vérifié toutes les autorisations des répertoires parents. J'ai donc déterminé que je devais probablement changer «l'utilisateur» de NGINX ou de PHP-FPM, mais je ne savais pas trop comment procéder (je n'ai jamais eu à spécifier utilisateur. autorisations pour APACHE). Je n'arrive pas à trouver beaucoup d'informations à ce sujet. Toute aide est la bienvenue!

(Remarque: outre ce petit blocage, le passage à NGINX s’est fait sans heurts; je l’utilise pour la première fois et il ne m'a fallu que 10 minutes environ pour me familiariser avec NGINX. Maintenant, je repasse les binks.)

David
la source
1
Si nginx a été installé par un gestionnaire de paquets, le mieux est probablement d'utiliser simplement 'ps' pour voir quel utilisateur est exécuté nginx et de changer le propriétaire du répertoire en cet utilisateur. Habituellement, la sécurité est assez bien configurée par les paquetages. Changer d’utilisateur peut perturber autre chose.
Joachim Isaksson le
nginx.confet www.confpar défaut IIRC.
PeeHaa
Si vous utilisez fastcgi, vérifiez si vous pouvez utiliser les scripts phps. cela vous permettra d'exécuter différents sites sous leur utilisateur spécifique. Je suis sûr que certaines instructions d'installation sont disponibles en ligne.
hakre

Réponses:

58

Exécutez nginx & php-fpm en tant que www: www

1. Nginx

Editez nginx.conf et définissez l' utilisateur surwww www;

Si le processus principal est exécuté en tant que root, nginx définira setuid () / setgid () sur USER / GROUP. Si GROUP n'est pas spécifié, nginx utilise le même nom que USER. Par défaut, il s’agit de l’utilisateur nobody et du groupe nobody ou nogroup ou de l’utilisateur --user = USER et --group = GROUP du script ./configure.

2. PHP-FPM

Éditez php-fpm.conf et définissez l'utilisateur et le groupe sur www.

utilisateur - utilisateur Unix de processus. Par défaut "www-data"

group - groupe de processus Unix. Par défaut "www-data"

Glavić
la source
1
D'accord, je viens de changer nginx.conf (il était réglé sur user www-data). Cependant, je ne vois aucun utilisateur défini dans php-fpm.conf. Devrais-je simplement l'ajouter en utilisant la même syntaxe ( user www www)?
David le
La syntaxe php-conf n'est pas la même que os nginx.conf. Trouvez une [www]partie et ajoutez-la user=wwwà la ligne suivante et group=wwwà la suivante.
glavić
Je suis l'erreur suivante lors du redémarrage nginx: nginx Redémarrage: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David le
Ensuite, vous pouvez exécuter Nginx et php-fpm en tant qu'utilisateur disposant des autorisations appropriées pour les répertoires appropriés ou créer un nouvel utilisateur appelé www en exécutant "sudo useradd -g www www". S'il vous plaît laissez-nous savoir, si vous avez besoin d'explications plus détaillées.
Roman Prykhodchenko
1
@xorinzor: non, utilisez ce que vous avez: D
glavić
25

Dans Ubuntu 14.04 le fichier au changement utilisateur et groupe dans PHP-FPM est: /etc/php5/fpm/pool.d/www.conf. Dans ce fichier, modifiez ces paramètres:

user = www
group = www
listen.owner = www
listen.group = www
Iarroyo
la source
3
C'est également le cas pour Ubuntu 16.10.
Craimasjien
1
C'est également le cas pour Ubuntu 18.04
siliconrockstar
Ce serait un très bon ajout à la réponse acceptée.
Ashkan Kh. Nazary
Pour PHP 7.2 c'est dans/etc/php/7.2/fpm/pool.d/www.conf
Cromax
6

Pour répondre à votre question, il suffit de modifier la userligne de la nginx.confmanière suivante:

user    [username];

Exemple:

user    www-data;

L’utilisateur privilégié pour Nginx s’exécute en réalité selon les systèmes d’exploitation. Parfois, Nginx est supposé fonctionner en tant que www-data. D'autres fois, il est censé fonctionner comme nobody.

Sur certains systèmes d'exploitation (tels que Windows), cela n'a pas d'importance, et l' entrée useren ligne nginx.confpeut être commentée ou totalement exclue.

rubynorails
la source
Si j'ajoute la directive utilisateur et que je redémarre le service Nginx, une erreur est générée, indiquant que l'utilisateur est une directive non connue - est-il correct de le laisser de côté?
JoeTidee
Oui, selon le système d'exploitation et / ou Nginx, certaines versions ne nécessitent pas de directive utilisateur explicite.
rubynorails
Je devais placer la directive user tout en haut de mon fichier de configuration Nginx pour qu'elle soit reconnue.
JoeTidee