如何以特定用户身份而不是无人身份运行 HTTPD?

如何以特定用户身份而不是无人身份运行 HTTPD?

目前,top显示几乎所有httpd进程都由 运行nobody。“几乎”是因为其中 2 个由 运行root

我怎样才能做到这一点,使得如果我有用户说:,,,,以dartagnan所述用户的身份分别运行httpd?porthosaramisathos

我希望在运行时看到类似这样的内容top

PID USER 命令
1234 dartagnan /usr/local/apache/bin/httpd -k 启动 -DSSL
12 porthos /usr/local/apache/bin/httpd -k 启动 -DSSL
342 aramis /usr/local/apache/bin/httpd -k 启动 -DSSL
214 athos /usr/local/apache/bin/httpd -k 启动 -DSSL

=============> 这是我目前所拥有的以及我所希望看到:

PID USER 命令
1234 没人 /usr/local/apache/bin/httpd -k 启动 -DSSL
12 没人 /usr/local/apache/bin/httpd -k 启动 -DSSL
342 没人 /usr/local/apache/bin/httpd -k 启动 -DSSL
214 没人 /usr/local/apache/bin/httpd -k 启动 -DSSL
244 根 /usr/local/apache/bin/httpd -k 启动 -DSSL
334 根 /usr/local/apache/bin/httpd -k 启动 -DSSL

答案1

以不同的用户|组运行 httpd 的方法是更改用户或者团体httpd.conf 文件中的指令。

User apache
Group apache

但这只会改变nobody上面的输出,apache我猜这不是您想要的。

要让 httpd 以特定用户身份运行,您必须为每个用户创建和管理一个配置文件。配置文件应适当地指定用户和组,以及 httpd 进程应通过指令。请记住,只有特权用户才能绑定到 <1024 端口。然后您可以像这样启动它

apachectl -f /path/to/aramis.conf -k start -DSSL

请注意其他 httpd 指令(例如 VirtualHost)可能也需要根据每个用户进行更改。

此外,EL 变体(RHEL、CentOS Scientific Linux 等)也涉及 SELinux。您必须将每个实例将绑定到的端口添加到http_port_t组中,例如

semanage port -a -t http_port_t -p tcp 8888

这将允许 httpd 实例绑定到端口 8888。

如果用户将使用他们的主目录来提供文件,那么你必须使用 httpd_enable_homedires SELinux 布尔值来允许它

 setsebool -P httpd_enable_homedirs on

上述操作应允许您配置每个用户的 httpd 实例,但是每个用户都必须记住要使用哪个端口添加到他们的 URL 中,例如上面的 aramis

http://example.com:8888

这一切都非常混乱。为了帮助您的用户,您应该将主 httpd 配置为像往常一样监听端口 80,并充当每个用户实例的反向代理。然后当 aramis 连接到例如

http://aramis.example.com 

主服务器代理它是aramis的实例。

您还必须适当配置 DNS 以及可能的其他内容。

相关内容