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を使用して続行します。実行されます)。
あなたのWebサーバー(希望!)はrootとして実行されていないので、それを追跡するとsuexecのsetuidビットは無視され、Webサーバーのuidとして実行されます。
この問題を解決するには、suexecが起動するまでstraceの実行を回避し、strace -f -o ... -p pid-of-suexec
suexecのプロセスIDを見つけるのに時間を節約するためにしばらくスリープモードにするか、ファイルが表示されるのを待つコードを追加できます。 。