[MASOCH-L] Apache(1.3|2) + PHP(4|5) + Perl + Virtual Hosting [Long post]

Marcelo Coelho marcelo at tpn.com.br
Wed Mar 16 15:04:53 BRT 2005


Olá!

Gostaria de saber a opinião dos membros da lista qual a melhor opção para
garantir a segurança (interna) de PHP e Perl com Apache, para hospedagem
compartilhada.

Eu atualmente utilizo suEXEC para controlar Perl/CGI. Apesar de lento,
mostra-se bastante eficiente. Porém, minha preocupação maior é com PHP já
que 99% dos scripts que estão no servidor são PHP.

Entre as soluções para PHP, encontrei as seguintes:

1) Rodar PHP como CGI e com suEXEC

Pró: mesmos benefícios de rodar suEXEC para Perl (cada site pode rodar os
scripts em um uid/gid diferente)
Contra: obriga os usuários a executarem CHMOD em arquivo PHP (muitos não
entendem a necessidade); não permite a utilização de NENHUM acelerador PHP
(mmcache, php-a, zend optmizer, etc)

2) Rodar PHP como módulo (mod_php4) e setar via php.ini a segurança

Pró: com os parametros openbasedir, safe_mode, disable_functions podemos
garantir alguma segurança; como módulo, permite a utilização de acelerador
PHP; também não requer CHMOD para funcionar.
Contra: o PHP ainda roda como o usuário www, ou seja, todos os arquivos
criados no diretório pertencerão ao usuário www e não ao dono do site

3) Rodar PHP com módulo suPHP

Pró: perfeito do ponto de vista técnico; garante a execução de cada site em
um uid/gid diferente; não necessita CHMOD para funcionar
Contra: não permite utilização de aceleradores PHP; é *EXTREMAMENTE* lento,
quando comparado com a execução como módulo.

4) Rodar PHP como CGI com FastCGI

Pró: Roda mais rápido do que como CGI convencional ou suEXEC. A segurança
precisa ser garantida via php.ini (openbasedir, safe_mode, etc)
Contra: não permite utilizar acelerador PHP; requer CHMOD para funcionar; o
script roda como usuário www.

5) Apache2 com MPM perchild. (O novo Apache permite rodar cada
VirtualHosting com um UID diferente)

Pró: A segurança de qualquer aplicação/módulo/CGI já está garantida pelo
usuário que roda a aplicação; permite a utilização de acelerador PHP
Contra: Para cada site o httpd inicia pelo menos 1 processo, cada um com seu
uid/gid e várias threads. Isso consome muuuuuuito do sistema.

Em um ambiente ideal, o PHP funcionaria:

- Como módulo, integrado ao Apache
- Com suporte a aceleradores PHP, fazendo cache de todos os aplicativos
- Cada script rodaria sob seu uid/gid, arquivos criados por scripts PHP não
pertenceriam ao usuário www, mas sim ao usuário dono do script.
- Não necessitariam de CHMOD para funcionar
- Tivessem boa performance.

Pelo que já pesquisei sobre o assunto, o modo "ideal" jamais será possível,
devido a características do Apache e do ambiente Unix/Linux.
Não é possível ter todas as caracteristicas que descrevi como "ideal" ao
mesmo tempo. Quando se tem uma, se perde em outra.

Os testes que eu tenho feito me levam a utilizar a opção 3 (PHP como
módulo), mas receio que existam problemas de segurança que permitiriam, por
exemplo, que um usuário pudesse acessar o conteúdo (código fonte dos
scripts) dos sites vizinhos [apenas para citar um exemplo].

A questão é: qual a forma "menos pior"?
Existe alguma forma garante segurança + velocidade?
Qual a opinião de vocês?

Obrigado, e um abraço!




More information about the masoch-l mailing list