背景:我正在编写一项服务,并希望尽可能少地授予它必要的权限。
虚拟帐户(有时称为“虚拟服务帐户”)是 sparsely documented Windows 7/2008R2 的新功能是自动管理的服务帐户,这些服务需要最少的权限,但可以在域环境中使用计算机身份访问网络。
我的服务不需要网络访问权限,所以我使用的是 LocalService,但我不喜欢这样的事实:如果我授予对文件/等的访问权限,我就会授予对以该帐户运行的所有服务的访问权限。
是否有我可以使用的最低权限帐户?
最佳答案
您无需更改运行服务的帐户; LocalService
没问题。
相反,将服务配置为具有 non-zero SID type ,即指定 SERVICE_SID_TYPE_UNRESTRICTED
或 SERVICE_SID_TYPE_RESTRICTED
。您可以使用 ChangeServiceConfig2() 执行此操作函数和 SERVICE_CONFIG_SERVICE_SID_INFO
选项。
然后您可以使用名称为 NT SERVICE\myservice
而不是 LocalService
的服务 SID 授予对文件和其他 protected 资源的访问权限。这将仅授予对您的服务的访问权限。 (好吧,任何其他服务共享相同的进程,但大多数第三方服务在自己的进程中运行。)
对于最低权限,请使用 SERVICE_SID_TYPE_RESTRICTED
。这意味着该服务只能访问明确授予对 Everyone
、服务 SID、登录 session SID 或 WRITE_RESTRICTED
访问权限的 protected 对象。您还应该使用 SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO
选项来减少授予服务的权限;许多服务根本不需要任何特权。 (在这种情况下,您可能会发现需要指定 SE_CHANGE_NOTIFY_NAME
而不是空列表,尽管我可能记错了。)
关于windows - 没有网络访问权限的虚拟服务帐户,如 NT AUTHORITY\LocalService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611765/