Apache 인스턴스가 활성화되어 있습니다 mod_suexec
. 문제를 디버깅하려고 하는데 Apache를 시작하여 strace
무슨 일이 일어나고 있는지 확인하려고 합니다.
그러나 Apache를 다음과 같이 시작하면 다음과 같습니다.
# strace -f -o /tmp/apache.strace /etc/init.d/apache2 start
오류 로그에 다음이 표시됩니다.
suexec failure: could not open log file
fopen: Permission denied
그러나 Apache를 정상적으로 시작하면 모든 것이 잘 작동합니다.
사용된 메커니즘 중 일부가 mod_suexec
사용으로 인해 방해를 받은 것 같지만 strace
정확히 무슨 일이 일어나고 있는지는 모르겠습니다. strace
올바르게 사용하고 작동하는 방법이 있습니까 ?mod_suexec
답변1
strace
ptrace()
시스템 호출을 추적하는 데 사용됩니다 .
추적되는 프로세스가 setuid 또는 setgid 비트가 있는 파일을 실행하려고 시도하는 경우 프로세스가 루트(또는 CAP_SETUID 기능이 있는)로 실행되지 않는 한 해당 비트는 무시됩니다(프로세스는 프로세스의 기존 uid 및 gid를 사용하여 계속 실행됩니다).
귀하의 웹 서버(희망합니다!)는 루트로 실행되고 있지 않으므로 이를 추적하면 suexec의 setuid 비트가 무시되고 웹 서버의 uid로 실행됩니다.
이 문제를 해결하려면 suexec가 시작될 때까지 strace 실행을 피하고 strace -f -o ... -p pid-of-suexec
suexec의 프로세스 ID를 찾을 시간을 주기 위해 잠시 동안 절전 모드로 설정하거나 파일이 나타날 때까지 기다리는 코드를 추가할 수 있습니다. .