Exécutez nginx en tant qu'utilisateur non root

17

J'ai suivi ce processus pour installer nginx sur mon serveur Lucid Ubuntu 10.04 http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Je me suis perdu après avoir créé un script init pour démarrer nginx, puis appelé /etc/init.d/nginx start. Quand j'ai fait ça, j'ai eu l'erreur suivante:

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:17:27 [emerg] 859#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

La seule façon dont je peux l'exécuter est si j'utilise sudoet qu'il exécute le processus en tant que root, ce que je ne veux pas.

J'avais chowntout le répertoire ( chown -R nginx:nginx /opt/nginx) et j'ai aussi chmod -R 755le répertoire.

L'ajout de la userdirective comme suggéré par CS3 me donne également cette erreur, mais avec une ligne supplémentaire.

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:48:34 [warn] 1606#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/nginx/conf/nginx.conf:2
2012/03/16 18:48:34 [emerg] 1606#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

Des idées?

John
la source
and I've also chmod -R 755 the directory as wellContinuez à faire cela et vous en paierez éventuellement le prix. Il est effrayant de voir combien de personnes sur Internet suggèrent cela comme premier port d'escale pour «résoudre» tout problème. Unix ne donnera pas de commentaires amicaux si vous faites quelque chose de stupide.

Réponses:

11

Tout d'abord, les scripts d'initialisation sont censés être exécutés

sudo /etc/init.d/name

lorsque vous n'êtes pas connecté en tant que root (lorsque l'utilisateur connecté est activé par sudo)

Deuxièmement, lorsque vous exécutez sudo /etc/init.d/nginx start ==> il déclenche le processus maître nginx en tant que processus racine et travailleur en tant qu'utilisateur que vous avez spécifié dans votre directive utilisateur nginx.conf (par exemple www-data)

Pouvez-vous confirmer si tous vos processus sous nginx sont exécutés par root lors de l'émission sudo /etc/init.d/nginx start?

avec

ps aux | grep [n]ginx

par exemple.

entrez la description de l'image ici

Suggestion: Ubuntu 10.04 LTS a un excellent support de paquet ubuntu de l'équipe nginx. Alors, pourquoi s'embêter à installer depuis la source si vous n'avez pas besoin d'un module personnalisé dans nginx?

Consultez ici

Le paquet binaire est déjà livré avec des modules à peu près nécessaires

nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-upstream-fair
kaji
la source
Le processus de travail que j'ai a un ID, pas un nom. Y a-t-il une chance que ce soit l'ID utilisateur nginx? Je suis assez nouveau sur Ubuntu. Je ne savais pas que le paquet apt avait tous ces drapeaux activés. Comment avez-vous découvert cela?
John
avez-vous vérifié si l'utilisateur que vous avez spécifié dans votre nginx.conf existe ou non? Le dépôt officiel n'a pas ce Nginx! Veuillez utiliser le PPA à partir de l'URL spécifiée
kaji
J'ai utilisé un nom d'utilisateur différent qui est plus long que la limite de 8 caractères. C'est pourquoi l'ID utilisateur est affiché, non?
John
ouais c'est un scénario
kaji
1
nginx -V est votre réponse
kaji
1

Ajoutez la directive utilisateur dans nginx.conf

Référence: http://wiki.nginx.org/CoreModule#user

Shyam Sundar CS
la source
Désolé, pourriez-vous être plus précis? Je l'ai déjà fait en vain.
John
L'exécution de n'importe quoi entre les ports 1 à 1024 nécessite des privilèges root. La directive utilisateur garantit que nginx s'exécute en tant qu'utilisateur non root pour des raisons de sécurité.
Shyam Sundar CS
De plus, pour que les journaux soient ouverts et écrits, le répertoire nginx doit être affiché auprès de l'utilisateur à partir duquel vous essayez d'exécuter.
Shyam Sundar CS
1

Mes 5 kopek à ce sujet

nginx -V 2>&1 | sed 's/ --/\n--/g' | grep path

.. vous obtiendrez tous les autres chemins, que vous devriez remplacer dans la configuration fournie personnalisée ou avec l'option "-g".

gaRex
la source
La commande suivante affiche toutes les lignes de la sortie et met en évidence celles contenant le terme 'chemin':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards
0

Dans mon cas, il manquait une référence de fichier dans mon nginx.conf:

error_log /var/log/nginx/error.log warn;

Est devenu: error_log warn;

J'ai donc accidentellement supprimé la référence /var/log/nginx/error.log, ce qui a provoqué un message d'erreur d'autorisation refusée.

ilker
la source