É possível no nginx configurar usuário diferente por host virtual?
Algo como
server {
user myprojectuser myprojectgroup;
...
}
Não, porque todas as sub-rotinas de servidor em uma configuração nginx são atendidas do mesmo conjunto de processos de trabalho. Além disso, do ponto de vista da segurança, é melhor executá-lo dessa maneira, pois significa que o conteúdo é automaticamente não gravável pelo servidor da web (ausência de estupidez como a chmod -R 0777
), para que, se houver uma vulnerabilidade no nginx, nenhum conteúdo está em risco.
www-data
e permissões0710
quando você configurar o vhost (já que ele precisa do root para configurar o nginx, não é um problema ter sua automação também configurando as permissões necessárias). Então o conteúdo do docroot só precisa sero+x
para diretórios eo+r
arquivos.www-data
, todo usuário que pode servir um script PHP ou um processo cgi-bin poderá acessar qualquer arquivo acessível aowww-data
usuário. Parece não ser óbvio para quem armazena senhas de banco de dadosconfig.php.inc
ou similares em uma máquina compartilhada.peter
ejohn
. Eles estão hospedando suas páginas na web~/public_html
. Na ausência de uma abordagem diferente, não mencionada por nenhuma das pessoas que discutiu isso acima, um script .php tem as mesmas permissões que o servidor da web que ele também está executandowww-data
. Isso significa que, assim como o servidor da web e o interpretador PHP, ele pode ler qualquer outro script .php.Sim. É possível e recomendado para segurança extra (veja o porquê abaixo).
Considerando que você está usando PHP-FPM (você provavelmente é, como é o mais comum), você pode criar um spool, de propriedade de um usuário diferente, para cada domínio.
1. Crie spools:
Adicione os spools
/etc/php/7.0/fpm/pool.d/www.conf
ou crie um novo.conf
arquivo para cada novo spool.Carretel # 1 (myuser1):
Carretel # 2 (myuser2):
PS: Mantenha seu listen.owner / listen.group no mesmo usuário do nginx (geralmente www-data ).
2. Atribua cada spool ao seu bloco de servidor (host virtual para usuários do apache):
Anfitrião 1:
Anfitrião 2:
Reinicie os serviços FPM e NGINX
Teste:
Crie um arquivo pinfo.php (ou qualquer outro nome) que mostre o usuário do processo atual:
Ou crie o arquivo pinfo.php via bash:
Em seguida, abra " http: //.../pinfo.php " no seu navegador.
Por que usar vários usuários (razões de segurança):
Se você executar todos os seus sites com o mesmo usuário ( www-data ), uma chamada PHP para system () / passthru () / exec () terá acesso a todos os sites! O NGINX não o protegerá contra isso. O PHP é apenas um exemplo, mas qualquer linguagem popular de servidor da web tem chamadas semelhantes. Como hacker, você pode " ls .. " para navegar por todos os sites e " cp / echo / mv " para escrever seu próprio código em qualquer arquivo (incluindo outros arquivos de site). Mesmo que todos os sites no servidor sejam de propriedade da mesma pessoa (ex. Você), é aconselhável executar cada site com um usuário diferente, pois isso impedirá que hackers / vírus eventuais (ex. Vírus do Wordpress) acessem seus outros sites.
fonte
Em resposta ao comentário de Ivan acima e que parece aplicável ao OP. Duas coisas:
A raiz do documento do aplicativo seria algo como
/blah/peterWeb/html
e/blah/johnWeb/html
. O NGINX e o Apache2 não permitiriam que um examinasse ou operasse no outro diretório, mesmo se ambos estivessem executando o www-data como grupo.Colocar cada árvore de diretório sob sua própria permissão de usuário permitiria que cada usuário ssh / logon em um sistema UNIX e mantivesse seus diretórios privados para cada um - apenas não coloque cada usuário no grupo www-data. Se você concorda, então sua sentença:
pode ser escrito com mais precisão como:
EDIT 1: Tendo que resolver alguns problemas de administração do servidor, examinei mais detalhadamente este tópico. Eu não sabia o quão precisas eram as informações de Ivan! Se você pretende dar aos usuários a capacidade de fazer upload e executar scripts em uma configuração de hospedagem compartilhada, preste atenção. Aqui está uma abordagem . Gorjeta de chapéu para Ivan por ter certeza de que entendi essa vulnerabilidade.
fonte
www-data
. Se Johnny puder criar um script e executá-lowww-data
(que em configurações ingênuas ele pode), o script de Johnny poderá ler os scripts de Peter e enviá-los de volta para Johnny. Isso não tem nada a ver com grupos. A solução adequada é ter o suPHP (se for configurado de maneira ingênua, ruim, pois um código mal escrito compromete todos os arquivos deste usuário), ou uma prisão ou um usuário da web adicional por usuário.