向非管理员用户授予对SCManager的远程访问权限

时间:2020-01-09 10:46:27  来源:igfitidea点击:

让我们考虑一下向没有本地管理员权限的域用户授予远程访问权限以枚举在远程服务器上运行的服务列表的特性。实际上,任务归结为提供与 服务控制管理器( SCManager的远程连接)。

问题是这样的。我们可以在某个远程服务器上查询某个服务的状态。很明显,这个远程用户没有任何管理权限和访问本地服务器的特权。

尝试使用连接并获取远程计算机上的服务列表时服务.msc控制台,用户看到以下错误:

Windows无法打开计算机\u name上的服务控制管理器数据库

错误5:访问被拒绝。

如果我们尝试使用获取远程服务器上的服务列表sc.exe文件,误差如下:

C:\Windows\system32>sc \lonts-01 query

[SC]OpenSCManager失败5:

访问被拒绝。

对服务列表的访问是由服务控制管理器数据库的安全描述符控制的,在windows2003sp1中,用户从“已验证用户”的远程访问已经受到限制(这很合乎逻辑)。只有本地管理员组的成员才有权远程访问此服务。

让我们考虑如何授予对服务控制管理器的远程访问权以获取服务器上的服务列表,以及普通用户(没有管理权限)如何在Windows server 2012 R2中获取这些服务的状态。

可以使用获取当前服务控制管理器(SCM)权限 **sc.exe文件]通过在命令提示符下运行以下命令,以管理员权限运行:

sc sdshow scmanager

该命令返回类似的SDDL字符串:

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

在这种情况下,我们可以看到,默认情况下,Authenticated Users(AU)组只允许使用SCM进行连接,而不允许轮询(LC)服务。将此字符串复制到任何文本编辑器。

下一步是获取一个用户或者组的SID,该用户或者组要授予对SCM的远程访问权限(如何通过用户名获取用户SID)。例如,让我们获取AD组lon hd的SID:

[Get-ADgroup](http://theitroad.local/active-directory-group-management-using-powershell/#h2_4) -Identity lon-hd | select SID
SID
--
S-1-5-21-2470146451-39123456388-2999995117-23338978

从文本编辑器中的SDDL字符串复制块(A;;cclcrpc;;;IU)–(IU表示交互式用户),将复制块中的IU替换为用户/组的SID,并粘贴在S之前获得的字符串:

在我们的例子中,我们得到了以下字符串:

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CCLCRPRC;;;S-1-5-21-2470146451-39123456388-2999995117-23338978)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

现在,让我们更改服务控制管理器安全描述符的参数:

sc sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CCLCRPRC;;;S-1-5-21-2470146451-39123456388-2999995117-23338978)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"

字符串 [SC]SetServiceObjectSecurity SUCCESS表示新的安全参数已成功应用,并且用户拥有与本地身份验证用户相似的权限:SC_MANAGER_CONNECT、SC_MANAGER_ENUMERATE_SERVICE、SC_MANAGER_QUERY_LOCK_STATUS和标准_RIGHTS_READ。

确保远程用户可以从services.msc使用sc\srv-name1查询的控制台