Pull to refresh

Терминальный сервер windows 2008 — как разрешить пользователю запуск remoteapp и запретить интерактивный вход в систему

Здравствуйте, уважаемые хабражители!
В этой небольшой статье я расскажу вам свой рецепт решения проблемы с интерактивным входом пользователей на сервер 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, что по достоинству оценит каждый системный администратор.
Спасибо за внимание.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.