Недавно подготавливал терминальный сервер с приложениями опубликованными через RemoteApp. Как оказалось, пользователь, которому предоставили опубликованное таким образом приложение, может подключиться к терминальному серверу через обычный RDP и работать на сервере.
Меня это не устраивало и пришлось произвести некоторую настройку что бы Администраторы сервера могли спокойно подключаться по RDP в целях администрирования сервера, а пользователи могли использовать только опубликованные для них приложения.
Для реализации использовался скрипт на PowerShell который при подключении пользователя определял в какой группе он находится и от этого делал определенные действия.
Сам скрипт:
$isadmin = 0
$lsid = "S-1-5-32-544"
$lgroup = ([Security.Principal.SecurityIdentifier]$lsid).Translate([Security.Principal.NTAccount]).Value.Split("\")[1]
$wla = [ADSI]"WinNT://$env:computername/$lgroup,group"
$wla.Members() | foreach {
$member = ($_.GetType().InvokeMember("AdsPath","GetProperty",$null,$_,$null)).Split("/")[4]
if ($env:username -eq $member) {
$isadmin = 1
}
}
if ($isadmin -eq 0) {
logoff
}
elseif ($isadmin -eq 1) {
c:\windows\explorer.exe
}
Скрипт проверяет членство пользователя в группе локальных администраторов. Если пользователь входит в эту группу, то происходит нормальный логин. Если пользователь не входит в группу локальных администраторов, то происходит завершение сеанса пользователя.
Единственная оговорка — скрипт писался для работы на сервере вне домена. Для работы в домене необходимо заменить строку на
$member = ($_.GetType().InvokeMember("AdsPath","GetProperty",$null,$_,$null)).Split("/")[3]
После подготовки скрипта необходимо установить его выполнение на сервере при каждом RDP подключении. Делается это через редактирование Локальной групповой политики (gpedit.msc):
«Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленных рабочих столов -> Запускать программу при подключении»
А запускающая команда должна выглядеть следующим образом:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden -NoExit -FILE C:\$путь-к-файлу-скрипта$.ps1
ЗЫ: Не забудьте установить правильную политику запуска файлов PowerShell (Get-Help Set-ExecutionPolicy)
ЗЫ2: При такой реализации при подключении Администратора в его сессии работает процесс powershell.exe, если его «убить» будет немедленный LogOff.
Этот комментарий был удален автором.
ОтветитьУдалить