Execute o nginx como um usuário não raiz

17

Eu segui esse processo para instalar o nginx no meu Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Eu me perdi após o ponto de criar um script init para iniciar o nginx e depois chamar /etc/init.d/nginx start. Quando fiz isso, recebi o seguinte erro:

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)

A única maneira de executá-lo é se eu usar sudoe executar o processo como root, que é o que eu não quero.

Eu tenho chowno diretório inteiro ( chown -R nginx:nginx /opt/nginx) e também chmod -R 755o diretório.

Adicionar a userdiretiva conforme sugerido pelo CS3 também me dá esse erro, mas com uma linha 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)

Alguma ideia?

John
fonte
and I've also chmod -R 755 the directory as wellContinue fazendo isso e você pagará um preço por isso eventualmente. É assustador testemunhar quantas pessoas existem na internet sugerindo isso como o primeiro porto de escala para "consertar" qualquer problema. O Unix não dará feedback amigável se você fizer algo idiota.

Respostas:

11

Primeiro de tudo, os scripts init devem ser executados

sudo /etc/init.d/name

quando você não está logado como root (quando o usuário logado está com o sudo ativado)

Em segundo lugar, quando você executa o sudo /etc/init.d/nginx start ==>, o processo mestre do nginx é acionado como root e o trabalhador como o usuário especificado na diretiva de usuário nginx.conf (por exemplo, www-data)

Você pode confirmar se todo o seu processo no nginx está sendo executado pela raiz ao emitir sudo /etc/init.d/nginx start?

com

ps aux | grep [n]ginx

por exemplo.

insira a descrição da imagem aqui

Sugestão: O Ubuntu 10.04 LTS possui excelente suporte ao pacote ubuntu da equipe nginx. Então, por que se preocupar em instalar a partir do código-fonte se você não possui requisitos para o módulo personalizado dentro do nginx?

Consulte aqui

O pacote binário já vem com os módulos necessários

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
fonte
O processo de trabalho que tenho possui um ID, não um nome. Alguma chance de que esse seja o ID do usuário nginx? Eu sou muito novo no Ubuntu. Eu não sabia que o pacote apt tinha todas essas bandeiras ativadas. Como você descobriu isso?
John
você verificou se o usuário que você especificou no seu nginx.conf existe ou não? O repo oficial não possui este Nginx! Por favor, use o PPA a partir do URL especificado
kaji
Eu usei um nome de usuário diferente, que é maior que o limite de 8 caracteres. É por isso que o ID do usuário está sendo mostrado, certo?
John John
sim que é um cenário
kaji
1
nginx -V é a sua resposta
kaji
1

Adicione a diretiva de usuário dentro do nginx.conf

Referência: http://wiki.nginx.org/CoreModule#user

Shyam Sundar CS
fonte
Desculpe, você poderia ser mais específico? Eu já fiz isso sem sucesso.
John John
A execução de qualquer coisa entre as portas 1 a 1024 requer privilégios de root. A diretiva de usuário garante que o nginx seja executado como usuário não raiz por razões de confidencialidade.
Shyam Sundar CS
Além disso, para que os logs sejam abertos e gravados, o diretório nginx deve ser mostrado ao usuário do qual você está tentando executar.
Shyam Sundar CS
1

Meus 5 comentários sobre isso

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

.. você receberá todos os outros patches, que você deve substituir na configuração fornecida personalizada ou com a opção "-g".

gaRex
fonte
O comando a seguir mostra todas as linhas da saída e destaca as que contêm o termo 'caminho':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards 13/17
0

No meu caso, havia uma referência de arquivo ausente no meu nginx.conf:

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

Tornou-se: error_log warn;

Por isso, excluí acidentalmente a referência /var/log/nginx/error.log, que causou uma mensagem de erro de permissão negada.

ilker
fonte