应该使用自定义用户创buildWindows服务,还是应该使用LocalSystem / LocalService / NetworkService之一

我问的一般问题是平均自定义开发的NT服务或unix OSS守护进程移植到与SCM支持的Windows。 然而,目前我关心的是mongodb 。

从我使用UNIX的经验来看,我喜欢我所有的服务作为不同的非特权用户运行。 这个翻译成windows的方式如下:

  1. 创build一个本地(或域,如果它必须与SQL服务器交谈)Windows用户与一个长期的随机密码(最近从不同的机器生成的ASCII85编码GUID)。 将其设置为下一个过期并禁止更改其密码。
  2. 从“用户组”中删除该用户。 授予该用户“作为服务login”权限。
  3. 将其读取权限授予应用程序所在的文件夹,并将权限写入应用程序使用的日志和数据文件。
  4. 分配用户到服务。
  5. 排除故障,直到服务启动。

我的感觉是,没有特权的用户比三个特殊服务用户要less。 我也觉得,通过隔离哪些用户运行哪些服务,我会限制附带损害,如果find一种方式妥协一项服务。

我相信,尽可能多地使用尽可能less的私有化用户总是一个好习惯。 我有一个非常相似的stream程,但是我更喜欢在本地帐户上使用域帐户,以便为组织这些帐户提供一个中心机制。

此外,我进一步限制并授予在组策略中具有用户权利分配的域帐户的附加权利:

 安全设置文件夹 - 本地策略 - 用户权限分配 

您还可能发现某些服务需要在Active Directory中为其服务帐户分配权限,在这种情况下,我将尝试使用基于angular色的组(“阅读学生帐户”,“阅读工作人员帐户”,“编写学生帐户”等等)并将该服务帐户放入该组中。

底线是不应该有任何内置的服务帐户可以做一个创build的服务帐户不能做的,这个规则的唯一例外是当服务本身被硬编码,以期望服务帐户是一个具体用户名。