VPS на Linux с графическим интерфейсом: запускаем сервер RDP на Ubuntu 18.04

2knk3isbngfokxcnb2ytumgq8hu.jpeg


В предыдущей статье мы разобрали запуск сервера VNC на виртуальной машине любого типа. У этого варианта масса недостатков, основным из которых являются высокие требования к пропускной способности каналов передачи данных. Сегодня мы попробуем подключиться к графическому рабочему столу на Linux по RDP (Remote Desktop Protocol). Система VNC основана на передаче массивов пикселей по протоколу RFB (Remote Framebuffer), а RDP позволяет отправлять более сложные графические примитивы и высокоуровневые команды. Обычно он используется для организации служб удаленных рабочих столов в Windows, но серверы для Linux также доступны.

Оглавление:


Установка графического окружения
Русификация сервера и установка ПО
Установка и настройка сервера RDP
Настройка межсетевого экрана
Подключение к серверу RDP
Менеджер сессий и сеансы пользователей
Переключение раскладок клавиатуры

Установка графического окружения


Мы возьмем виртуальную машину с Ubuntu Server 18.04 LTS с двумя вычислительными ядрами, четырьмя гигабайтами оперативной памяти и жестким диском (HDD) на двадцать гигабайт. Более слабая конфигурация плохо подходит для графического десктопа, хотя это зависит от решаемых задач. Не забывайте использовать промокод Habrahabr10 для получения скидки в 10% при заказе.

wqg2suk0iudga0c5yzdwazdmtuq.png

Установка окружения рабочего стола со всеми зависимостями выполняется следующей командой:

sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils


Как и в предыдущем случае, мы выбрали XFCE из-за относительно невысоких требований к вычислительным ресурсам.

Русификация сервера и установка ПО


Часто виртуальные машины разворачиваются только с английской локализацией. На десктопе может потребоваться русская, настроить которую несложно. Сначала установим переводы для системных программ:

sudo apt-get install language-pack-ru


Настроим локализацию:

sudo update-locale LANG=ru_RU.UTF-8


Того же эффекта можно достичь, отредактировав вручную файл /etc/default/locale.

Для локализации GNOME и KDE в репозитории есть пакеты language-pack-gnome-ru и language-pack-kde-ru — они понадобятся, если вы будете использовать программы из этих сред рабочего стола. В XFCE переводы устанавливаются вместе с приложениями. Дальше можно инсталлировать словари:

# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru

# Тезаурус для LibreOffice
sudo apt-get install mythes-ru

# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dict


Кроме того, инсталляция переводов может потребоваться для некоторых прикладных программ:

# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru

# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru

# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ru


На этом подготовка окружения рабочего стола завершена, осталось настроить сервер RDP.

Установка и настройка сервера RDP


В репозиториях Ubuntu есть распространяемый свободно сервер Xrdp, которым мы и воспользуемся:

sudo apt-get install xrdp


Если все прошло нормально, сервер должен запуститься автоматически:

sudo systemctl status xrdp


woqbbvxihlh5lp8wjxskypeb7qm.png

Сервер Xrdp запускается с правами пользователя xrdp и по умолчанию берет ертификат /etc/ssl/private/ssl-cert-snakeoil.key, который можно заменить собственным. Для доступа на чтение файла нужно добавить пользователя в группу ssl-cert:

sudo adduser xrdp ssl-cert


Настройки по умолчанию можно найти в файле /etc/default/xrdp, а все прочие конфигурационные файлы сервера лежат в каталоге /etc/xrdp. Основные параметры находятся в файле xrdp.ini, который можно не менять. Конфиг хорошо документирован, к тому же в комплекте имеется соответствующие manpages:

man xrdp.ini
man xrdp

Осталось только отредактировать скрипт /etc/xrdp/startwm.sh, который исполняется при инициализации пользовательской сессии. Предварительно сделаем резервную копию скрипта из дистрибутива:

sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.sh


Чтобы запустить окружение рабочего стола XFCE, потребуется сценарий примерно такого содержания:

#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4


Обратите внимание: в скриптах лучше прописывать полный путь к исполняемым файлам — это хорошая привычка. Сделаем скрипт исполняемым и на этом настройку сервера Xrdp можно считать законченной:

sudo chmod 755 /etc/xrdp/startwm.sh


Перезапускаем сервер:

sudo systemctl restart xrdp


Настройка межсетевого экрана


По умолчанию Xrdp слушает TCP-порт 3389 на всех интерфейсах. В зависимости от конфигурации виртуального сервера может потребоваться настройка межсетевого экрана Netfilter. В Linux это обычно делается с помощью утилиты iptables, но в Ubuntu лучше использовать ufw. Если IP-адрес клиента известен, настройка осуществляется следующей командой:

sudo ufw allow from IP_Address to any port 3389


Разрешить соединения с любого IP можно так:

sudo ufw allow 3389


Протокол RDP поддерживает шифрование, но открывать доступ к серверу Xrdp из сетей общего пользования — плохая идея. Если у клиента нет фиксированного IP, для повышения уровня безопасности сервер должен слушать только localhost. Доступ к нему лучше настроить через туннель SSH, который безопасно перенаправит трафик с клиентского компьютера. Аналогичный подход мы использовали в предыдущей статье для сервера VNC.

Подключение к серверу RDP


Для работы с окружением рабочего стола лучше создать отдельного непривилегированного пользователя:

sudo adduser rdpuser


ghip7qryo4x4sc4wlci0c35jdww.png

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

sudo gpasswd -a rdpuser sudo


Подключиться к серверу можно с помощью любого клиента RDP, включая встроенный клиент службы удаленных рабочих столов Windows. Если Xrdp слушает внешний интерфейс, никаких дополнительных телодвижений не понадобится. Достаточно указать в настройках соединения IP-адрес VPS, имя пользователя и пароль. После подключения мы увидим примерно такую картину:

ivnjah2vq3o3wljo7rrykmtrlj8.png

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

ifjlnk7stnabi7pphk-k4hqcu7a.png

Если сервер Xrdp слушает только localhost, на клиентском компьютере трафик придется упаковать в туннель SSH (на VPS должен быть запущен sshd). Под Windows можно использовать графический клиент SSH (например, PuTTY), а в UNIX-системах нужна утилита ssh:

ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ip


После инициализации туннеля клиент RDP будет подключаться уже не к удаленному серверу, а к локальному хосту.

После инициализации туннеля клиент RDP будет подключаться уже не к удаленному серверу, а к локальному хосту.

С мобильными устройствами сложнее: способные поднять туннель клиенты SSH придется покупать, к тому же в iOS и iPadOS фоновая работа сторонних приложений затруднена из-за слишком хорошей оптимизации энергопотребления. На iPhone и iPad поднять туннель в отдельном приложении не получится — потребуется приложение-комбайн, которое само умеет устанавливать соединение RDP через SSH. Такое, например, как Remoter Pro.

Менеджер сессий и сеансы пользователей


Возможность многопользовательской работы реализована непосредственно в сервере Xrdp и не требует дополнительной настройки. После запуска сервиса через systemd один процесс работает в режиме демона, слушает порт 3389 и взаимодействует через localhost с менеджером сессий.

ps aux |grep xrdp


euyfy8q3vy5tq8j0sgx4cnxltxk.png
sudo netstat -ap |grep xrdp


-ogakuzqv2ks0k5mcc6dsljlhvc.png

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

mfwjcksuufpb3-sant7zi7ylmee.png

Автоматический запуск менеджера сессий прописан в файле /etc/default/xrdp, а конфигурация хранится в /etc/xrdp/sesman.ini. По умолчанию выглядит она примерно так:

Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh

[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false

[Sessions]


Здесь можно ничего не менять, стоит только запретить вход с правами root (AllowRootLogin=false). Для каждого авторизовавшегося в системе пользователя запускается отдельный процесс xrdp: если отсоединиться не завершив сеанс, пользовательские процессы по умолчанию продолжат работать. Настройки можно изменить в файле /etc/xrdp/sesman.ini (секция [Sessions]).

Переключение раскладок клавиатуры


С двухсторонним буфером обмена проблем обычно не возникает, а вот с русской раскладкой клавиатуры придется немного пошаманить (русская локаль должна быть уже установлена). Отредактируем клавиатурные настройки сервера Xrdp:

sudo nano /etc/xrdp/xrdp_keyboard.ini


В конец конфигурационного файла нужно добавить следующие строки:

rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru

[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru


Остается сохранить файл и перезапустить Xrdp:

sudo systemctl restart xrdp


Как видите, поднять сервер RDP на линуксовом VPS несложно, а в предыдущей статье мы уже разобрали настройку VNC. Помимо этих технологий, есть еще один интересный вариант: использующая модифицированный протокол NX 3 система X2Go. С ней мы разберемся в следующей публикации.

de0yl-6ppopvisr_a80b4yuhjj8.png

© Habrahabr.ru