Qual usuário o NGinx e o PHP devem estar executando?

15

Permissões são algo que me confundiram há algum tempo com o Linux. Portanto, no momento em que minhas instâncias NGinx e PHP-FPM estão em execução com o usuário e o grupo:

www-data

Isso é padrão? Estou com problemas quando me deparo com o upload de arquivos.

Por exemplo , um arquivo seria carregado com o usuário e o grupo www-data. Agora, devido à forma como defino as permissões (0440) no meu aplicativo Web, não consigo fazer o login via ssh com minha conta normal para baixar esses arquivos. Isso não pode ser alterado.

Eu estava pensando em mudar minha instância nginx e php para manter o grupo, mas altere-as para que funcionem sob meu nome de usuário.

Qual é a maneira correta de lidar com permissões aqui? Obrigado.

The Pixel Developer
fonte

Respostas:

12

É assim que funciona: Quando você efetua login via FTP / SSH e carrega arquivos, eles são criados com suas permissões. Provavelmente, sua raiz da web é gravável mundialmente (0777), o que é inseguro - todos os usuários do sistema podem escrever algo lá. O PHP é executado com privilégios de usuário diferentes (Eles são especificados na configuração do PHP-FPM, não na configuração do nginx) e, como o diretório é gravável mundialmente, o usuário do PHP (www-data) também pode escrever lá. Mas o proprietário desse arquivo é www-data, não sua conta. São duas contas distintas no nível de permissão do sistema de arquivos.

Eu sugiro que você crie um usuário dedicado com o mínimo de privilégios possíveis, que possuiriam o diretório webroot e seriam usados ​​para upload de FTP / SSH E executariam o php. Você deve alterar a configuração do PHP-FPM, na seção worker há entrada de usuário e configuração do NGINX, para que você possa tornar os arquivos do seu site não legíveis pelo mundo e mais seguros.

Não execute PHP com usuário privilegiado (sudo capablities, privilégios de gravação fora do docroot), que pode causar comprometimento da segurança do servidor.

Kristaps
fonte
1
Boa resposta, criei um novo usuário, novas pastas, copiei tudo, apliquei as permissões corretas e fiz o chroot do usuário. Funciona bem. Obrigado.
The Pixel Developer
Posso adicionar meu usuário de FTP ao www-datagrupo em vez de criar o usuário dedicado? Resolve o problema de @ ThePixelDeveloper? Obrigado.
Vladyslav Turak 30/01
2

O www-datausuário e o grupo são bastante padrão. Pode ser www ou web em outros sistemas, mas a idéia é a mesma: execute os serviços web com uma conta dedicada. Portanto, quando seu servidor da Web estiver comprometido, o invasor poderá acessar apenas os arquivos que esta conta foi concedida.

Se um usuário precisar gerenciar os serviços da web, adicione-o ao grupo relevante (www-data) ou permita que ele su (ou sudo) ao usuário relevante (ainda www-data).

Benoit
fonte
10
A razão para www-data é que é uma conta com zero privilégios - não pode gravar em nenhum arquivo de todo o sistema de arquivos, nem ler em nada, exceto em arquivos legíveis pelo mundo. Anteriormente, você usava o usuário interno "nobody" para conseguir isso. No entanto, ao criar "www-data", você tem a possibilidade de permitir a esse usuário gravar em alguns arquivos, sem precisar torná-los graváveis ​​no mundo (o que é ruim). O princípio básico de que "www-data" é tão privilegiado quanto "ninguém" em todos os sentidos é válido.
thomasrutter
@thomasrutter, pelo que entendi, eu deveria executar o Nginx e o PHP-FPM no usuário www-data que está no grupo www-data. Se eu quiser que esse usuário possa read& writepara alguma pasta, preciso conceder a ele as permissões adequadas. Na maioria dos casos, isso seria pasta raiz /var/www/htmle 755permissão da web . Estou certo? Obrigado!
Vladyslav Turak
1

Tento evitar que o nginx / php execute scripts pertencentes ao www-data por motivos de segurança.

Ed Bloom
fonte
9
você elaboraria isso?
28414 Karussell