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

16 security linux web-server user-accounts

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

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

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

  • 更长的 .bashrc
  • 如果该帐户遭到入侵,则在该帐户下运行的所有站点也会遭到入侵。

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

最佳做法是什么?这仅仅是一个与偏执程度成比例地减少每个用户帐户的托管站点(或托管存储库等)数量的问题吗?

请发表您对此的看法,并说明理由。

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

vor*_*aq7 10

我通常是“一个用户在网络上打开侦听套接字的任何东西”的粉丝——一个用于 Apache,一个用于邮件,一个用于 DNS,等等。

这(正如我最后一次听到的)仍然是当前最佳实践,这背后的原因是简单明了的偏执:如果有人在我有机会修补之前发现漏洞并利用它,这些服务就会暴露在 Big Bad Internet 中。软件至少我将它们限制在一个用户帐户中,只有运行它负责的单个服务所需的权限。
一般来说,我认为这种隔离级别足以保护系统,尽管每个应用程序都是一个漏洞孤岛(例如,如果有人安装了一个易受攻击的 WordPress 插件,Apache 可以访问的所有内容(即所有网站)实际上都是易受攻击的在妥协的情况下。

因此,可以为使用自己的 Apache 配置和用户(您不必为每个站点安装完整的 Web 堆栈,只需一个单独的 apache 配置指定不同的用户)创建该参数的扩展版本),缺点是每个站点现在都在运行一堆 Apache 进程,因此您的 RAM 使用量大幅增加,如果任何单个 Apache 实例/用户受到损害,那么世界可读的东西仍然容易受到攻击。

进一步扩展将每个 Apache 放入 chroot(如果您使用 BSD 系统,则为 jail)的论点可以提高安全性,但现在您正在谈论额外的磁盘空间,因为每个 chroot/jail 将需要所有所需的软件运行它包含的站点(并且需要为每个站点更新此软件,而不仅仅是补丁发布时服务器上的一个主副本),加上 RAM 要求,就像您拥有单独的用户/apache 实例一样。
这减轻了除操作系统/内核错误之外的所有问题,该错误让用户摆脱了 chroot(这成为在单独的物理服务器上运行每个站点的论据 - 然后成为将站点分成不同的 vlan/子网等的论据)


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


Kyl*_*yle 6

通常我所做的是让一个用户用于不允许登录的面向外部的服务(例如“nobody”),以及一个允许登录和 su 或 sudo 的帐户。当然,请确保您的用户名不同且不易被猜到。

除非您正在运行每个客户都有登录名的共享托管环境,否则我认为没有必要为每个服务指定一个用户。如果你真的认为自己是一个非常有吸引力的黑客目标,你最好尽可能地隔离。但是,除非您正在做一些非常有争议的事情或托管财务数据,否则您并不是真正具有吸引力的目标。