以编程方式授予用户使用远程桌面登录的能力

以编程方式授予用户使用远程桌面登录的能力

我有几个 Windows Server 2022 主机,需要通过自动化来管理用户权限分配。

当我手动授予域用户远程交互登录权限权限,他们无法使用远程桌面登录,他们会收到一条错误消息,指出他们未获得授权。如果我授予他们本地远程桌面用户组,即可成功登录。

远程桌面用户组被授予远程交互登录权限权,但没有其他权利。

该组还被授予了哪些其他权限,我还需要将这些权限授予个人用户以启用该功能?

答案1

远程交互登录权限是一种特权(您可以使用以下策略授予此特权:允许通过远程桌面服务登录)正如文档所述:

此策略设置确定哪些用户或组可以通过远程桌面服务连接访问远程设备的登录屏幕[...]

太棒了!但是,正如您所看到的,除非用户是远程桌面用户的成员,否则他们仍会收到错误消息。这也记录在案:

要使用远程桌面服务成功登录到远程设备,用户或组必须是远程桌面用户或管理员组的成员,并被授予允许通过远程桌面服务登录的权限。[...]

嗯,这是因为(至少)有两层:

  1. 远程桌面服务安全描述符:远程桌面服务已它自己的访问列表。
  2. 远程交互登录权限特权

这里的顺序很重要:用户首先连接到远程桌面服务,如果允许,那么 Windows 将在打开用户会话之前检查用户的令牌是否持有 SeRemoteInteractiveLogonRight。

您可以看到远程桌面服务安全描述符在里面Win32_TSPermissionsSetting WMI 类StringSecurityDescriptor用于 RDP-Tcp)。例如,您可以将 StringSecurityDescriptor 提供给 Powershell cmdlet,ConvertFrom-SddlString以更漂亮的格式查看其内容:

$sddl = Get-WmiObject -class win32_tspermissionssetting -Namespace root\cimv2\terminalservices | where {$_.TerminalName -eq "RDP-Tcp"} |select StringSecurityDescriptor

ConvertFrom-SddlString -Sddl $sddl.StringSecurityDescriptor | select -ExpandProperty DiscretionaryAcl

输出将显示默认情况下允许远程桌面用户组:

[...]
Remote Desktop Users: AccessAllowed
[...]

基本上,授予SeRemoteInteractiveLogonRight不会将用户/组添加到远程桌面安全描述符,因此远程桌面服务会拒绝登录Windows 甚至必须检查是否授予了 SeRemoteInteractiveLogonRight。

您可以使用新增帐户方法:SDDL 将被修改,您将在其中看到您的帐户/组。如果您授予了该SeRemoteInteractiveLogonRight权限,那么您应该能够登录(当然,除非此计算机或用户有其他限制)。

现在,如果你在远程桌面服务安全描述符中添加用户,但没有授予权限,会发生什么情况SeRemoteInteractiveLogonRight?好吧,远程桌面服务将接受连接,但是当 Windows 尝试打开你的会话时,你会看到一个错误,正如你所见,这不是 RDP 客户端抛出的错误,图形通道已打开,远程计算机显示了错误:

由于缺少权限,无法登录,显示错误消息

这就是安全审计日志在这种情况下告诉我们的内容(如果您正在审计):

事件 ID 4625 RDP 登录失败

你会不是如果由于在 Windows 有机会检查权限之前登录操作失败而导致用户不被允许根据远程桌面服务安全描述符进行连接,则会看到此事件。

我强烈建议您使用该Remote Desktop Users组,因为该组默认存在于远程桌面服务安全描述符中,并被允许使用该SeRemoteInteractiveLogonRight权限(除非服务器是 DC)。您不需要摆弄 RDS 安全描述符。

相关内容