среда, 6 марта 2019 г.

Ограничение подключений пользователей к RDP при публикации приложений RemoteApp

Использование RemoteApp для публикации приложений в Windows 2012 и 2016 без Active Directory, не даст вам напрямую публиковать приложения. Данные ограничения обойти не сложно, но из-за отсутствия контроля прав на уровне AD, вы не cможете гибко настроить права на доступ к тем или иным ресурсам, сервисам и пр.

Если вы используете RemoteApp в Windows 2012 и 2016 без AD, вас ожидает неприятный баг. Пользователи будут иметь возможность подключения в режиме рабочего стола, т.е. полноценный RDP. А вам необходимо только публиковать приложения и ничего более. Но при этом вы не можете исключить пользователей из группы "Пользователи удалённого рабочего стола", поскольку перестанут работать подключения к публикуемым приложениям.

Чтобы разрешить подключения по RDP только Администраторам (тем, кто входит в локальную группу на сервере), можно воспользоваться PowerShell скриптом, который будет проверять, входит ли пользователь в группу администраторов, и отключать от сессии тех, кто не входит в группу.



Делается такое ограничение, через настройку локальных групповых политик. Путём включения политики, которая будет выполнять скрипт проверки при каждом RDP подключении. Прич этом в режиме RemoteApp, приложения будут запускаться.

Приведённый ниже скрипт, необходимо сохранить с расширением файла ps1. Например назовите скрипт kicknoadmin.ps1 и сохраните его в корне диска C:\

$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
}


Далее, необходимо запустить на вашем сервере редактор локальных групповых политик.
Выполните gpedit.msc

Перейдите по пути: Конфигурация пользователя - Административные шаблоны - Компоненты Windows - Службы удалённых рабочих столов.

В разделе «Службы удалённых рабочих столов», найдите политику "Запускать программу при подключении".

Включите политику и в свойствах, у вас станет активным поле "Путь к программе и имя файла".



В эту строчку впишите

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden -NoExit -FILE C:\kicknoadm.ps1

Где C:\kicknoadm.ps1 - это путь, где у вас расположен файл скрипта "kicknoadm.ps1"



Рабочая папка должна быть C:\

Для проверки, создайте на сервере тестового пользователя, включите его в группу Администраторы. Подключитесь к серверу по RDP. Выполните mstsc, введите те же ip и порт, который используете при подключении RemoteApp, подключитесь, введите логин и пароль от тестового пользователя, затем вы подключитесь к удалённому рабочему столу. Таким образом могут подключаться любые пользователи, которым вы даёте доступ к RemoteApp (этот и есть тот баг, о котором писалось в начале).

Завершите сеанс тестового пользователя, проверьте через диспетчер задач на сервере, что пользователь не просто отключен, а отсутствует в списке активных пользователей. При необходимости нажмите на пользователя правой кнопкой мыши и выберите пункт «Выход».



Исключите тестового пользователя из группы Администраторы.

Выполните mstsc, введите те же ip и порт, который используете при подключении RemoteAPP, подключитесь, введите логин и пароль от тестового пользователя. Если вы выполнили все настройки верно, то после подключения у вас появится окно командной строки, и через несколько секунд сеанс завершится, т.к. пользователь не является Администратором.



Комментариев нет:

Отправить комментарий