среда, 10 февраля 2010 г.

TS RemoteApp

Введение

Достаточно часто работа пользователя на терминальном сервере ограничивается запуском одного или нескольких приложений и не требует полноэкранной сессии. Технология Terminal Services RemoteApp (удаленные приложения) упрощает работу по такому сценарию. Удаленные приложения могут распространяться с помощью msi-пакетов и интегрироваться с локальной операционной системой. В частности, ярлыки этих приложений будут находиться в меню "Пуск" или на рабочем столе локального компьютера, а также использоваться при открытии ассоциированных с ними типов файлов.

Системные требования

Для использования технологии RemoteApp, клиент удаленного рабочего стола должен быть версии 6.0 или выше. В данный момент доступен клиент версии 7.0 для операционных систем: Windows XP, Windows Vista, Windows 2003/2008 Server. Установить его можно при помощи системы обновлений. В Windows 7 и Windows 2008 R2 он используется по умолчанию.

Принцип работы

В связи с необходимостью более полной интеграции с локальной системой, принцип работы удаленных приложений отличается от работы в полноэкранной сессии. Рассмотрим это более подробно (рис. 1). Информация позаимствована из Windows Server 2008 Terminal Services Resource Kit.

StartRemoteApp

Рис. 1. Схема запуска удаленного приложения

  1. Пользователь запускает клиент удаленного рабочего стола mstsc.exe и соединяется с сервером.
  2. Создается терминальная сессия. Открывается процесс Userinit.exe. Он стартует Rdpinit.exe, управляющий Rdpshell.exe. Rdpshell.exe - это оболочка, используемая при работе в удаленных приложениях вместо Windows Explorer (explorer.exe).
  3. Между клиентской и серверной составляющей устанавливается виртуальный канал. Он используется для передачи данных между сервером и клиентом.
  4. Rdpinit.exe проверяет список разрешенных для запуска приложений. Если приложение разрешено, терминальный сервер запускает его.
  5. Создается окно приложения.
  6. Rdpshell.exe взаимодействует с окном приложения и передает данные терминальному клиенту.
  7. Терминальный клиент создает окно, которое полностью идентично невидимому окну приложения на терминальном сервере. С этого момента пользователь может работать с приложением в обычном режиме.

За корректное отображение удаленных приложений отвечают следующие серверные компоненты:

  • Rdpinit.exe,
  • Rdpshell.exe,
  • Rdpdll.dll.

Rdpinit.exe - это аналог Userinit.exe. С его помощью запускаются логон-скрипты и создается оболочка пользователя. Rdpinit.exe отвечает за запуск Rdpshell.exe и обновление значков в панели уведомлений на стороне клиента через Rdpdd.dll. Кроме того, Rdpinit.exe управляет процессом завершения сеанса.

Rdpshell.exe на сервере отслеживает изменения, происходящие в окне приложения (например, открытие или закрытие) и передает их клиенту. Также, Rdpshell.exe обнаруживает соединение\отключение\переподключение терминальной сессии и соответственно закрывает или открывает окно приложения на стороне клиента.

Rdpdd.dll получает от Rdpinit.exe и Rdpshell.exe значки из панели уведомлений и обновляет их отображение на клиенте. Кроме того, Rdpdd.dll отслеживает изменения на стороне клиента и передает их приложению, запущенному на сервере.

Со стороны клиента, ключевой технологией при работе с удаленными приложениями является RemoteApps Integrated Locally (RAIL). Это расширение RDP-протокола, позволяющее более полную интеграцию с рабочим столом пользователя.

RAIL-клиент запускается на локальном компьютере пользователя и создает окно или значок оповещения для соответствующих им элементов приложения выполняемого на RAIL-сервере. Созданные окна\оповещения точно повторяют поведение окон\оповещений на терминальном сервере. Когда пользователь вводит какие-либо данные в Rail-окна\оповещения это захватывается RAIL-клиентом и передается на сервер. Аналогично данные передаются и в обратную сторону: все изменения отображения захватываются сервером и перенаправляются клиенту.

Более подробно взаимодействие между отдельными компонентами терминальных служб рассмотрено в статье WS2008: Terminal Services RemoteApps.

Установка и настройка
Пошаговую инструкцию по установке и настройке RemoteApp можно найти на сайте Microsoft Technet.

Здесь же остановимся на некоторых ключевых деталях настройки удаленных приложений.

При настройке удаленных приложений в консоли TS RemoteApp Manager можно выбрать разрешен или запрещен запуск неопубликованных приложений (рис. 2).

remoteapp1

Рис. 2. Параметры настройки развертывания удаленных приложений

Рассмотрим действие этой настройки на следующем примере.

На терминальном сервере опубликован исключительно Microsoft Word и пользователь при работе в нем открывает гиперссылку, содержащуюся в документе. В зависимости от указанной настройки, он сможет или нет запустить Internet Explorer в той же терминальной сессии.

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

В целях безопасности, рекомендуется подписывать rdp-файлы удаленных приложений с помощью сертификатов. Это позволит клиентам при подключении проверить терминальный сервер и защититься от потенциальных атак. Дополнительным преимуществом является отсутствие предупреждения безопасности при подключении с помощью подписанного rdp-файла.

При запуске удаленного приложения, вместо значка самого приложения отображается значок клиента удаленного рабочего стола. Для предоставления пользователю более полной информации о запускаемых приложений можно воспользоваться статьей How to make RemoteApp show the application icon when starting.

При установке службы удаленных приложений на странице "Метод проверки подлинности" следует указать, каким образом будет проверяться клиент перед подключением. Если все клиенты используют операционные системы, поддерживающие протокол CredSSP (например, Windows 7 или Windows Vista), рекомендуется установить требование проверки на уровне сети. В противном случае рекомендуется выбрать параметр "Не требовать проверку подлинности на уровне сети".

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

Удаленные приложения можно совмещать с технологией прозрачной авторизации Single Sign-On. В этом случае пользователю не нужно будет вводить пароль при первом запуске приложения.

Для простоты распространения удаленных приложений можно использовать TS WebAccess. Это позволяет публиковать подготовленные rdp-файлы на корпоративном веб-сайте.

Если пользователь с административными правами запускает удаленное приложение, то в его сессии вместе с приложением могут появиться Диспетчер Сервера и окно первоначальной настройки. Запретить это можно с помощью групповых политик

Do not display Initial Configuration Tasks window automatically at logon,

Do not display Server Manager automatically at logon,

находящихся в разделе Computer Configuration\Administrative Templates\System\Server Manager.

В русской версии операционной системы данные политики (рис. 3) называются

  • Не отображать окно "Задачи начальной настройки" автоматически при входе,
  • Не отображать диспетчер сервера автоматически при входе.

remoteapp2

Рис. 3. Групповые политики, отвечающие за отображение Диспетчера Сервера и окна первоначальной настройки

Особенности использования

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

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

TerminateRemoteApp

Рис. 4. Алгоритм отключения сессии

Сессия удаленного приложения остается активной до тех пока существует хотя бы одно видимое или активное окно в этой сессии. Активное окно может быть в любом состоянии (развернутое, свернутое, восстановленное). Кроме того, удаленное приложение, которому принадлежит окно, может быть запущено как непосредственно пользователем, так и в результате работы с уже запущенным приложением. Рассмотрим это на следующем примере.

Пользователь запускает удаленный Microsoft Outlook и открывает из него документ Microsoft Word, находившийся во вложении. Microsoft Word запускается в той же терминальной сессии отдельным удаленным приложением. Сессия будет оставаться активной до тех пор пока не закроются как Microsoft Outlook, так и Microsoft Word.

Кроме того, сессия остается активной до тех пор пока, в панели уведомлений находится как минимум один значок удаленного приложения запущенного пользователем. Рассмотрим это на следующих примерах.

Пользователь запускает удаленный Microsoft Office Communicator. После открытия приложения в панели уведомлений появляется значок приложения. Он остается там даже если закрыть главное окно приложения. Соответственно, сессия также будет оставаться активной.

Однако, это справедливо не для всех случаев. Если пользователь открывает удаленный Microsoft Outlook вместе с ним может запуститься клиент антивируса, создающий свой значок в панели уведомления. Если закрыть окно Microsoft Outlook, значок антивируса будет игнорироваться при решении об отключении сессии, т.к. это приложение не было запущено пользователем.

В случае если выявлено, что в сессии нет запущенных удаленных приложений, следует 20-ти секундная пауза. В течении её пользователь может запустить другое удаленное приложение на том же самом сервере. Если приложений не запущенно в течении этого периода, сессия будет отключена.

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

Сделать это можно с помощью политики «Set time limit for logoff of RemoteApp sessions», находящейся в разделе

Computer Configuration\Administrative Templates\Windows Components\Terminal Services\Terminal Server\Session Time Limits

В русскоязычных версиях операционной системы данная политика называется «Задать предел времени для выхода из сеансов RemoteApp» (рис. 5).

gp_ra

Рис. 5. Настройка ограничения по времени терминальных сессий

В том же разделе можно задать ограничение по времени для отключенных полноэкранных сеансов. Рекомендуется устанавливать его больше чем для RemoteApp, т.к. в противном случае возможен конфликт политик.

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

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

  1. Создать организационную единицу в оснастке Active Directory Users and Computers
  2. Переместить туда терминальный сервер
  3. Создать объект групповой политики и связать его с созданной ранее организационной единицей
  4. Создать группу безопасности. Включить в неё терминальный сервер и пользователей, которым запрещен доступ к полноэкранному рабочему столу
  5. В фильтрах безопасности объекта групповой политики удалить группу Authenticated users и добавить созданную ранее группу.
  6. В групповой политике установить следующие настройки:
  7. Computer Configuration\Policies\Administrative Templates\System\Group Policy\User Group Policy loopback processing mode - Enabled , mode - Merge
  8. User Configuration\Policies\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection - %systemroot%\system32\logoff.exe
  9. Обновить групповые политики командой: gpupdate /force

В результате, полноэкранные сеансы пользователей удаленных приложений будут завершаться сразу же после установки соединения.

Дополнительные ресурсы

4 комментария:

  1. Спасибо. Статья помогла во многом разобраться.

    ОтветитьУдалить
  2. Благодарю за данную статью!В ней нашёл для себя очень много полезной и нужной для меня информации по RDP и RemoteApp

    ОтветитьУдалить