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

时间:2016-04-14 00:24:54

标签: windows windows-services windows-security least-privilege

背景:我正在编写服务,并希望尽可能少地授予它。

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

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

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

1 个答案:

答案 0 :(得分:2)

您无需更改服务运行的帐户; LocalService没问题。

相反,请将服务配置为non-zero SID type,即指定SERVICE_SID_TYPE_UNRESTRICTEDSERVICE_SID_TYPE_RESTRICTED。您可以使用ChangeServiceConfig2()功能和SERVICE_CONFIG_SERVICE_SID_INFO选项执行此操作。

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

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