Windows 服务创建服务-将SC_MANAGER_CREATE_服务分配给用户

Windows 服务创建服务-将SC_MANAGER_CREATE_服务分配给用户,windows,winapi,service,Windows,Winapi,Service,我正在尝试创建一个有权创建其他服务的Windows服务。但我不希望使用管理登录来运行此服务 用户权限在其他方面相当有限——我只需要它能够根据请求启动服务 我在网上看到有人提到,SC_MANAGER_CREATE_SERVICE是一种您现在可以分配和/或更改的权限,但我没有看到多少关于如何做到这一点的内容。提到可以通过subinacl、OpenSCManager和-gulp-sc命令更改单个服务的权限。但这些示例显示了如何更改单个服务的权限,而不是如何授予用户SC_MANAGER_CREATE_服

我正在尝试创建一个有权创建其他服务的Windows服务。但我不希望使用管理登录来运行此服务

用户权限在其他方面相当有限——我只需要它能够根据请求启动服务

我在网上看到有人提到,SC_MANAGER_CREATE_SERVICE是一种您现在可以分配和/或更改的权限,但我没有看到多少关于如何做到这一点的内容。提到可以通过subinacl、OpenSCManager和-gulp-sc命令更改单个服务的权限。但这些示例显示了如何更改单个服务的权限,而不是如何授予用户SC_MANAGER_CREATE_服务权限

然而,我注意到CreateService上的文档特别指出它需要管理员权限——所以可能根本不可能

我是否必须使用管理员帐户启动服务?或者有人知道另一个窍门吗?

参见

要获取或设置SCM的安全描述符,请使用带有SCManager对象句柄的QueryServiceObjectSecurity和SetServiceObjectSecurity函数

请注意,拥有创建服务的权限可以使您获得有效的管理员访问权限,因为您可以创建作为本地系统运行的服务。因此,您确实需要小心,不要将该权限授予不受信任的用户有权访问的帐户,以确保所有具有该权限的帐户都具有强密码,等等

这还意味着,如果您的系统服务受到远程代码执行漏洞的危害,而您还没有获得任何信息,则攻击者仍然能够控制您的系统。如果服务面临直接攻击的高风险,那么最好使用第二个服务,该服务只负责需要特殊权限的任务。但是,对于不太可能受到直接攻击或被认为是合理安全的服务,在没有管理员权限(创建服务的能力除外)的情况下运行可能会防止不太严重的漏洞被利用,或限制非安全相关错误造成的损害


另请参见关于服务器故障,答案显示了如何从命令行更改SCM权限。

是否有某些原因导致您无法使用LocalService帐户?
CreateService()
文档中没有明确说明需要管理员权限(尽管这样做是有意义的,因为它写入注册表中的
HKEY\U LOCAL\U MACHINE
),只有
OpenSCManager()
必须使用
SC\u MANAGER\u CREATE\u SERVICE
调用
dwdesireedAccess
参数中指定的