multiuser ambiente PHP virtualhosting e segurança

2

Eu gostaria de configurar um ambiente multiusuário PHP virtualhosting.

No entanto, aqui vem minha grande preocupação. Os usuários podem usar as funções do sistema de arquivos PHP para acessar os outros diretórios de usuários, assim, ler os arquivos de origem e obter acesso imediato a senhas de bancos de dados e outros tipos de dados confidenciais.

Eu tenho procurado muitos recursos para resolver esse problema. No entanto, nenhum deles parece satisfatório para mim.

Existe alguma maneira de executar o PHP em um ambiente setuid para cada um dos VirtualHosts definidos pelo Apache? Alguém já passou por essa configuração que pode me orientar sobre as etapas necessárias para isso? Como as grandes empresas de hospedagem estão fazendo isso?

Obrigado Corin

    
por gucki 14.12.2010 / 10:35

2 respostas

2

Os ambientes setuid funcionam muito bem. Se você estiver usando CPanel, você pode configurá-lo facilmente através do easyapache. Se você não é, você tem que configurá-lo manualmente. suPHP é um excelente começo aqui.

Quanto ao motivo pelo qual você deveria se preocupar, trata-se de segurança em camadas. Houve várias explorações PHP que permitem evitar restrições open_basedir. Se essa é sua única proteção, então é possível que alguém possa contornar isso. Se você usar open_basedir e suPHP (com as permissões corretas), estará protegendo seus clientes contra explorações dentro do open_basedir.

O suPHP também torna muito mais fácil encontrar a fonte de abuso. Com apenas open_basedir, você não pode dizer qual processo pertence a qual usuário. Se algum usuário fizesse upload de um script que começasse a consumir toda a CPU, seria preciso uma escavação séria para determinar qual deles. Com suPHP, tudo que você precisa fazer é usar 'top', para ver o usuário abusivo e o caminho completo para o script.

    
por 15.12.2010 / 04:09
1

Is there any way to run PHP in a setuid environment for each of the VirtualHosts defined by Apache?

Esta não é a maneira de resolver o problema. O Apache é executado como um único uid. Existem sistemas como suPHP , mas por que se preocupar quando você pode usar os pacotes padrão e definir open_basedir que explicitamente resolve o problema que você descreve.

Pense em como você pode permitir que os usuários gerenciem seus próprios sites com segurança - confiar na propriedade dos arquivos para determinar as permissões significa que você efetivamente restringe a capacidade dos usuários de gerenciar a segurança dos arquivos por conta própria. Eles devem ser capazes de manipular arquivos / dirs (por padrão) de tal forma que eles não sejam graváveis pelo servidor web uid, enquanto opcionalmente fornecem um mecanismo para manipular uploads (preferencialmente fora da raiz do documento).

    
por 14.12.2010 / 14:36