3

背景:我正在编写一项服务,并希望尽可能少地赋予它特权。

虚拟帐户(有时称为“虚拟服务帐户”)是Windows 7/2008R2 的新增功能,文档很少,它是自动管理的帐户,用于需要最低权限但在域环境中使用计算机身份访问网络的服务。

我的服务不需要网络访问,所以我使用 LocalService,但我不喜欢这样一个事实,即如果我授予对文件/等的访问权限,我会授予对作为该帐户运行的所有服务的访问权限。

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

4

1 回答 1

3

您无需更改运行服务的帐户;LocalService很好。

相反,将服务配置为具有非零 SID 类型,即指定SERVICE_SID_TYPE_UNRESTRICTEDSERVICE_SID_TYPE_RESTRICTED。您可以使用ChangeServiceConfig2()函数和SERVICE_CONFIG_SERVICE_SID_INFO选项来执行此操作。

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

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

于 2016-04-14T04:29:44.897 回答