Windows

以程式方式授予使用者使用遠端桌面登錄的能力

  • March 2, 2022

我有幾台 Windows Server 2022 主機,需要通過自動化管理使用者權限分配。

當我手動授予域使用者SeRemoteInteractiveLogonRight權限時,他們無法使用遠端桌面登錄,他們收到一條錯誤消息,指出他們未獲得授權。如果我授予他們本地遠端桌面使用者組的成員資格,他們就可以成功登錄。

遠端桌面使用者組被授予SeRemoteInteractiveLogonRight權限,但沒有其他權限。

該組還授予了哪些其他權限,我還需要授予個人使用者以啟用該功能?

SeRemoteInteractiveLogonRight是一個權限(您可以使用以下策略授予此權限:允許通過遠端桌面服務登錄)。正如文件所說:

此策略設置確定哪些使用者或組可以通過遠端桌面服務連接訪問遠端設備的登錄螢幕

$$ … $$

偉大的!但是,如您所見,除非他們是遠端桌面使用者的成員,否則使用者仍會收到錯誤消息。這也被記錄在案:

要使用遠端桌面服務成功登錄到遠端設備,使用者或組必須是遠端桌面使用者或管理員組的成員並被授予允許通過遠端桌面服務登錄權限。

$$ … $$

嗯,這是因為(至少)有兩層:

  1. 遠端桌面服務安全描述符:遠端桌面服務有自己的訪問列表。
  2. SeRemoteInteractiveLogonRight權限_

這裡的順序是相關的:使用者首先連接到遠端桌面服務,如果允許,Windows 將在打開使用者會話之前檢查使用者的令牌是否持有 SeRemoteInteractiveLogonRight。

您可以在Win32_TSPermissionsSetting WMI 類(對於 RDP-Tcp)中看到*遠端桌面服務安全描述符。*例如,您可以將 StringSecurityDescriptor 提供給 Powershell cmdlet ,以便以更漂亮的格式查看其內容:StringSecurityDescriptor``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之前拒絕登錄。

您可以使用AddAccount方法在遠端桌面服務安全描述符中手動添加使用者或組:SDDL 將被修改,您將在其中看到您的帳戶/組。如果您授予了SeRemoteInteractiveLogonRight權限,那麼您應該能夠登錄(當然,除非其他限制對這台電腦或使用者有效)。

現在,如果您在遠端桌面服務安全描述符中添加一個使用者,而不授予 ,會發生什麼SeRemoteInteractiveLogonRight?好吧,遠端桌面服務將接受連接,但是當 Windows 嘗試打開會話時,您會看到一個錯誤,並且如您所見,這不是 RDP 客戶端拋出的錯誤,圖形通道已打開並且錯誤由遠端電腦顯示:

由於缺少權限,無法登錄,顯示錯誤消息

在這種情況下,這就是安全審計日誌告訴我們的內容(如果您正在審計):

事件 ID 4625 RDP 登錄失敗

如果根據遠端桌面服務安全描述符不允許使用者連接,您將看不到此事件,因為在 Windows 有機會檢查權限之前登錄操作失敗。

我強烈建議您使用該Remote Desktop Users組,因為該組預設存在於遠端桌面服務安全描述符中,並且允許使用該SeRemoteInteractiveLogonRight權限(除非伺服器是 DC)。您不需要擺弄 RDS 安全描述符。

引用自:https://serverfault.com/questions/1095018