【问题标题】:Virtual Service Account without Network Access, like NT AUTHORITY\LocalService没有网络访问权限的虚拟服务帐户,例如 NT AUTHORITY\LocalService
【发布时间】:2016-08-05 08:06:49
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    相反,将服务配置为具有non-zero SID type,即指定SERVICE_SID_TYPE_UNRESTRICTEDSERVICE_SID_TYPE_RESTRICTED。您可以使用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 而不是空列表,尽管我可能记错了。)

    【讨论】:

    • 是否可以使用sc 实用程序实现此目的?目前我正在使用一个简单/可理解的 3 行批处理脚本来安装,我不想在这个地方进行 P/Invoking。
    • 当然。 sc qsidtype 设置 SID 类型,sc qprivs 设置所需权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2012-07-04
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多