Ejecute nginx como usuario no root

17

Seguí este proceso para instalar nginx en mi Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Me perdí después de crear un script de inicio para iniciar nginx, y luego llamar a /etc/init.d/nginx start. Cuando hice eso, recibí el siguiente error:

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 única forma en que puedo ejecutarlo es si lo uso sudoy ejecuta el proceso como root, que es lo que no quiero.

Tenía chowntodo el directorio ( chown -R nginx:nginx /opt/nginx) y también chmod -R 755el directorio.

Agregar la userdirectiva como lo sugiere CS3 también me da este error, pero con una línea adicional.

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)

¿Algunas ideas?

John
fuente
and I've also chmod -R 755 the directory as wellSigue haciendo esto y eventualmente pagarás un precio por ello. Da miedo presenciar cuántas personas hay en Internet sugiriendo esto como un primer puerto de escala para "solucionar" cualquier problema. Unix no dará comentarios amistosos si haces algo imbécil.

Respuestas:

11

En primer lugar, se supone que los scripts de inicio deben ejecutarse

sudo /etc/init.d/name

cuando no ha iniciado sesión como root (cuando el usuario conectado está habilitado para sudo)

En segundo lugar, cuando ejecuta sudo /etc/init.d/nginx start ==> dispara el proceso maestro nginx como procesos raíz y de trabajo como el usuario que especificó en su directiva de usuario nginx.conf (por ejemplo, www-data)

¿Puede confirmar si todo su proceso en nginx está siendo ejecutado por root al emitir sudo /etc/init.d/nginx start?

con

ps aux | grep [n]ginx

p.ej.

ingrese la descripción de la imagen aquí

Sugerencia: Ubuntu 10.04 LTS tiene una excelente compatibilidad con paquetes ubuntu del equipo nginx. Entonces, ¿por qué molestarse en instalar desde la fuente si no tiene requisitos para un módulo personalizado dentro de nginx?

Consulta aquí

El paquete binario ya viene con los módulos más necesarios.

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
fuente
El proceso de trabajo que tengo tiene una identificación, no un nombre. ¿Alguna posibilidad de que sea la identificación de usuario de nginx? Soy bastante nuevo en Ubuntu. No sabía que el paquete apt tenía todas estas banderas activadas. ¿Cómo lo descubriste?
John
¿ha verificado si el usuario que especificó en su nginx.conf existe o no? ¡El repositorio oficial no tiene este Nginx! Utilice PPA de la URL especificada
kaji
Usé un nombre de usuario diferente que es más largo que el límite de 8 caracteres. Es por eso que se muestra la identificación de usuario, ¿verdad?
John
sí, ese es un escenario
kaji
1
nginx -V es tu respuesta
kaji
1

Agregue la directiva de usuario dentro de nginx.conf

Referencia: http://wiki.nginx.org/CoreModule#user

Shyam Sundar CS
fuente
Lo siento, ¿podrías ser más específico? Ya lo hice en vano.
John
Ejecutar cualquier cosa entre los puertos 1 a 1024 requiere privilegios de root. La directiva de usuario garantiza que nginx se ejecute como usuario no root por razones de seguridad.
Shyam Sundar CS
Además, para que los registros se abran y escriban, el directorio nginx debe ser conocido por el usuario desde el que está intentando ejecutar.
Shyam Sundar CS
1

Mis 5 kopek con respecto a esto

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

.. obtendrá todos los otros parches, que debe anular en la configuración personalizada proporcionada o con la opción "-g".

gaRex
fuente
El siguiente comando muestra todas las líneas de la salida y resalta las que contienen el término 'ruta':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards
0

En mi caso, faltaba una referencia de archivo en mi nginx.conf:

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

Se convirtió en: error_log warn;

Así que accidentalmente eliminé /var/log/nginx/error.log referencia que causó un mensaje de error de permiso denegado.

ilker
fuente