Executando comandos com PHP: usando usuário normal, mas seu diretório home é / root

2

Estou usando uma instalação compilada personalizada do Apache + PHP, ouvindo na porta 80 .

O Apache é configurado para ser executado como um usuário normal, com as configurações adequadas User e Group do arquivo httpd.conf .

Depois de executar o apache como um serviço, com apachectl , há um processo httpd em execução por raiz e 4 outros em execução por esse usuário normal.

O problema é este:

  • Quando executo um comando externo pelo PHP (usando exec ou passthru , por exemplo), ele é executado pelo usuário normal adequado, mas a variável de ambiente $HOME aponta para /root .

Por exemplo, com o seguinte código muito simples:

<?php
echo "Home: " . 'echo \$HOME';
echo "<br />";
echo "Id: " . 'id';

Eu recebo:

Home: /root
Id: uid=1000(normaluser) gid=100(users) groups=100(users),17(audio),33(video)

Qualquer comando executado dessa maneira é executado pelo usuário normal, portanto não há nenhum problema de segurança. O maior problema é quando um comando externo é executado e esse comando tenta gravar e / ou ler algo do diretório pessoal.

    
por nozimica 15.05.2013 / 17:19

1 resposta

0

Espero que o echo $HOME apenas leia a variável de ambiente definida por qualquer shell que inicie httpd (o processo do Apache). A menos que algo faça export HOME=/home/whatever , o valor da variável de ambiente HOME permanecerá o mesmo.

Não sei se o seu último parágrafo está correto. No que diz respeito a nenhum problema de segurança, PATH é definido como normaluser ? E se / home / normaluser / bin contiver um executável ls muito especial, que faz coisas incomuns, como produzir uma saída HTTP para download de qualquer arquivo no sistema? Na minha configuração do Apache / PHP, o PATH é definido como /usr/local/bin:/bin:/usr/bin:/u/bediger/bin para o programa PHP.

Sua afirmação sobre o problema principal, ler / escrever algo do diretório pessoal, também não faz sentido. O valor de HOME não é importante para nomes de arquivos parcialmente qualificados, o diretório de trabalho atual é importante. httpd parece definir isso corretamente para o meu programa PHP de teste. Minha configuração do Apache / PHP define o diretório de trabalho atual para a raiz do documento, que é onde meu PHP mora.

<html>
<head><title>Test</title></head>
<body>
<p>
<?php
    echo "Home: " . 'echo \$HOME';
    echo "<br />";
    echo "Id: " . 'id';
    echo "<br />";
    echo "PWD: " . 'pwd';
    echo "<br />";
    echo "PATH: " . 'echo \$PATH';
?>
</p>
</body>
</html>
    
por 15.05.2013 / 18:34