O Apache suexec não funciona com strace

2

Eu tenho uma instância do Apache com mod_suexec ativado. Estou tentando depurar um problema e estou iniciando o Apache com strace para tentar ver o que está acontecendo.

No entanto, quando eu inicio o Apache assim:

# strace -f -o /tmp/apache.strace /etc/init.d/apache2 start

Eu recebo isso no log de erros:

suexec failure: could not open log file
fopen: Permission denied

No entanto, quando eu inicio o Apache normalmente, tudo funciona corretamente.

Eu presumo que algum mecanismo em uso por mod_suexec está sendo perturbado pelo uso de strace , mas não estou claro o que exatamente está acontecendo. Existe alguma maneira de usar strace e ter o mod_suexec funcionando corretamente?

    
por Flup 10.07.2014 / 15:36

1 resposta

4

strace usa ptrace() para rastrear as chamadas do sistema.

Se um processo sendo rastreado tentar executar um arquivo com bits setuid ou setgid, os bits serão ignorados (e o processo continuará a ser executado com o uid e o gid existentes do processo), a menos que o processo seja executado como root ( ou tem o recurso CAP_SETUID).

Seu servidor web (esperançosamente!) não está rodando como root, então se você rastreá-lo, o bit setuid do suexec será ignorado e ele será executado como o uid do servidor web.

Para contornar isso, você pode evitar fazer qualquer stracing até que o suexec seja iniciado, em seguida, faça strace -f -o ... -p pid-of-suexec . Para lhe dar tempo para encontrar o ID do processo do suexec, você pode adicionar código para que ele durma um pouco ou espere que um arquivo apareça, etc.

    
por 10.07.2014 / 22:46