服务创建服务 - 将 SC_MANAGER_CREATE_SERVICE 分配给用户
Posted
技术标签:
【中文标题】服务创建服务 - 将 SC_MANAGER_CREATE_SERVICE 分配给用户【英文标题】:Services Creating Services - Assigning SC_MANAGER_CREATE_SERVICE to a User 【发布时间】:2016-12-09 00:35:27 【问题描述】:我正在尝试创建一个有权创建其他服务的 Windows 服务。但我不希望使用管理登录名运行此服务。
否则用户权限非常有限 - 我只需要它能够根据请求启动服务。
我看到网上提到 SC_MANAGER_CREATE_SERVICE 是您现在可以分配和/或更改的权限,但我没有看到太多关于如何完成的内容。提到能够通过 subinacl、OpenSCManager 和 - gulp - sc 命令更改单个服务的权限。但这些示例展示了如何更改单个服务的权限,而不是如何授予用户 SC_MANAGER_CREATE_SERVICE 权限。
但是,我注意到 CreateService 上的文档明确指出它需要管理员权限 - 所以也许根本不可能。
我是否必须使用管理员帐户启动服务?或者有谁知道另一个技巧?
【问题讨论】:
是因为什么原因你不能使用 LocalService 帐户?CreateService()
文档中的任何内容都没有明确说明需要管理员权限(尽管这是有道理的,因为它写入注册表中的HKEY_LOCAL_MACHINE
),只有OpenSCManager()
必须调用SC_MANAGER_CREATE_SERVICE
在dwDesiredAccess
参数中指定。
【参考方案1】:
见Service Security and Access Rights:
要获取或设置 SCM 的安全描述符,请使用带有 SCManager 对象句柄的 QueryServiceObjectSecurity 和 SetServiceObjectSecurity 函数。
请注意,拥有创建服务的权限会为您提供有效的管理员访问权限,因为您可以创建服务以作为本地系统运行。因此,您确实需要注意不要将该权限授予不受信任的用户可以访问的帐户,以确保所有具有该权限的帐户都具有强密码,等等。
这也意味着,如果您的系统服务受到远程代码执行漏洞的影响,您还没有获得任何东西,攻击者仍然能够控制您的系统。如果该服务面临直接攻击的高风险,那么明智的做法是让第二个服务只负责需要特殊权限的任务。但是,对于不太可能受到直接攻击或被认为相当安全的服务,在没有管理员权限(创建服务的能力除外)的情况下运行可能会阻止不太严重的漏洞被利用,或限制由非- 与安全相关的错误。
另请参阅服务器故障上的Granting service control manager access permission to user outside of administrator group,答案显示如何从命令行更改 SCM 权限。
【讨论】:
以上是关于服务创建服务 - 将 SC_MANAGER_CREATE_SERVICE 分配给用户的主要内容,如果未能解决你的问题,请参考以下文章