Evitando que o Apache acesse o FS raiz via exec

0

Na verdade, descobri que posso acessar a raiz via exec em php algo como

<?php
   echo exec('cat /etc/passwd');
?>

irá imprimir o conteúdo do arquivo passwd, note que com o comando cd eu posso navegar facilmente onde eu quiser, então como posso corrigir isso? Definindo um tipo de raiz virtual, por exemplo, limitada ao diretório actuel

Obrigado!

    
por rednaks 10.07.2013 / 10:40

1 resposta

0

O arquivo cat /etc/passwd é somente leitura por padrão para todos os usuários. O arquivo não contém informações críticas. É um comportamento normal para um usuário (seja www-data / apache ou qualquer outra pessoa) poder navegar no sistema de arquivos. No entanto, alguns arquivos são restritos para todos os usuários, exceto o superusuário (root). Se algum processo sob o Apache puder acessar, por exemplo, /etc/shadow , você tem um sério problema de permissão, pois o arquivo contém as senhas criptografadas de todos os usuários.

Agora, se você não quiser que o PHP seja capaz de acessar o sistema de arquivos, há várias maneiras de neutralizar esse comportamento. Observe também que esse comportamento não é um risco de segurança, pois as permissões de arquivo controlam quem e o que pode modificar ou visualizar arquivos / diretórios.

  1. Antes do PHP 5.4.0 havia algo chamado safe-mode que poderia ser usado para limitar o acesso dos usuários. (teve vários problemas e, portanto, foi removido mais tarde).
  2. Você pode desaprovar todos os comandos do shell (system, exec, passthru).
  3. Use open_basedir
por 10.07.2013 / 12:00