没有网络访问权限的虚拟服务帐户,如 NT AUTHORITY\LocalService

Virtual Service Account without Network Access, like NT AUTHORITY\LocalService

背景:我正在编写一项服务,并希望尽可能少地授予它所需的权限。

虚拟帐户(有时 "Virtual Service Accounts")是 sparsely documented Windows 7/2008R2 的新增功能,它们是自动管理的帐户,适用于需要最低权限但可通过计算机访问网络的服务域环境中的身份。

我的服务不需要网络访问,所以我使用的是 LocalService,但我不喜欢这样的事实:如果我授予对 file/etc 的访问权,我就授予了对所有服务的访问权 运行 作为该帐户。

我可以使用最低权限的帐户吗?

您不需要更改服务 运行 下的帐户; LocalService 可以。

相反,将服务配置为具有 non-zero SID type, i.e., specify either SERVICE_SID_TYPE_UNRESTRICTED or SERVICE_SID_TYPE_RESTRICTED. You can do this using the ChangeServiceConfig2() 功能和 SERVICE_CONFIG_SERVICE_SID_INFO 选项。

然后您可以使用名称为 NT SERVICE\myservice 而不是 LocalService 的服务 SID 授予对文件和其他受保护资源的访问权限。这将仅授予对您的服务的访问权限。 (嗯,和任何其他服务共享相同的进程,但大多数第三方服务 运行 在他们自己的进程中。)

对于最低权限,请使用 SERVICE_SID_TYPE_RESTRICTED。这意味着该服务只能访问明确授予对 Everyone、服务 SID、登录会话 SID 或 WRITE_RESTRICTED 访问权限的受保护对象。您还应该使用 SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 选项来减少授予服务的权限;许多服务根本不需要任何特权。 (在那种情况下,您可能会发现需要指定 SE_CHANGE_NOTIFY_NAME 而不是空列表,尽管我可能记错了。)