You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为服务账户授予远程Windows服务控制权限?Subinacl使用疑问

问题描述

我正在配置一个由服务账户运行的周期性任务,该任务需要在不同时间远程启停多台机器上的服务。此服务账户无需管理员权限,仅需拥有目标服务的访问权限即可。使用Subinacl可授予服务特定权限,但似乎未提供远程管理所需的全部权限。

我通过命令subinacl.exe /service \\machine\myservice /GRANT=Domain\SVCAccount=TOP为该账户授予启停权限,并将其添加至远程机器的远程管理用户组,以便通过Invoke-Command进行访问。

当我运行命令:

Invoke-Command -Credential $SVCcredential -ComputerName server -ScriptBlock {Restart-Service service}

时,出现错误:Cannot find any service with service name 'name'。我查阅资料后发现,相关讨论提到了SC_MANAGER_ENUMERATE_SERVICE权限,但无法找到为非交互式用户授予该权限的方法。我确认服务名称无误,因为移除Invoke-Command中的账户凭据并以自身身份运行时可正常执行。

我还尝试以该服务账户身份使用net stop/start命令,命令未返回错误,但并未重启服务,无任何实际效果。

请问我在使用subinacl.exe时是否遗漏了某些简单设置以解决此问题?

解决方案
  • 补全服务管理器权限授予。Restart-Service需要先枚举服务,因此必须给服务账户添加服务管理器的枚举权限,执行以下命令:

    subinacl.exe /keyreg "\\machine\HKLM\SYSTEM\CurrentControlSet\Services" /GRANT=Domain\SVCAccount=R
    subinacl.exe /service "\\machine\*" /GRANT=Domain\SVCAccount=ENUMERATE
    

    第一条命令给服务注册表项添加读取权限,第二条给目标机器所有服务授予枚举权限,解决服务找不到的问题。

  • 修正Subinacl命令的路径格式。确保机器名前使用双反斜杠\\,原命令中的\machine\myservice少一个反斜杠会导致权限授予失败,修正后的启停权限命令应为:

    subinacl.exe /service \\machine\myservice /GRANT=Domain\SVCAccount=TOP
    
  • 验证远程管理权限。确认服务账户在远程机器的Remote Management Users组中,同时该组被允许通过WinRM访问,可通过winrm get winrm/config/client/auth查看相关配置。

  • 单独指定服务启停权限。若使用net stop/start命令,可直接授予明确的启停权限替代TOP权限,避免权限冗余或缺失:

    subinacl.exe /service \\machine\myservice /GRANT=Domain\SVCAccount=STOP,START
    

内容的提问来源于stack exchange,提问作者Ben Adams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:44:53