我使用 Apache2 和 PHP7 cgi 设置了一台 Ubuntu 16.04 服务器。到目前为止一切顺利,但一旦我安装 ruid2
sudo apt-get install libapache2-mod-ruid2
Apache 停止正常工作。当我尝试访问服务器时,我收到 ERR_EMPTY_RESPONSE,错误 Apache 日志显示:
child pid 9252 exit signal Aborted (6)
ruid2 模块有什么问题?
答案1
即使模块是从源代码编译的,我们也遇到了同样的问题。
为了提供更多调试信息,我像这样启动了 apache:
source /etc/apache2/envvars; strace /usr/sbin/apache2 -X -e info -f /etc/apache2/apache2.conf
重要的部分发生在 apache 收到第一个请求时:
clone(child_stack=0x7f0d483d8f70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f0d483d99d0, tls=0x7f0d483d9700, child_tidptr=0x7f0d483d99d0) = 8681
rt_sigtimedwait(~[ILL TRAP ABRT BUS FPE KILL SEGV USR2 PIPE CONT STOP SYS RTMIN RT_1], NULL, NULL, 8
<< WAITING FOR HTTP REQUEST >>
) = -1 EINTR (Interrupted system call)
--- SIGRT_1 {si_signo=SIGRT_1, si_code=SI_TKILL, si_pid=8679, si_uid=33} ---
setgroups(1, [33]) = -1 EPERM (Operation not permitted)
futex(0x7f0d4ebf1d9c, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f0d47bd7c10, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
+++ killed by SIGABRT (core dumped) +++
Aborted (core dumped)
在 setgroups 期间我们现在得到“操作不允许”。
如果您使用 mpm_worker 或 mpm_event,似乎会发生这种情况,使用 mpm_prefork 则运行良好。根据这些 mpm 的工作方式,这可能是合乎逻辑的,但我们多年来一直在大多数共享托管服务器上将 mod_ruid2 与 mpm_worker 结合使用,没有任何问题(12.04 和 14.04)。