Терминальный сервер windows 2008 — как разрешить пользователю запуск remoteapp и запретить интерактивный вход в систему
Invite pending
Здравствуйте, уважаемые хабражители!
В этой небольшой статье я расскажу вам свой рецепт решения проблемы с интерактивным входом пользователей на сервер remoteapp.
Проблема заключается в том, что если на сервере терминалов windows 2008 есть опубликованные приложения remoteapp, то помимо запуска самого приложения и работы с ним пользователь может запустить «подключение к удаленному рабочему столу» и войдя на сервер получить доступ к рабочему столу и остальным прелестям gui. С помощью powershell мы разрешим администраторам подключаться и входить в систему, а пользователям оставим только запуск приложений remoteapp.
Для написания скрипта — PowerGUI Script Editor.
Windows Server 2008 R2 с установленной ролью «Службы удаленных рабочих столов».
Групповые или локальные политики сервера.
Пояснение: в этой статье я буду использовать локальные группы сервера, в рабочей среде будет удобнее использовать доменные группы. Например, стандартную доменную группу «Администраторы домена». Так же я исхожу из того, что политика выполнения скриптов powershell на сервере имеет значение отличное от «Restricted».
В первой строке скрипта с помощью whoami получаем членство в группах пользователя, затем ищем совпадение со строкой «Администраторы» устанавливая значение переменной Checkme true если совпадение найдено или false если совпадений нет.
Затем если переменная Checkme истинна (true) запускаем процесс explorer.exe и продолжаем вход на сервер.
В противном случае запускаем logoff.exe и выполняем выход пользователя с сервера.
Если вы для написания скриптов powershell используете PowerGUI Script Editor то можете скомпилировать ваш скрипт в исполняемый файл с помощью меню «Инструменты» выбрав пункт «Compile script».

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

Обновляем политику на сервере и проверяем подключаясь к серверу терминалов под аккаунтами пользователя и администратора.
Войти на сервер под аккаунтом пользователя мы не сможем, а запустить remoteapp расположенные на нем — вполне.
Возможно, это не самое элегантное решение описанной мной проблемы, но в нем использованы только стандартные средства windows, что по достоинству оценит каждый системный администратор.
Спасибо за внимание.
В этой небольшой статье я расскажу вам свой рецепт решения проблемы с интерактивным входом пользователей на сервер remoteapp.
Проблема заключается в том, что если на сервере терминалов windows 2008 есть опубликованные приложения remoteapp, то помимо запуска самого приложения и работы с ним пользователь может запустить «подключение к удаленному рабочему столу» и войдя на сервер получить доступ к рабочему столу и остальным прелестям gui. С помощью powershell мы разрешим администраторам подключаться и входить в систему, а пользователям оставим только запуск приложений remoteapp.
Что нам для этого понадобится:
Для написания скрипта — PowerGUI Script Editor.
Windows Server 2008 R2 с установленной ролью «Службы удаленных рабочих столов».
Групповые или локальные политики сервера.
Определяем цели:
- При входе на сервер определяем членство в группах.
- Если пользователь входит в группу локальных администраторов сервера — значит пришел по делу, разрешаем вход в систему.
- Если нет — отлогиниваем пользователя.
Пояснение: в этой статье я буду использовать локальные группы сервера, в рабочей среде будет удобнее использовать доменные группы. Например, стандартную доменную группу «Администраторы домена». Так же я исхожу из того, что политика выполнения скриптов 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, что по достоинству оценит каждый системный администратор.
Спасибо за внимание.