以其他用户身份运行Apache


10

当我运行ps -efH命令以列出所有进程时,我可以看到Apache以的方式运行,root并且似乎有以的方式运行的子流程www-data。这是摘录:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

我可以让Apache和所有子流程以不同的用户身份运行apache2d:apache2d吗?如果可以,怎么办?我在某处读到可以找到此设置,/etc/apache2/httpd.conf但该文件似乎为空?是否可以通过更改/etc/init.d/apache2脚本的所有者和组,然后在其上设置setuid标志来完成?

Answers:


21

Apache必须首先以root用户身份运行才能绑定到端口80。如果最初不以root用户身份运行,则不能绑定到端口80。如果要绑定到1024以上的某个端口,则可以。否则不用担心root。那是父Apache进程,不处理任何请求。它将产生子进程并删除用于处理请求的特权。

要更改Apache用户,请在您的Apache配置中设置UserGroup参数。


好吧,不好意思,但是我注意到haproxy可以作为haproxy(而不是root)运行,并绑定tcp 80端口。这是如何实现的?有什么启示吗?
kiiwii 2014年

1
没有。如果进程具有超级用户特权,则只能将其绑定到1024以下的端口。因此,haproxy要么以root身份启动并放弃特权(可能),要么以setuid root身份(不太可能)。
bahamat 2014年

您不需要以root用户身份运行它,只需要允许“ apache”用户访问受限制的端口(即1024以下的端口)即可。这个答案说明了如何使用“ authbind”来做到这一点:superuser.com/questions/710253/…–
Animal451

4

@bahamat很好地解释了这一点,但我将添加更多细节。

在正常操作过程中,除了在端口80上侦听并将传入的连接转发到其子端口(作为www-data用户安全,无特权)后,root拥有的apache进程将不会执行任何实际操作。

主配置文件的位置取决于编译时选项,并且随发行版的不同而不同,但这/etc/apache2/apache2.conf是一个不错的开始。

另外,如果您要设置多用户虚拟主机系统,则可能需要研究SuExec和fcgid,以便每个虚拟主机用户的apache进程都以该用户身份运行-因此,如果一个用户对安全性疏忽,其他用户用户不会受到影响。


3

至少在Ubuntu中,该设置在中/etc/apache2/envvars。调整它们,然后重新启动apache,您就可以运行了。


谢谢,这对我有帮助!我正在设置一个ubuntu vagrant框,由于某种原因/etc/apache2/httpd.conf没有被用来加载用户和组。envars似乎可以解决问题!
格雷格

2

另外,请查看Apache2 ITK MPM

它使用分配的uid/ 派生一个Apache线程gid,让您继续使用mod_php。没有更多chmod/ chown等等


投票mpm_itk比suexec / fcgid显着改善
Shadur 2014年

0

Mac OSX:

对我有用的是进入apache配置文件:

/etc/apache2/httpd.conf

在此文件中,我搜索了“ 用户”或“ 组”

撞到:

User _www
Group _www

我已将其更改为所需的用户/组(在我的情况下,更改为您可以查看的Web应用程序文件所有者的用户/组。您可以使用简单的“ ls -l”进行检查)命令)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.