Como definir permissões seguras para vários usuários e vários sites?

4

Em um servidor Gentoo 3.2.12 com apache2+php , existem vários sites em execução:

/www
    /website1
    /website2
    ...etc

O usuário apache deve ter acesso somente leitura a todos os sites. Há também algumas pastas dentro de cada site, onde apache deve ter acesso de leitura / gravação (pastas de upload e similares).

Existem várias pessoas que trabalham nesses sites. Cada pessoa deve ter acesso de leitura / gravação ao (s) site (s) em que trabalha, mas não a outros. Além disso, eles devem ser capazes de definir permissões (dentro de seus sites) para que apache possa gravar em algumas pastas (bem, se elas criarem uma nova pasta de upload ou algo assim).

Outros usuários não devem ter acesso a /www .

Isso pode ser feito e como?

(PS. Também ... já que essas pessoas podem fazer upload de scripts PHP que são então executados no contexto do Apache, eu acho que eles podem acessar outros sites também, indiretamente ... é possível proteger isso também? não consigo pensar em um jeito, mas quem sabe ...)

    
por Vilx- 27.04.2012 / 11:34

2 respostas

2

Um caminho seria este:

  • Tenha um grupo para cada site, faça com que as pessoas desse grupo usem umask 0002 , para que os arquivos criados por eles sejam de leitura / gravação para o grupo e legíveis para outros por padrão.
  • chmod a-rwx do diretório raiz de cada site, para impedir o acesso de pessoas fora do grupo permitido.
  • Ative as ACLs para o seu sistema de arquivos e setfacl -m user:apache:rx esse diretório para conceder acesso de leitura ao usuário apache , além das outras permissões.

Quanto aos arquivos criados pelo processo do apache:

  • A leitura de arquivos criados pelo usuário do apache deve ser possível para o grupo relevante, desde que sejam criados legíveis pelo mundo.
  • A exclusão de arquivos é possível desde que eles residam em um diretório gravável em grupo.
  • Se isso não for suficiente, você poderá permitir que seus usuários atinjam sudo para o usuário do apache. Talvez apenas para executar comandos específicos, por ex. adicione permissões de gravação de grupo usando ACLs.

Mas, como você afirmou, todas as restrições de leitura podem ser contornadas se os usuários puderem executar scripts arbitrários como o usuário do apache. Para combater isso, você poderia tentar ter os scripts de um site executados como um usuário específico no grupo correspondente. Eu acredito que há uma maneira de configurar isso usando mod_fcgid . Caso contrário, apache[suexec] e php[cgi] podem funcionar para você.

Para obter um isolamento ainda melhor, você teria que ter vários processos do apache, executados como usuários diferentes e talvez até mesmo chrooted para diretórios diferentes. Ou em diferentes unidades OpenVZ, ou diferentes domes Xen, ou em hardware diferente. Como você pode ver, há vários níveis de isolamento diferentes, cada um fornecendo melhor isolamento do que o anterior, às custas das demandas de recursos.

    
por 11.07.2012 / 21:33
0

A solução usual para isso é suPHP .

    
por 11.07.2012 / 21:58