目前,top
显示几乎所有httpd
进程都由 运行nobody
。“几乎”是因为其中 2 个由 运行root
。
我怎样才能做到这一点,使得如果我有用户说:,,,,以dartagnan
所述用户的身份分别运行httpd?porthos
aramis
athos
我希望在运行时看到类似这样的内容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 以及可能的其他内容。