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


14

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

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

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

  • 更长的.bashrc
  • 如果该帐户被盗用,则该帐户下运行的所有站点也将被盗用。

另一方面,要跟踪很多用户帐户可能会有些麻烦,特别是如果其中一些用户对安装的软件有相同的要求时。例如,为每个运行WordPress的网站拥有一个帐户可能就太过分了。

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

请对此发表您的意见,并说明理由。

另外,如果您有任何理由认为在专用服务器或VPS上使用的方法应与在共享服务器上使用的方法不同,请概述它们的含义以及您使用它们的原因。

Answers:


11

我通常是“一个用户可以打开网络上的侦听套接字的任何用户”的粉丝–一个用于Apache,一个用于Mail,一个用于DNS,等等。

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

因此,可以使用该参数的扩展版本来沙盒化具有其自己的Apache配置和用户的Shared Hosting客户的网站(您不必为每个站点安装完整的Web堆栈,只需为指定不同用户的单独apache配置),不利之处在于每个站点现在都在运行一堆Apache进程,因此您的RAM使用率大幅上升,并且如果任何单个Apache实例/用户受到威胁,那么世界可读取的内容仍然很容易受到攻击。

可以进一步扩展将每个Apache放入chroot(如果在BSD系统上则为监禁)的论点,以提高安全性,但是现在您正在谈论额外的磁盘空间,因为每个chroot / jail都需要使用所需的所有软件。运行它包含的站点(需要在补丁发布后为每个站点而不是服务器上的一个主副本更新该软件),以及对RAM的要求,就像您有单独的用户/ apache实例时一样。
这缓解了除OS / Kernel错误之外的所有问题,该错误使用户无法使用chroot(这成为在单独的物理服务器上运行每个站点的参数-然后成为将站点分为不同的VLAN /子网等的组件)。


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


1
还有一个Apache的模块(我认为是mod_su?),它使Apache可以根据传入的请求动态更改正在其下运行的用户。在共享托管环境中,您可以将其设置为更改为拥有被访问站点的用户。这提供了对最常见的违规类型(代码注入等)的隔离,因此只有一位安装了不良WordPress插件的用户受其影响。它还提供了一些保护措施,以防止完全破坏Apache进程本身,以及防止特权升级攻击,但是请记住,这并不是其真正目的。
Kromey 2011年

@Kromey,我找不到有关mod_su的太多信息。您是说mod_suexec吗?
sampablokuper 2011年

1
@sampablokuper是的,那是错误的信息,对不起。
Kromey 2011年

1
@Kromey的最大问题mod_suexec是“非CGI请求仍在使用User指令中指定的用户进行处理”-因此,如果PHP是模块,它仍将以“主要” apache用户身份运行。如果您正在执行的所有操作都是CGI,则这是一个很好的解决方案。
voretaq7 2011年

@voretaq啊,我不知道那个限制。仍然可以在某些环境中使用,但这确实使它不如我想象的那样适用。
Kromey 2011年

6

通常,我要做的是让一个用户使用不允许登录的外部服务(例如“ nobody”),以及一个允许登录和su或sudo的帐户。自然地,请确保您的用户名不同并且不容易猜测。

除非您正在运行一个共享托管环境(每个客户都有一个登录名),否则我看不到每项服务都需要一个用户。如果您现实地将自己视为黑客攻击的极具吸引力的目标,那么您可能会尽可能地孤立。但是,除非您做的是很有争议的事情或托管财务数据,否则目标并没有那么吸引人。


+1隔离级别需要适合当前情况-通常,一旦您获得“非常有争议的”或“财务数据”,您将需要我自己该死的机器隔离级别:-)
voretaq7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.