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

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

我怎么能这样做,让我有用户说: dartagnanporthosathosathos运行httpd每个分别为所述的用户?

我希望看到这样的事情,当我跑top

 PID用户命令
 1234 dartagnan / usr / local / apache / bin / httpd -k start -DSSL
 12 porthos / usr / local / apache / bin / httpd -k start -DSSL
 342 aramis / usr / local / apache / bin / httpd -k start -DSSL
 214 athos / usr / local / apache / bin / httpd -k start -DSSL 

============>这是我现在有什么,我不想看到:

 PID用户命令
 1234 nobody / usr / local / apache / bin / httpd -k start -DSSL
 12 nobody / usr / local / apache / bin / httpd -k start -DSSL
 342 nobody / usr / local / apache / bin / httpd -k start -DSSL
 214 nobody / usr / local / apache / bin / httpd -k start -DSSL 
 244 root / usr / local / apache / bin / httpd -k start -DSSL 
 334 root / usr / local / apache / bin / httpd -k start -DSSL 

将httpd作为其他用户|组运行的方式是更改httpd.conf文件中的用户或组指令。

 User apache Group apache 

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

要使httpd作为特定的用户运行,您将不得不为每个用户创build和pipe理configuration文件。 configuration文件应该正确指定用户和组以及httpd进程应该通过Listen指令绑定的端口。 记住只有特权用户可以绑定到端口<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 

上面应该允许你configuration每个用户的httpd实例,但是每个用户都必须记住哪个端口用来添加到他们的URL,比如上面的aramis

 http://example.com:8888 

这一切都很混乱。 为了帮助你的用户,你应该configuration你的主httpd像往常一样在端口80上监听,并作为每个用户实例的反向代理。 然后,当阿拉米斯连接到例如

 http://aramis.example.com 

主服务器代理是它的阿拉米斯的实例。

你将不得不configurationDNS和其他可能适当的东西。