背景:我正在编写服务,并希望尽可能少地授予它。
虚拟帐户(有时是“虚拟服务帐户”)是Windows 7 / 2008R2新增的sparsely documented新功能,它们是自动管理帐户,用于需要最少权限但在域环境中使用计算机身份访问网络的服务。
我的服务不需要网络访问,因此我使用的是LocalService,但我不喜欢这样的事实:如果我授予对文件/ etc的访问权限,我授予访问作为该帐户运行的所有服务的权限。
我可以使用权限最少的帐户吗?
答案 0 :(得分:2)
您无需更改服务运行的帐户; LocalService
没问题。
相反,请将服务配置为non-zero SID type,即指定SERVICE_SID_TYPE_UNRESTRICTED
或SERVICE_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
而不是空列表,尽管我可能会错误地记录。)