我有一个已启用的 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,您可以添加代码,使其休眠一段时间或等待文件出现等。