什么时候应该创build一个新的用户帐户在服务器上运行软件?

一般来说,应该在什么时候创build一个新的用户帐户来在服务器上运行一个面向互联网的软件?

例如,假设我使用共享Debian服务器(例如通过Dreamhost),我想运行一些使用WordPress的网站,一些使用Redmine,一些使用Ruby on Rails,也许一些使用Django,并且我想为Mercurial储存库也是如此。

在Dreamhost服务器和许多其他类似的设置服务器上,这可以全部在一个用户帐户下完成,但是我可以看到这种方法的一些缺点:

  • 更长的.bashrc
  • 如果这一个帐户受到威胁,所有在其下运行的网站也会受到威胁。

另一方面,拥有大量的用户帐户可能会让人有点难以跟踪,特别是如果其中一些用户在安装软件方面有相同的要求。 例如,运行WordPress的每个网站有一个帐户可能是矫枉过正的。

最佳做法是什么? 这是否仅仅是一个减less每个用户帐户的托pipe网站(或托pipe的存储库等)的数量成比例的偏执狂水平的问题?

请发表你的意见,给你的理由。

此外,如果您有任何理由认为在私人服务器或VPS上采取的方法应与在共享服务器上采取的方法不同,请概述它们是什么,再次说明您的理由。

我通常是“一个用户在networking上打开监听套接字的一个用户” – 一个用于Apache,一个用于邮件,一个用于DNS等等。

这是(最后一次我听说)仍然最佳当前实践,这背后的原因是朴素和简单的偏执狂:这些服务暴露在大坏的互联网,如果有人发现一个漏洞,利用它之前,我有机会补丁软件至less我把它们限制在一个用户帐户,只有运行它所负责的单一服务所需的特权。
一般来说,我认为这种隔离级别足以保护系统,尽pipe每个应用程序都是脆弱的(例如,如果有人安装了易受攻击的WordPress插件,Apache访问的所有东西(即所有网站)都是有效的在妥协的情况下。

这个参数的扩展版本因此可以用自己的Apacheconfiguration和用户对Shared Hosting客户端的网站进行沙盒处理(你不必为每个站点安装一个完整的Web栈,只需要指定一个不同的用户),缺点是每个站点现在都运行了一堆Apache进程,所以你的内存使用量大幅上升,而且如果任何一个Apache实例/用户受到攻击,世界可读的东西仍然是脆弱的。

进一步扩展将每个Apache放入chroot(或监狱,如果你在BSD系统上的话)的争论可以做得更加安全,但是现在你正在谈论更多的磁盘空间,因为每个chroot / jail将需要所有需要的软件运行它包含的站点(并且需要为每个站点更新此软件,而不是在修补程序出现时服务器上只有一个主副本),再加上内存需求,就像具有单独的用户/ Apache实例时一样。
这可以缓解除了操作系统/内核的一切问题,让用户摆脱chroot(这成为在单独的物理服务器上运行每个站点的参数 – 然后成为将站点分隔成不同的vlans /子网等的参数)


与所有的风险一样,你不能消除它:你只能根据妥协的潜在危害/成本,妥协的可能性以及每一级缓解的成本将其降低到可接受的水平。
对于我的钱来说,对于非关键的非电子商务共享主机环境来说,基本的“Apache用户,DNS用户,邮件用户等等” 安全网就够了。 如果需要超出这个级别的安全性,用户应该认真考虑自己的硬件。

一般来说,我所做的就是让一个不允许login的外部服务的用户(例如“nobody”)以及一个允许login和su或sudo的帐户。 自然确保你的用户名是不同的,不容易猜测。

除非您正在运行每个客户都有login的共享主机环境,否则我不会看到每个服务都有一个用户。 如果你真实地把自己看作是非常有吸引力的黑客攻击目标,那么你可以尽可能地隔离。 但是,除非你正在做一些非常有争议的事情或者提供财务数据,否则你并不是真的有吸引力的目标。