Parando a habilidade do PHP de ler / gravar outros arquivos PHP

1

Eu hospedo um site de hospedagem muito pequeno que hospeda um tipo de software de bate-papo. Eu dou a cada usuário um / home / ftp preso, mas eles têm sua própria pasta www, eles podem fazer upload de coisas para.

Um dos meus usuários enviou esse arquivo php: link - que parece salvar arquivos php e permitir que ele faça o download deles.

Usando isso eu acho que ele foi capaz de acessar alguns dos meus arquivos e um dos meus arquivos php tinha minha senha do MySQL no php, que ele ganhou acesso a um banco de dados com todas as senhas dos meus clientes.

Como posso impedir que isso aconteça novamente? Quais precauções devo tomar ao fornecer aos usuários seu próprio diretório / home /.

    
por ParoX 14.12.2010 / 03:13

3 respostas

0

Você deseja desativar o php para a pasta inicial.

Ao usar o PHP como um módulo do Apache (padrão no Ubuntu 10.04), adicione o seguinte à sua configuração do Apache

<Directory /home>
  php_admin_value engine Off
</Directory>

Você provavelmente também deve usar Options -ExecCGI e AllowOverride None por segurança. Consulte as dicas de segurança oficiais do Apache. Se o seu servidor da Web tiver outros tipos de scripts ativados (como mod_perl ), desative-os também para a pasta base.

    
por 14.12.2010 / 03:23
1

Você terá que proteger o seu site e o Linux / Unix faz isso muito bem, defina permissões mínimas para o grupo e outros no diretório-raiz do seu site:

chmod 0711 /var/virtualhosts/example.com

# ls -ald /var/virtualhosts/example.com
drwx--x--x  4 example    example    4096 Oct  9 08:43 example.com

Restringir o acesso a arquivos em PHP com open_basedir :

# virtual host config
php_admin_value open_basedir "/var/virtualhosts/example.com:/tmp"

# directory config
<Directory /home/bad_user>
    php_admin_value open_basedir "/home/bad_user:/tmp"
</Directory>

Desative funções perigosas do PHP:

# /etc/php.ini
disable_functions = "dl,shell_exec,passthru,exec,
                    popen,system,proc_terminate,proc_close,stream_socket_server"

Use su - user para testar as permissões que eles têm em seu site.

su - apache -s /bin/bash 
cd /var/virtualhosts/example.com
ls -al
cat /var/virtualhosts/example.com/db.config.php
    
por 14.12.2010 / 05:39
0

suPHP é realmente sua melhor aposta aqui. Você configuraria cada usuário para executar seus scripts como seu próprio usuário, depois chmodaria seus diretórios para que outros usuários não pudessem lê-los. Não não confie em open_basedir, não vai funcionar 100%.

Como você está permitindo envios, você sempre terá que se preocupar com o envio de itens que as pessoas não deveriam. Eu sugiro executar algo como o Linux Malware Detect. Ele avisa quando itens como shells e scripts DoS são enviados para seus servidores.

    
por 15.12.2010 / 04:14