Abban a szervezetben, ahol dolgozom, a távmunka elvileg tilos. Volt. Egészen a múlt hétig. Most sürgősen végre kellett hajtanunk egy megoldást. Üzlettől - folyamatok adaptálása új munkaformátumhoz, tőlünk - PKI PIN kódokkal és tokenekkel, VPN, részletes naplózás és még sok más.
Többek között a Remote Desktop Infrastructure aka Terminal Services beállítását végeztem. Számos RDS-telepítéssel rendelkezünk különböző adatközpontokban. Az egyik cél az volt, hogy a kapcsolódó informatikai részlegekről dolgozó kollégák interaktív módon kapcsolódhassanak a felhasználói munkamenetekhez. Tudniillik erre van egy szabványos RDS Shadow mechanizmus, melynek delegálásának legegyszerűbb módja, ha helyi rendszergazdai jogokat adunk az RDS szervereken.
Tisztelem és nagyra becsülöm a kollégáimat, de nagyon mohó vagyok az adminisztrátori jogok kiosztásában. 🙂 Aki egyetért velem, kövesse a vágást.
Nos, a feladat egyértelmű, most térjünk rá az üzletre.
Lépés 1
Hozzon létre egy biztonsági csoportot az Active Directoryban RDP_Operators és tartalmazza azoknak a felhasználóknak a fiókját, akikre jogokat szeretnénk átruházni:
Ha több AD-helye van, meg kell várnia, amíg az összes tartományvezérlőre replikálódik, mielőtt a következő lépésre lépne. Ez általában nem tart tovább 15 percnél.
Lépés 2
Adjunk a csoportnak jogot a terminálmunkamenetek kezeléséhez az egyes RDSH-kiszolgálókon:
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")
}
}
}
Lépés 3
Adja hozzá a csoportot a helyi csoporthoz Távoli asztali felhasználók mindegyik RDSH szerveren. Ha a szervereit munkamenet-gyűjteményekbe egyesítjük, akkor ezt a gyűjtemény szintjén tesszük:
Egyedi szerverekhez használjuk csoportszabályzat, várja, hogy alkalmazzák a szervereken. Azok, akik lusták várni, felgyorsíthatják a folyamatot a jó öreg gpupdate segítségével központilag.
Lépés 4
Készítsük elő a következő PS-szkriptet a „menedzserek” számára:
A PS-szkript futtatásának kényelmesebbé tétele érdekében létrehozunk hozzá egy parancsértelmezőt egy cmd-fájl formájában, amelynek neve megegyezik a PS-szkriptével:
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Mindkét fájlt egy mappába helyezzük, amely elérhető lesz a „kezelők” számára, és megkérjük őket, hogy jelentkezzenek be újra. Mostantól a cmd fájl futtatásával kapcsolódhatnak más felhasználók munkameneteihez RDS Shadow módban, és kijelentkezésre kényszeríthetik őket (ez akkor lehet hasznos, ha a felhasználó nem tudja önállóan megszakítani a „függő” munkamenetet).
Valami így néz ki:
A "menedzsernek"
A felhasználó számára
Néhány utolsó megjegyzés
1. árnyalat. Ha a felhasználói munkamenet, amelynek az irányítást át akarjuk szerezni, azelőtt indult el, hogy a Set-RDSPermissions.ps1 parancsfájl futott volna a szerveren, akkor a „kezelő” hozzáférési hibát kap. A megoldás itt kézenfekvő: várja meg, amíg a felügyelt felhasználó bejelentkezik.
2. árnyalat. Több napos RDP Shadow-val végzett munka után egy érdekes hibát vagy funkciót vettünk észre: az árnyékmunka befejezése után a tálcán lévő nyelvi sáv eltűnik a felhasználó számára, amelyhez csatlakozik, és a visszaállításhoz újra kell -Belépés. Mint kiderült, nem vagyunk egyedül: idő, два, három.
Ez minden. Jó egészséget kívánok neked és a kiszolgálóidnak. Mint mindig, most is várom visszajelzését a megjegyzésekben, és arra kérem Önt, hogy töltse ki az alábbi rövid kérdőívet.