Dans l'organisation où je travaille, le travail à distance est en principe interdit. Était. Jusqu'à la semaine dernière. Maintenant, je devais mettre en œuvre de toute urgence une solution. De l'entreprise - adaptation des processus à un nouveau format de travail, de nous - PKI avec codes PIN et jetons, VPN, journalisation détaillée et bien plus encore.
Entre autres choses, j'ai été impliqué dans la mise en place de l'infrastructure de bureau à distance alias Terminal Services. Nous avons plusieurs déploiements RDS dans différents centres de données. L'un des objectifs était de permettre aux collègues des services informatiques concernés de se connecter de manière interactive aux sessions utilisateur. Comme vous le savez, il existe un mécanisme RDS Shadow régulier pour cela et le moyen le plus simple de le déléguer est de donner des droits d'administrateur local sur les serveurs RDS.
Je respecte et apprécie mes collègues, mais je suis très gourmand pour la distribution des droits d'administration. 🙂 Ceux qui sont d'accord avec moi, merci sous chat.
Eh bien, la tâche est claire, maintenant - pour les entreprises.
Étape 1
Créer un groupe de sécurité dans Active Directory RDP_Opérateurs et y inclure les comptes des utilisateurs auxquels nous voulons déléguer des droits :
Si vous avez plusieurs sites AD, avant de passer à l'étape suivante, vous devez attendre qu'il soit répliqué sur tous les contrôleurs de domaine. Cela ne prend généralement pas plus de 15 minutes.
Étape 2
Donnons au groupe le droit de gérer les sessions terminal sur chacun des serveurs 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")
}
}
}
Étape 3
Ajouter un groupe à un groupe local Utilisateurs de bureau à distance sur chacun des serveurs RDSH. Si vos serveurs sont combinés en collections de sessions, nous le faisons au niveau de la collection :
Pour les serveurs uniques, utilisez stratégie de groupe, en attendant qu'il soit appliqué sur les serveurs. Pour ceux qui ont la flemme d'attendre, vous pouvez forcer le processus avec le bon vieux gpupdate, de préférence au centre.
Étape 4
Préparons le script PS suivant pour les "managers":
Pour faciliter l'exécution du script PS, nous allons lui créer un shell sous la forme d'un fichier cmd portant le même nom que le script PS :
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Nous mettons les deux fichiers dans un dossier qui sera disponible pour les "gestionnaires" et leur demandons de se reconnecter. Désormais, en exécutant le fichier cmd, ils pourront se connecter aux sessions des autres utilisateurs en mode RDS Shadow et les forcer à se déconnecter (c'est utile lorsque l'utilisateur ne peut pas mettre fin à la session "accrochée" par lui-même).
Cela ressemble à ceci:
Pour "gestionnaire"
Pour l'utilisateur
Quelques dernières remarques
Nuance 1. Si la session de l'utilisateur à laquelle nous essayons de prendre le contrôle a été démarrée avant l'exécution du script Set-RDSPermissions.ps1 sur le serveur, alors le "gestionnaire" recevra une erreur d'accès. La solution ici est évidente : attendez que l'utilisateur géré se reconnecte.
Nuance 2. Après plusieurs jours de travail avec RDP Shadow, ils ont remarqué un bogue ou une fonctionnalité intéressante : après la fin de la session shadow, l'utilisateur auquel ils se sont connectés fait disparaître la barre de langue dans la barre d'état système, et pour la retourner, le l'utilisateur doit se reconnecter. Il s'avère que nous ne sommes pas seuls : temps, два, trois.
C'est tout. Je vous souhaite la santé ainsi qu'à vos serveurs. Comme toujours, j'attends avec impatience vos commentaires dans les commentaires et vous demande de répondre à un court sondage ci-dessous.