Apache suexec 无法与 strace 一起使用

Apache suexec 无法与 strace 一起使用

我有一个已启用的 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 位的文件,则这些位将被忽略(并且该进程将继续使用该进程现有的 uid 和 gid 运行),除非该进程以 root 身份运行(或具有CAP_SETUID 功能)。

您的 Web 服务器(希望如此!)不是以 root 身份运行,因此如果您跟踪它,suexec 的 setuid 位将被忽略,它将作为 Web 服务器的 uid 运行。

为了解决这个问题,您可以避免执行任何 strace,直到启动 suexec,然后执行strace -f -o ... -p pid-of-suexec.为了让您有时间找到 suexec 的进程 ID,您可以添加代码,使其休眠一段时间或等待文件出现等。

相关内容