V organizácii, kde pracujem, je práca na diaľku v zásade zakázaná. Bol. Až do minulého týždňa. Teraz sme museli urýchlene implementovať riešenie. Od biznisu – prispôsobenie procesov novému pracovnému formátu, od nás – PKI s PIN kódmi a tokenmi, VPN, podrobné protokolovanie a mnoho ďalšieho.
Okrem iného som nastavoval infraštruktúru vzdialenej pracovnej plochy alias terminálové služby. Máme niekoľko nasadení RDS v rôznych dátových centrách. Jedným z cieľov bolo umožniť kolegom z príbuzných IT oddelení interaktívne sa pripojiť k užívateľským reláciám. Ako viete, existuje na to štandardný mechanizmus RDS Shadow a najjednoduchší spôsob, ako ho delegovať, je udeliť práva lokálneho správcu na serveroch RDS.
Rešpektujem a vážim si svojich kolegov, ale som veľmi chamtivý, pokiaľ ide o rozdávanie práv správcu. 🙂 Kto so mnou súhlasí, prosím dodržujte strih.
Úloha je jasná, poďme teda na vec.
Krok 1
Poďme vytvoriť bezpečnostnú skupinu v Active Directory RDP_Operators a zahrnúť do nej účty tých používateľov, ktorým chceme delegovať práva:
Ak máte viacero lokalít AD, budete musieť počkať, kým sa replikuje na všetky radiče domény, a až potom prejdete na ďalší krok. Zvyčajne to netrvá dlhšie ako 15 minút.
Krok 2
Dajme skupinovým právam spravovať terminálové relácie na každom zo serverov RDSH:
Set-RDSPermissions.ps1
$Group = "RDP_Operators"
$Servers = @(
"RDSHost01",
"RDSHost02",
"RDSHost03"
)
ForEach ($Server in $Servers) {
#Делегируем право на теневые сессии
$WMIHandles = Get-WmiObject `
-Class "Win32_TSPermissionsSetting" `
-Namespace "rootCIMV2terminalservices" `
-ComputerName $Server `
-Authentication PacketPrivacy `
-Impersonation Impersonate
ForEach($WMIHandle in $WMIHandles)
{
If ($WMIHandle.TerminalName -eq "RDP-Tcp")
{
$retVal = $WMIHandle.AddAccount($Group, 2)
$opstatus = "успешно"
If ($retVal.ReturnValue -ne 0) {
$opstatus = "ошибка"
}
Write-Host ("Делегирование прав на теневое подключение группе " +
$Group + " на сервере " + $Server + ": " + $opstatus + "`r`n")
}
}
}
Krok 3
Pridajte skupinu do miestnej skupiny Používatelia vzdialenej pracovnej plochy na každom zo serverov RDSH. Ak sú vaše servery spojené do kolekcií relácií, robíme to na úrovni kolekcie:
Pre jednotlivé servery, ktoré používame skupinové pravidlá, čaká na jeho uplatnenie na serveroch. Tí, ktorí sú príliš leniví čakať, môžu proces urýchliť pomocou starého dobrého gpupdate centrálne.
Krok 4
Pripravme si nasledujúci PS skript pre „manažérov“:
Aby sa skript PS pohodlne spúšťal, vytvoríme preň shell vo forme súboru cmd s rovnakým názvom ako skript PS:
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Oba súbory vložíme do priečinka, ktorý bude prístupný pre „správcov“ a požiadame ich o opätovné prihlásenie. Spustením súboru cmd sa teraz budú môcť pripojiť k reláciám iných používateľov v režime RDS Shadow a prinútiť ich odhlásiť sa (to môže byť užitočné, keď používateľ nemôže samostatne ukončiť „visiacu“ reláciu).
Vyzerá to takto:
Pre "manažéra"
Pre užívateľa
Pár poznámok na záver
Nuance 1. Ak bola používateľská relácia, nad ktorou sa snažíme získať kontrolu, spustená pred spustením skriptu Set-RDSPermissions.ps1 na serveri, potom „správca“ dostane chybu prístupu. Riešenie je zrejmé: počkajte, kým sa spravovaný používateľ neprihlási.
Nuance 2. Po niekoľkých dňoch práce s RDP Shadow sme si všimli zaujímavú chybu alebo funkciu: po skončení tieňovej relácie pre pripájaného používateľa zmizne jazykový panel v zásobníku a na jeho obnovenie je potrebné -Prihlásiť sa. Ako sa ukazuje, nie sme sami: čas, два, tri.
To je všetko. Prajem vám a vašim serverom veľa zdravia. Ako vždy sa teším na vašu spätnú väzbu v komentároch a žiadam vás o vyplnenie krátkeho prieskumu nižšie.