Здравствуйте, уважаемые хабражители!
В этой небольшой статье я расскажу вам свой рецепт решения проблемы с интерактивным входом пользователей на сервер remoteapp.
Проблема заключается в том, что если на сервере терминалов windows 2008 есть опубликованные приложения remoteapp, то помимо запуска самого приложения и работы с ним пользователь может запустить «подключение к удаленному рабочему столу» и войдя на сервер получить доступ к рабочему столу и остальным прелестям gui. С помощью powershell мы разрешим администраторам подключаться и входить в систему, а пользователям оставим только запуск приложений remoteapp.

Что нам для этого понадобится:


Для написания скрипта — PowerGUI Script Editor.
Windows Server 2008 R2 с установленной ролью «Службы удаленных рабочих столов».
Групповые или локальные политики сервера.

Определяем цели:


  1. При входе на сервер определяем членство в группах.
  2. Если пользователь входит в группу локальных администраторов сервера — значит пришел по делу, разрешаем вход в систему.
  3. Если нет — отлогиниваем пользователя.

Пояснение: в этой статье я буду использовать локальные группы сервера, в рабочей среде будет удобнее использовать доменные группы. Например, стандартную доменную группу «Администраторы домена». Так же я исхожу из того, что политика выполнения скриптов powershell на сервере имеет значение отличное от «Restricted».

Пишем скрипт:


# Скрипт проверки входит ли пользователь в группу администраторов.
# Если пользователь не входит в группу - отлогиниваем его.
# Скрипт нужен для предотвращения интерактивного входа пользователей на сервер терминалов.

$Checkme = whoami /groups | Select-String -Pattern "Администраторы" -SimpleMatch -Quiet
if ($Checkme -eq $true){explorer.exe}
	else {logoff.exe}

В первой строке скрипта с помощью whoami получаем членство в группах пользователя, затем ищем совпадение со строкой «Администраторы» устанавливая значение переменной Checkme true если совпадение найдено или false если совпадений нет.
Затем если переменная Checkme истинна (true) запускаем процесс explorer.exe и продолжаем вход на сервер.
В противном случае запускаем logoff.exe и выполняем выход пользователя с сервера.

Вооружаем сервер:


Если вы для написания скриптов powershell используете PowerGUI Script Editor то можете скомпилировать ваш скрипт в исполняемый файл с помощью меню «Инструменты» выбрав пункт «Compile script».



Теперь нам осталось сохранить полученный exe файл на локальный диск сервера терминалов в удобное место и убедиться что пользователи имеют доступ на чтение. Затем с помощью команды gpedit.msc запустить консоль «Редактора локальной групповой политики» (или воспользоваться групповыми политиками домена) и в параметре «Конфигурации пользователя\Административные шаблоны\Компоненты Windows\Службы удаленных рабочих столов\Узел сеансов удаленных рабочих столов\Среда удаленных рабочих столов\Запускать программу при подключении» указать путь к exe файлу скрипта.



Обновляем политику на сервере и проверяем подключаясь к серверу терминалов под аккаунтами пользователя и администратора.
Войти на сервер под аккаунтом пользователя мы не сможем, а запустить remoteapp расположенные на нем — вполне.

Заключение:


Возможно, это не самое элегантное решение описанной мной проблемы, но в нем использованы только стандартные средства windows, что по достоинству оценит каждый системный администратор.
Спасибо за внимание.