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

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

我问的是一般的定制开发的 NT 服务或 unix OSS 守护进程,移植到 Windows 并支持 SCM。然而,目前我最关心的是mongodb

根据我使用 UNIX 的经验,我喜欢以不同的非特权用户身份运行所有服务。这在 Windows 上的转换方式如下:

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

我的感觉是,非特权用户的权力不如 3 个特殊服务用户。我还认为,通过隔离哪些用户运行哪些服务,如果发现一种破坏某项服务的方法,我可以限制附带损害。

答案1

我认为,让权限最低的用户使用尽可能多的服务始终是一种很好的做法。我的流程与您非常相似,但我更喜欢使用域帐户而不是本地帐户,以便为组织这些帐户提供一种集中机制。

另外,我通过组策略中的用户权限分配进一步限制和授予域帐户额外的权限:

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

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

底线是,内置服务帐户可以做而创建的服务帐户不能做的事情,这条规则的唯一例外是当服务本身被硬编码以期望服务帐户是特定的用户名时。

相关内容