以域帐户身份运行Windows服务所需的最低权限要求

41

有人知道我需要授予域用户帐户的最低权限才能以该用户身份运行Windows服务吗?

为简单起见,假设该服务除了启动、停止和写入“应用程序”事件日志外没有其他操作——即没有网络访问,也没有自定义事件日志等。

我知道我可以使用内置的Service和NetworkService帐户,但由于可能存在网络策略限制,因此我可能无法使用这些帐户。


我在我的SU答案中解释了这个。 - stackprotector
4个回答

83

有两种方法:

  1. 编辑服务的属性并设置“登录用户”。适当的权限将自动分配。

  2. 手动设置: 转到“管理工具”->“本地安全策略”->“本地策略”->“用户权限分配”。编辑“作为服务登录”的项目,并在其中添加您的域用户。


太棒了 - 所以基本服务只需要“作为服务登录”(加上特定于服务逻辑的任何权限,例如访问网络资源)。由于某种原因,我想象中需要大量的权限。谢谢。 - Paul Nearney
3
有时候这样做似乎不够。我已经尝试了这两个方法,但启动服务时出现错误:“<Windows服务显示名称>服务在本地计算机上启动,然后停止。一些服务会在未被其他服务或程序使用时自动停止。”我不得不将用户账户提升为管理员才能使其正常工作。 - mythofechelon
如何真正做到第一? - zar
仅仅完成这两个步骤并没有解决我的问题。我查看了事件日志,想要找到更多信息,发现我用于驱动服务的域帐户没有权限写入服务的日志文件。我将该域帐户设置为本地管理员,这让我成功地启动了服务! - Shadoninja
@Shadoninja。我在“本地管理员组”中拥有一个域帐户,并且还将该域帐户添加到“本地安全策略”中的“作为服务登录”的选项中,但我的服务仍无法启动。我正在尝试使用此域帐户运行“Themes”服务,但出现错误“服务帐户中不存在所需的启动特权”。 - Omair Nabiel
对我来说,第二点起作用了,我还在用户本地计算机上添加了用户访问权限,以防万一,以允许用户自动运行它。 - Juano

4

我知道这个账户需要拥有“作为服务登录”的特权。除此之外,我不确定。可以在这里快速查阅有关“作为服务登录”的参考信息,并且这里有很多关于具体特权的信息。


2
“BypassTraverseChecking”指的是即使您没有所有中间目录的访问权限,也可以直接访问任何深层子目录,即所有上级目录朝根目录方向。

1

感谢提供这些链接,Chris。我经常想知道像“BypassTraverseChecking”这样的权限具体有什么影响,但从未费心去查找。

我遇到了一个有趣的问题,即在管理员完成初始安装后,发现服务无法访问其文件。我一直认为需要除“作为服务登录”之外的其他内容,直到我发现了文件问题。

  1. 禁用简单文件共享。
  2. 暂时将我的服务帐户设置为管理员。
  3. 使用服务帐户获取文件的所有权。
  4. 将服务帐户从管理员组中删除。
  5. 重新启动。

在获取所有权期间,需要禁用从父目录继承权限并递归地应用权限。

不过,我没有找到“授予所有权”的选项,以避免临时使服务帐户成为管理员。

无论如何,我想发布这篇文章,以防其他人在寻找安全策略问题时走上我曾走过的相同道路,而实际上只是文件系统权限问题。


顺便提一下,它不需要拥有文件,只需要对文件具有读取和执行权限。 - X-Cubed
涉及的文件包括运行时数据和静态构建时间文件。静态文件可以读取/执行,但需要更新运行时文件,创建新文件和目录,删除文件等。可以逐个目录确定确切所需内容,但可能会在发布或修补程序中发生更改,并且难以诊断。因此,您是正确的,只需要部分所有权,但从可维护性的角度考虑,我仍然建议承担所有权。 - T.Rob
这个内容有些古老,但如果有人遇到了这个问题,通常情况下你需要授予“修改”权限。简单总结一下权限:
  • 文件夹:允许读写文件和子文件夹;允许删除文件夹
  • 文件:允许读写文件;允许删除文件
“所有权”实际上并不授予任何对文件的访问权限,只是能够设置权限(完全控制包括这些权限)。管理员应该拥有完全控制权,以防服务账户出现故障。
- LeeM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接