A l'organització on treballo, el treball a distància està prohibit en principi. Era. Fins la setmana passada. Ara havíem d'implementar urgentment una solució. Des del negoci - processos d'adaptació a un nou format de treball, de nosaltres - PKI amb codis PIN i fitxes, VPN, registre detallat i molt més.
Entre altres coses, estava configurant la infraestructura d'escriptori remot, també conegut com a Terminal Services. Tenim diversos desplegaments RDS en diferents centres de dades. Un dels objectius era permetre als col·legues dels departaments informàtics relacionats connectar-se a les sessions d'usuari de manera interactiva. Com sabeu, hi ha un mecanisme d'ombra RDS estàndard per a això, i la manera més senzilla de delegar-lo és donar drets d'administrador local als servidors RDS.
Respecto i valoro els meus companys, però sóc molt avariciós a l'hora de repartir drets d'administrador. 🙂 Per a aquells que estiguin d'acord amb mi, seguiu el tall.
Bé, la tasca és clara, ara anem als negocis.
Pas 1
Creem un grup de seguretat a Active Directory RDP_Operadors i incloure-hi els comptes d'aquells usuaris als quals volem delegar drets:
Si teniu diversos llocs d'AD, haureu d'esperar fins que es repliqui a tots els controladors de domini abans de passar al pas següent. Això normalment no triga més de 15 minuts.
Pas 2
Donem els drets del grup per gestionar les sessions de terminal a cadascun dels servidors 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")
}
}
}
Pas 3
Afegeix el grup al grup local Usuaris d'escriptori remot a cadascun dels servidors RDSH. Si els vostres servidors es combinen en col·leccions de sessions, ho fem a nivell de col·lecció:
Per a servidors únics que fem servir política de grup, esperant que s'apliqui als servidors. Aquells que tinguin massa mandra per esperar poden accelerar el procés utilitzant una bona gpupdate antiga, preferiblement centralment.
Perquè l'script PS sigui còmode d'executar-lo, crearem un shell per a aquest en forma d'un fitxer cmd amb el mateix nom que l'script PS:
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Posem els dos fitxers en una carpeta que serà accessible per als "gestors" i els demanem que tornin a iniciar sessió. Ara, mitjançant l'execució del fitxer cmd, podran connectar-se a les sessions d'altres usuaris en mode d'ombra RDS i obligar-los a tancar la sessió (això pot ser útil quan l'usuari no pot finalitzar de manera independent una sessió "penjada").
Sembla una cosa així:
Per al "gerent"
Per a l'usuari
Uns quants comentaris finals
Matisos 1. Si la sessió d'usuari sobre la qual estem intentant tenir el control es va iniciar abans que l'script Set-RDSPermissions.ps1 s'executés al servidor, el "gestor" rebrà un error d'accés. La solució aquí és òbvia: espereu fins que l'usuari gestionat iniciï sessió.
Matisos 2. Després de diversos dies de treball amb RDP Shadow, vam notar un error o una característica interessant: després del final de la sessió d'ombra, la barra d'idioma de la safata desapareix per a l'usuari al qual està connectat i, per recuperar-lo, l'usuari ha de tornar a -iniciar Sessió. Com a resultat, no estem sols: temps, два, 03:00.
Això és tot. Et desitjo molta salut a tu i als teus servidors. Com sempre, espero els vostres comentaris als comentaris i us demano que feu l'enquesta breu a continuació.