Como altero o usuário do NGINX?

37

Eu tenho um script PHP que cria um diretório e gera uma imagem para o diretório. Isso estava funcionando muito bem no Apache, mas recentemente decidimos mudar para o NGINX para fazer mais uso de nossa RAM limitada. Estou usando o comando PHP mkdir () para criar o diretório:

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

Após a mudança para NGINX, recebo o seguinte aviso:

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

Eu já verifiquei todas as permissões dos diretórios pai, então concluí que provavelmente preciso alterar o 'usuário' do NGINX ou PHP-FPM, mas não tenho certeza de como fazer isso (nunca precisei especificar o usuário permissões para o APACHE). Não consigo encontrar muita informação sobre isso. Qualquer ajuda seria ótimo!

(Nota: além dessa pequena interrupção, a mudança para o NGINX foi bastante fácil; estou usando pela primeira vez e, literalmente, levou apenas 10 minutos para começar a operar com o NGINX. Agora estou passando a ferro as torções.)

David
fonte
1
Se o nginx foi instalado por um gerenciador de pacotes, o melhor é provavelmente usar 'ps' para ver como o usuário nginx está sendo executado e alterar o proprietário do diretório para esse usuário. Normalmente, a segurança é configurada muito bem por padrão pelos pacotes, mudar de usuário pode perturbar outra coisa.
Joachim Isaksson
nginx.confe www.confpor padrão IIRC.
PeeHaa
Se você estiver usando o fastcgi, verifique se você pode suexec os phpscripts. que permitirá que você execute sites diferentes sob o usuário específico deles. Tenho certeza de que algumas instruções de configuração estão disponíveis online.
hakre 29/09/12

Respostas:

58

Execute nginx e php-fpm como www: www

1. Nginx

Edite nginx.conf e defina user comowww www;

Se o processo mestre for executado como raiz, o nginx configurará () / setgid () para USER / GROUP. Se GROUP não for especificado, o nginx usará o mesmo nome que USER. Por padrão, é ninguém usuário e ninguém ou grupo nogroup ou o --user = USER e --group = GROUP do script ./configure.

2. PHP-FPM

Edite php-fpm.conf e defina usuário e grupo como www.

usuário - usuário de processos Unix. "Www-data" padrão

group - grupo de processos Unix. "Www-data" padrão

glavić
fonte
1
Ok, acabei de alterar o nginx.conf (foi definido como user www-data). No entanto, não vejo nenhum usuário definido em php-fpm.conf. Devo apenas adicioná-lo ao topo usando a mesma sintaxe ( user www www)?
David
A sintaxe php-conf não é a mesma os nginx.conf. Encontre uma [www]peça e adicione user=wwwna próxima linha e group=wwwna próxima.
glavić
Eu tenho o seguinte erro ao reiniciar nginx: Reiniciando o nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David
Em seguida, você pode executar Nginx e php-fpm como o usuário que possui permissões apropriadas para os diretórios apropriados ou criar um novo usuário chamado www executando "sudo useradd -g www www". Informe-nos se precisar de explicações mais detalhadas.
Roman Prykhodchenko
1
@xorinzor: não, use o que você tem: D
glavić
25

No Ubuntu 14.04 o arquivo para a mudança de usuário e grupo em PHP-FPM é: /etc/php5/fpm/pool.d/www.conf. Neste arquivo, altere estes parâmetros:

user = www
group = www
listen.owner = www
listen.group = www
iarroyo
fonte
3
Este também é o caso do Ubuntu 16.10.
Craimasjien
1
Este também é o caso do Ubuntu 18.04
siliconrockstar
Isso seria uma adição muito boa à resposta aceita.
Ashkan Kh. Nazary
Para o PHP 7.2 está em/etc/php/7.2/fpm/pool.d/www.conf
Cromax
6

Para responder à sua pergunta real, basta alterar a userlinha da seguinte nginx.confmaneira:

user    [username];

Exemplo:

user    www-data;

O usuário preferido para executar o Nginx como realmente difere entre os sistemas operacionais. Às vezes, o Nginx deve funcionar como www-data. Outras vezes, na verdade, ele deve ser executado como nobody.

Em alguns sistemas operacionais (como o Windows), isso nem importa, e a entrada de userlinha nginx.confpode ser comentada ou totalmente excluída.

rubynorails
fonte
Se eu adicionar a diretiva de usuário e reiniciar o serviço Nginx, ele emitirá um erro dizendo que o 'usuário' é uma diretiva desconhecida - portanto, não há problema em deixá-la de fora?
JoeTidee
Sim, dependendo do sistema operacional e / ou Nginx, algumas versões não exigem uma diretiva de usuário explícita.
rubynorails
Eu tive que colocar a diretiva de usuário no topo do meu arquivo de configuração do Nginx para que ela fosse reconhecida.
JoeTidee