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

Jie*_*viz 7 linux php redhat httpd apache-2.2

目前,top向我展示了几乎所有httpd进程都由nobody. “几乎”,因为其中 2 个由root.

如果我有用户说:dartagnan, porthos, aramis,athos作为上述用户分别运行 httpd ,我如何才能做到这一点?

我希望在我跑步时看到这样的事情top

PID 用户命令
第1234回
12 端口 /usr/local/apache/bin/httpd -k start -DSSL
342 aramis /usr/local/apache/bin/httpd -k 开始 -DSSL
214 athos /usr/local/apache/bin/httpd -k start -DSSL 

============>这是我目前有什么我DONT喜欢看:

PID 用户命令
第1234回
12 没有人 /usr/local/apache/bin/httpd -k 开始 -DSSL
第342话
第214回 
244 root /usr/local/apache/bin/httpd -k start -DSSL 
334 root /usr/local/apache/bin/httpd -k start -DSSL 

use*_*517 7

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

User apache
Group apache
Run Code Online (Sandbox Code Playgroud)

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

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

apachectl -f /path/to/aramis.conf -k start -DSSL
Run Code Online (Sandbox Code Playgroud)

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

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

semanage port -a -t http_port_t -p tcp 8888
Run Code Online (Sandbox Code Playgroud)

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

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

 setsebool -P httpd_enable_homedirs on
Run Code Online (Sandbox Code Playgroud)

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

http://example.com:8888
Run Code Online (Sandbox Code Playgroud)

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

http://aramis.example.com 
Run Code Online (Sandbox Code Playgroud)

主服务器代理的 it aramis 实例。

您将不得不适当地配置 DNS 和其他可能的东西。