Apache 以 uid 0 身份运行

Apache 以 uid 0 身份运行

今天早上,我启动了一台已经使用了 2 个月的机器,发现 Apache 并没有作为守护进程运行,在 /etc/init.d/ 中我发现了以下文件

-rwxr-xr-x 1 root root    0 2011-03-04 06:39 apache2
-rwxr-xr-x 1 root root    0 2011-02-03 06:40 apache2.1
-rwxr-xr-x 1 root root 6157 2010-04-14 01:50 apache2.2

我想说一下,我没有在 /etc/init.d/ 中创建这些 apache 文件,您会看到它们为 apache2.1 和 apache2.2,在浪费了一些时间来启动 apache 之后,我发现只
/etc/init.d/apache2.2 start启动了 apache2 守护进程,而如果我使用 /etc/init.d/apache start 那么这将不起作用。

然后我在 ps 输出中看到以下内容

 ps -el | grep apache2
1 S     0  2466     1  0  80   0 - 32139 poll_s ?        00:00:00 apache2
5 S    33  2617  2466  0  80   0 - 32268 inet_c ?        00:00:00 apache2
5 S    33  2625  2466  0  80   0 - 32310 inet_c ?        00:00:00 apache2
5 S    33  4211  2466  0  80   0 - 32271 inet_c ?        00:00:00 apache2
5 S    33  9072  2466  0  80   0 - 32179 inet_c ?        00:00:00 apache2
5 S    33  9079  2466  0  80   0 - 32177 inet_c ?        00:00:00 apache2
5 S    33  9080  2466  0  80   0 - 32177 inet_c ?        00:00:00 apache2
5 S    33  9081  2466  0  80   0 - 32179 inet_c ?        00:00:00 apache2
5 S    33  9082  2466  0  80   0 - 32177 inet_c ?        00:00:00 apache2
5 S    33  9083  2466  0  80   0 - 32179 inet_c ?        00:00:00 apache2
5 S    33  9084  2466  0  80   0 - 32177 poll_s ?        00:00:00 apache2

在 /etc/passwd 文件中我看到

www-data:x:33:33:www-data:/var/www:/bin/sh

因此剩余的进程有 33 个 uid 和 pid,与 www-data 相对应,但如果你注意到上面输出中的第一个进程的 uid 是 0

那么,如果我要问的话,apache 在这台机器上是否运行正常,或者我应该进一步调查我的服务器,它是否似乎被破坏了?文件 apache2.1 和 apache2 是空白的,只有 apache2.2 具有 init 等所需的功能。

答案1

不知道启动脚本。“主”Apache 进程应以 root 身份运行(您会注意到它是父进程的 pid 为 1 的进程)。passwd 中的条目看起来正确。

答案2

此行为在默认 Apache MPM(worker 和 prefork)中是预期的。父进程由 root 启动。通过fork和系统调用,子进程放弃权限并以 www-data 用户(系统上的 uid 为 33)身份运行。此用户由中的指令setuid控制。Userhttpd.conf

Apache 文档在这儿

相关内容