如何为服务账户授予远程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

