以其他用户身份运行 Apache

Mri*_*lla 12 linux apache-http-server user-accounts permissions ubuntu

当我运行ps -efH命令列出所有进程时,我可以看到 Apacherootwww-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
Run Code Online (Sandbox Code Playgroud)

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

bah*_*mat 24

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

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


Sha*_*dur 6

@bahamat 解释得很好,但我会添加更多细节。

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

主配置文件的位置取决于编译时选项,并且每个发行版都有所不同,但这/etc/apache2/apache2.conf是一个很好的起始猜测。

另外,如果您正在设置一个多用户虚拟主机系统,您可能需要查看SuExec 和 fcgid,以便每个单独的虚拟主机用户的 apache 进程都以所述用户的身份运行——这样,如果一个用户疏忽了其安全性,其他用户也将受到影响。用户不会受到影响。


mli*_*ner 6

至少在 Ubuntu 中,此设置位于/etc/apache2/envvars. 调整这些,然后重新启动 apache,你就可以开始运行了。