Службы удаленного рабочего стола ( RDS ), известные как службы терминалов в Windows Server 2008 и более ранних версиях, [1] являются одним из компонентов Microsoft Windows , которые позволяют пользователю инициировать и контролировать интерактивный сеанс [2] на удаленном компьютере или виртуальной машине через сетевое соединение. RDS был впервые выпущен в 1998 году как сервер терминалов в Windows NT 4.0 Terminal Server Edition , автономном выпуске Windows NT 4.0 Server , который позволял пользователям входить в систему удаленно. Начиная с Windows 2000 , он был интегрирован под названием службы терминалов в качестве дополнительного компонента в серверные выпуски семейства операционных систем Windows NT , [3] получая обновления и улучшения с каждой версией Windows. [4] Затем службы терминалов были переименованы в службы удаленных рабочих столов в Windows Server 2008 R2 [5] в 2009 году.
RDS — это реализация Microsoft архитектуры тонкого клиента , где программное обеспечение Windows и весь рабочий стол компьютера, на котором запущен RDS, становятся доступными для любой удаленной клиентской машины, поддерживающей протокол удаленного рабочего стола (RDP). Пользовательские интерфейсы отображаются с сервера на клиентской системе, а ввод с клиентской системы передается на сервер, где происходит выполнение программного обеспечения. [6] Это отличается от систем потоковой передачи приложений , таких как Microsoft App-V , в которых компьютерные программы передаются клиенту по требованию и выполняются на клиентской машине.
RemoteFX был добавлен в RDS как часть Windows Server 2008 R2 Service Pack 1.
Windows включает четыре клиентских компонента, использующих RDS:
Первые две — это отдельные утилиты, которые позволяют пользователю управлять интерактивным сеансом на удаленном компьютере по сети. В случае удаленного помощника удаленному пользователю необходимо получить приглашение, и управление является совместным. Однако в случае RDC удаленный пользователь открывает новый сеанс на удаленном компьютере и имеет все полномочия, предоставленные правами и ограничениями его учетной записи пользователя. [6] [7] [8] Быстрое переключение пользователей позволяет пользователям переключаться между учетными записями пользователей на локальном компьютере без выхода из программы и выхода из системы. Быстрое переключение пользователей является частью Winlogon и использует RDS для реализации своей функции переключения. [9] [10] Сторонние разработчики также создали клиентское программное обеспечение для RDS. Например, rdesktop поддерживает платформы Unix .
Хотя RDS поставляется с большинством редакций всех версий Windows NT, начиная с Windows 2000, [3] его функциональность отличается в каждой версии. Windows XP Home Edition вообще не принимает никаких подключений RDC, резервируя RDS только для быстрого переключения пользователей и удаленной помощи. Другие клиентские версии Windows позволяют подключаться к системе только одному удаленному пользователю за счет отключения пользователя, вошедшего в консоль. Windows Server позволяет подключаться двум пользователям одновременно. Эта схема лицензирования, называемая «Удаленный рабочий стол для администрирования», облегчает администрирование необслуживаемых или безголовых компьютеров . Только приобретя дополнительные лицензии (в дополнение к лицензии Windows), компьютер под управлением Windows Server может обслуживать нескольких удаленных пользователей одновременно и достигать инфраструктуры виртуальных рабочих столов . [5] [9]
Для организации RDS позволяет ИТ-отделу устанавливать приложения на центральном сервере вместо нескольких компьютеров. [11] Удаленные пользователи могут входить в систему и использовать эти приложения по сети. Такая централизация может упростить обслуживание и устранение неполадок. Системы аутентификации RDS и Windows не позволяют неавторизованным пользователям получать доступ к приложениям или данным.
У Microsoft есть давнее соглашение с Citrix , чтобы облегчить обмен технологиями и патентным лицензированием между Microsoft Terminal Services и Citrix XenApp (ранее Citrix MetaFrame и Citrix Presentation Server ). В этом соглашении Citrix имеет доступ к ключевому исходному коду для платформы Windows, что позволяет разработчикам улучшить безопасность и производительность платформы Terminal Services. В конце декабря 2004 года обе компании объявили о пятилетнем продлении этого соглашения для Windows Vista . [12]
Ключевым серверным компонентом RDS является терминальный сервер ( termdd.sys
), который прослушивает TCP-порт 3389. Когда клиент протокола удаленного рабочего стола (RDP) подключается к этому порту, он помечается уникальным идентификатором сеанса и связывается с только что созданным сеансом консоли (сеанс 0, только клавиатура, мышь и пользовательский интерфейс в символьном режиме). Затем инициируются подсистема входа в систему (winlogon.exe) и графическая подсистема GDI , которые выполняют задачу аутентификации пользователя и представления графического интерфейса. Эти исполняемые файлы загружаются в новом сеансе, а не в консольном сеансе. При создании нового сеанса драйверы графических устройств и устройств клавиатуры/мыши заменяются драйверами, специфичными для RDP: RdpDD.sys
и RdpWD.sys
. Это RdpDD.sys
драйвер устройства, который захватывает вызовы рендеринга пользовательского интерфейса в формат, передаваемый по RDP. RdpWD.sys
действует как драйвер клавиатуры и мыши; он получает ввод с клавиатуры и мыши по TCP-соединению и представляет их как ввод с клавиатуры или мыши. Он также позволяет создавать виртуальные каналы , которые позволяют перенаправлять другие устройства, такие как диск, аудио, принтеры и COM-порты, т. е. каналы действуют как замена для этих устройств. Каналы подключаются к клиенту через TCP-соединение; когда каналы доступны для данных, клиент информируется о запросе, который затем передается через TCP-соединение в приложение. Вся эта процедура выполняется терминальным сервером и клиентом, при этом RDP выступает посредником в правильной передаче, и полностью прозрачна для приложений. [13] RDP-коммуникации шифруются с использованием 128-битного шифрования RC4 . Начиная с Windows Server 2003, он может использовать схему шифрования, совместимую с FIPS 140 , или шифровать коммуникации с использованием стандарта Transport Layer Security . [6] [14]
Как только клиент инициирует соединение и получает информацию об успешном вызове стека терминальных служб на сервере, он загружает устройство, а также драйверы клавиатуры/мыши. Данные пользовательского интерфейса, полученные по RDP, декодируются и отображаются как пользовательский интерфейс, тогда как ввод с клавиатуры и мыши в окно, в котором размещен пользовательский интерфейс, перехватывается драйверами и передается по RDP на сервер. Он также создает другие виртуальные каналы и устанавливает перенаправление. Связь RDP может быть зашифрована; с использованием низкого, среднего или высокого шифрования. При низком шифровании пользовательский ввод (исходящие данные) шифруется с использованием слабого (40-битного RC4) шифра. При среднем шифровании пакеты пользовательского интерфейса (входящие данные) также шифруются с использованием этого слабого шифра. Настройка «Высокое шифрование (не экспорт)» использует 128-битное шифрование RC4, а «Высокое шифрование (экспорт)» использует 40-битное шифрование RC4. [15] При установке уровня безопасности на «SSL (TLS 1.0)» доступна безопасность транспортного уровня до версии 1.2. [16]
Terminal Server — это серверный компонент служб терминалов. Он выполняет работу по аутентификации клиентов, а также делает приложения доступными удаленно. Ему также поручена работа по ограничению клиентов в соответствии с уровнем их доступа. Terminal Server соблюдает настроенные политики ограничения программного обеспечения, чтобы ограничить доступность определенного программного обеспечения только определенной группе пользователей. Информация об удаленном сеансе хранится в специализированных каталогах, называемых Session Directory , которые хранятся на сервере. Каталоги сеансов используются для хранения информации о состоянии сеанса и могут использоваться для возобновления прерванных сеансов. Терминальный сервер также должен управлять этими каталогами. Терминальные серверы также могут использоваться в кластере . [6]
В Windows Server 2008 он был значительно переработан. При входе в систему, если пользователь вошел в локальную систему с помощью учетной записи домена Windows Server , учетные данные из того же входа могут использоваться для аутентификации удаленного сеанса. Однако для этого требуется, чтобы Windows Server 2008 была ОС сервера терминалов, в то время как клиентская ОС ограничена Windows Server 2008, Windows Vista и Windows 7. Кроме того, сервер терминалов может быть настроен на разрешение подключения к отдельным программам, а не ко всему рабочему столу, с помощью функции RemoteApp. Веб-доступ к службам терминалов (TS Web Access) делает сеанс RemoteApp вызываемым из веб-браузера . Он включает элемент управления веб-частью TS Web Access, который поддерживает список развернутых на сервере удаленных приложений RemoteApp и поддерживает его в актуальном состоянии. Сервер терминалов также может интегрироваться с диспетчером системных ресурсов Windows для регулирования использования ресурсов удаленными приложениями. [4]
Terminal Server управляется оснасткой Terminal Server Manager Microsoft Management Console . Его можно использовать для настройки требований входа, а также для принудительного использования одного экземпляра удаленного сеанса. Его также можно настроить с помощью групповой политики или инструментария управления Windows . Однако он недоступен в клиентских версиях ОС Windows, где сервер предварительно настроен на разрешение только одного сеанса и принудительное использование прав учетной записи пользователя в удаленном сеансе без какой-либо настройки. [6]
Компонент службы Remote Desktop Gateway , также известный как RD Gateway , может туннелировать сеанс RDP с использованием канала HTTPS . [17] Это повышает безопасность RDS за счет инкапсуляции сеанса с помощью Transport Layer Security (TLS). [18] Это также позволяет использовать Internet Explorer в качестве клиента RDP. Официальный клиент MS RDP для macOS поддерживает RD Gateway, начиная с версии 8. Он также доступен для iOS и Android.
Эта функция была представлена в продуктах Windows Server 2008 и Windows Home Server .
В октябре 2021 года компания Thincast, основной участник проекта FreeRDP, опубликовала первое решение Remote Desktop Gateway, работающее на Linux. [19]
RemoteApp (или TS RemoteApp ) — это специальный режим RDS, доступный в Windows Server 2008 R2 и более поздних версиях, в котором конфигурация удаленного сеанса интегрирована в клиентскую операционную систему. Клиент RDP 6.1 поставляется с Windows XP SP3, KB952155 для пользователей Windows XP SP2, [21] Windows Vista SP1 и Windows Server 2008. Пользовательский интерфейс для RemoteApp отображается в окне поверх локального рабочего стола и управляется так же, как и любое другое окно для локальных приложений. Конечным результатом этого является то, что удаленные приложения ведут себя во многом как локальные приложения. Задача установления удаленного сеанса, а также перенаправления локальных ресурсов в удаленное приложение прозрачна для конечного пользователя. [22] Несколько приложений могут быть запущены в одном сеансе RemoteApp, каждое со своими собственными окнами. [23]
RemoteApp может быть упакован как .rdp
файл или распространяться через пакет .msi
установщика Windows . При упаковке в виде .rdp
файла (который содержит адрес сервера RemoteApp, схемы аутентификации, которые будут использоваться, и другие параметры) RemoteApp может быть запущен двойным щелчком по файлу. Он вызовет клиент Remote Desktop Connection, который подключится к серверу и отобразит пользовательский интерфейс. RemoteApp также может быть упакован в базу данных установщика Windows , установка которой может зарегистрировать RemoteApp в меню «Пуск», а также создать ярлыки для его запуска. RemoteApp также может быть зарегистрирован как обработчик для типов файлов или URI. Открытие файла, зарегистрированного с помощью RemoteApp, сначала вызовет Remote Desktop Connection, который подключится к терминальному серверу, а затем откроет файл. Любое приложение, к которому можно получить доступ через удаленный рабочий стол, может обслуживаться как RemoteApp. [22]
Windows 7 включает встроенную поддержку публикации RemoteApp, но ее необходимо включить вручную в реестре, поскольку в клиентских версиях Microsoft Windows отсутствует консоль управления RemoteApp. [24]
В Windows Vista и более поздних версиях Terminal Services также включает возможность совместного использования рабочего стола несколькими участниками, известную как Windows Desktop Sharing . В отличие от Terminal Services, которая создает новый сеанс пользователя для каждого подключения RDP, Windows Desktop Sharing может размещать удаленный сеанс в контексте текущего вошедшего в систему пользователя без создания нового сеанса и делать рабочий стол или его подмножество доступным через RDP. [25] Windows Desktop Sharing может использоваться для совместного использования всего рабочего стола, определенной области или определенного приложения. [26] Windows Desktop Sharing также может использоваться для совместного использования рабочих столов с несколькими мониторами. При совместном использовании приложений по отдельности (а не всего рабочего стола) окна управляются (независимо от того, свернуты они или развернуты) независимо на стороне сервера и клиента. [26]
Функциональность предоставляется только через общедоступный API , который может использоваться любым приложением для предоставления функциональности общего доступа к экрану. API общего доступа к рабочему столу Windows предоставляет два объекта: RDPSession
для сеанса общего доступа и RDPViewer
для зрителя. Для одного объекта сеанса можно создать несколько объектов зрителя. Зритель может быть либо пассивным зрителем, который может просто смотреть приложение как скринкаст , либо интерактивным зрителем, который может взаимодействовать в реальном времени с удаленным приложением. [25] Объект RDPSession
содержит все общие приложения, представленные в виде Application
объектов, каждое из которых имеет Window
объекты, представляющие их экранные окна. Фильтры для каждого приложения захватывают окна приложения и упаковывают их как Window
объекты. [27] Зритель должен аутентифицировать себя, прежде чем он сможет подключиться к сеансу общего доступа. Это делается путем создания Invitation
с помощью RDPSession
. Он содержит билет аутентификации и пароль. Объект сериализуется и отправляется зрителям, которым необходимо предоставить Invitation
при подключении. [25] [27]
API общего доступа к рабочему столу Windows используется Windows Meeting Space и Windows Remote Assistance для предоставления функциональности общего доступа к приложениям между сетевыми партнерами . [26]
Аутентификация на уровне сети ( NLA ) — это функция RDP-сервера или подключения к удаленному рабочему столу (RDP-клиента), которая требует от подключающегося пользователя пройти аутентификацию перед установлением сеанса с сервером.
Первоначально, если пользователь открывал сеанс RDP (удаленный рабочий стол) на сервере, он загружал экран входа с сервера для пользователя. Это использовало ресурсы на сервере и было потенциальной областью для атак типа «отказ в обслуживании» , а также атак удаленного выполнения кода (см. BlueKeep ). Аутентификация на уровне сети делегирует учетные данные пользователя от клиента через поставщика поддержки безопасности на стороне клиента и предлагает пользователю пройти аутентификацию перед установлением сеанса на сервере.
Проверка подлинности на уровне сети была введена в RDP 6.0 и изначально поддерживалась в Windows Vista . Она использует нового поставщика поддержки безопасности CredSSP, который доступен через SSPI в Windows Vista. С Windows XP Service Pack 3 CredSSP был введен на этой платформе, а включенный клиент RDP 6.1 поддерживает NLA; однако сначала CredSSP необходимо включить в реестре. [28] [29]
Преимущества аутентификации на уровне сети:
Remote Desktop Connection — основной клиент для Remote Desktop Services. RDC представляет интерфейс рабочего стола (или графический интерфейс приложения) удаленной системы, как если бы к нему осуществлялся локальный доступ. [32] Microsoft Remote Desktop был создан в 2012 году корпорацией Microsoft как клиент с сенсорным интерфейсом. Кроме того, существует несколько клиентов, не принадлежащих Microsoft .