VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
В Poprzedni artykuł Omówiliśmy uruchamianie serwera VNC na dowolnym typie maszyny wirtualnej. Opcja ta ma wiele wad, z których główną są wysokie wymagania dotyczące przepustowości kanałów transmisji danych. Dzisiaj spróbujemy połączyć się z graficznym pulpitem w systemie Linux za pomocą protokołu RDP (Remote Desktop Protocol). System VNC opiera się na transmisji tablic pikseli za pomocą protokołu RFB (Remote Framebuffer), natomiast RDP pozwala na przesyłanie bardziej złożonych prymitywów graficznych i poleceń wysokiego poziomu. Zazwyczaj jest używany do hostowania usług pulpitu zdalnego w systemie Windows, ale dostępne są również serwery dla systemu Linux.

Spis treści:

Instalacja środowiska graficznego
Rusyfikacja serwera i instalacja oprogramowania
Instalowanie i konfigurowanie serwera RDP
Konfigurowanie zapory sieciowej
Łączenie z serwerem RDP
Menedżer sesji i sesje użytkowników
Zmiana układu klawiatury

Instalacja środowiska graficznego

Użyjemy maszyny wirtualnej z Ubuntu Server 18.04 LTS z dwoma rdzeniami obliczeniowymi, czterema gigabajtami pamięci RAM i dwudziestogigabajtowym dyskiem twardym (HDD). Słabsza konfiguracja nie nadaje się dobrze do pulpitu graficznego, choć zależy to od rozwiązywanych zadań. Nie zapomnij użyć kodu promocyjnego Habrahabr10 aby uzyskać 10% zniżki na swoje zamówienie.

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Instalację środowiska graficznego ze wszystkimi zależnościami wykonuje się za pomocą następującego polecenia:

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

Podobnie jak w poprzednim przypadku wybraliśmy środowisko XFCE ze względu na jego stosunkowo niskie wymagania obliczeniowe.

Rusyfikacja serwera i instalacja oprogramowania

Często maszyny wirtualne są wdrażane wyłącznie z lokalizacją w języku angielskim. Na pulpicie może być potrzebny język rosyjski, który jest łatwy do skonfigurowania. Najpierw zainstalujmy tłumaczenia programów systemowych:

sudo apt-get install language-pack-ru

Skonfigurujmy lokalizację:

sudo update-locale LANG=ru_RU.UTF-8

Ten sam efekt można osiągnąć ręcznie edytując plik /etc/default/locale.

Do lokalizacji GNOME i KDE w repozytorium znajdują się pakiety językowe-gnome-ru i język-pack-kde-ru - będziesz ich potrzebować, jeśli używasz programów z tych środowisk graficznych. W XFCE tłumaczenia są instalowane wraz z aplikacjami. Następnie możesz zainstalować słowniki:

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

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

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

Ponadto w przypadku niektórych aplikacji może być wymagana instalacja tłumaczeń:

# Браузер 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

Tym samym przygotowywanie środowiska graficznego zostaje zakończone. Pozostaje tylko skonfigurować serwer RDP.

Instalowanie i konfigurowanie serwera RDP

W repozytoriach Ubuntu dostępny jest bezpłatnie serwer Xrdp, z którego będziemy korzystać:

sudo apt-get install xrdp

Jeżeli wszystko poszło dobrze, serwer powinien uruchomić się automatycznie:

sudo systemctl status xrdp

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Serwer Xrdp działa z uprawnieniami użytkownika xrdp i domyślnie przyjmuje certyfikat /etc/ssl/private/ssl-cert-snakeoil.key, który można zastąpić własnym. Aby uzyskać dostęp do pliku i go odczytać, należy dodać użytkownika do grupy ssl-cert:

sudo adduser xrdp ssl-cert

Domyślne ustawienia można znaleźć w pliku /etc/default/xrdp, natomiast wszystkie pozostałe pliki konfiguracyjne serwera znajdują się w katalogu /etc/xrdp. Główne parametry znajdują się w pliku xrdp.ini i nie ma potrzeby ich zmiany. Konfiguracja jest dobrze udokumentowana, a pakiet zawiera także odpowiednie strony podręcznika:

man xrdp.ini
man xrdp

Pozostaje jedynie edytować skrypt /etc/xrdp/startwm.sh, który jest wykonywany po zainicjowaniu sesji użytkownika. Najpierw zróbmy kopię zapasową skryptu z dystrybucji:

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

Aby uruchomić środowisko graficzne XFCE, będziesz potrzebować skryptu wyglądającego mniej więcej tak:

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

Uwaga: lepiej jest zapisywać w skryptach pełną ścieżkę do plików wykonywalnych - to dobry nawyk. Uczyńmy skrypt wykonywalnym i tak zakończymy konfigurację serwera Xrdp:

sudo chmod 755 /etc/xrdp/startwm.sh

Uruchom ponownie serwer:

sudo systemctl restart xrdp

Konfigurowanie zapory sieciowej

Domyślnie Xrdp nasłuchuje na porcie TCP 3389 na wszystkich interfejsach. W zależności od konfiguracji serwera wirtualnego może być konieczne skonfigurowanie zapory Netfilter. W systemie Linux zazwyczaj robi się to za pomocą narzędzia iptables, ale w Ubuntu lepiej jest użyć ufw. Jeżeli adres IP klienta jest znany, konfiguracja jest przeprowadzana za pomocą następującego polecenia:

sudo ufw allow from IP_Address to any port 3389

Możesz zezwolić na połączenia z dowolnego adresu IP w następujący sposób:

sudo ufw allow 3389

Protokół RDP obsługuje szyfrowanie, ale otwieranie dostępu do serwera Xrdp z sieci publicznych nie jest dobrym pomysłem. Jeśli klient nie ma stałego adresu IP, serwer powinien nasłuchiwać tylko na komputerze lokalnym, aby zwiększyć bezpieczeństwo. Lepiej skonfigurować dostęp do niego poprzez tunel SSH, który będzie bezpiecznie przekierowywał ruch z komputera klienckiego. Podejmujemy podobne podejście użyto w poprzednim artykule dla serwera VNC.

Łączenie z serwerem RDP

Aby pracować w środowisku pulpitu, lepiej jest utworzyć osobnego użytkownika bez uprawnień:

sudo adduser rdpuser

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Dodajmy użytkownika do grupy sudo, aby mógł wykonywać zadania administracyjne. Jeśli nie ma takiej potrzeby, możesz pominąć ten krok:

sudo gpasswd -a rdpuser sudo

Z serwerem można połączyć się przy użyciu dowolnego klienta RDP, w tym wbudowanego klienta usług pulpitu zdalnego systemu Windows. Jeśli Xrdp nasłuchuje na interfejsie zewnętrznym, nie są wymagane żadne dodatkowe kroki. Wystarczy w ustawieniach połączenia podać adres IP VPS, nazwę użytkownika i hasło. Po połączeniu zobaczymy coś takiego:

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Po wstępnej konfiguracji środowiska graficznego otrzymamy pełnoprawny pulpit. Jak widać, nie zużywa to wielu zasobów, choć w dalszej części wszystko będzie zależało od używanych aplikacji.

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Jeśli serwer Xrdp nasłuchuje tylko na komputerze lokalnym, ruch będzie musiał zostać spakowany do tunelu SSH na komputerze klienta (sshd musi działać na serwerze VPS). W systemie Windows możesz użyć graficznego klienta SSH (na przykład PuTTY), a w systemach UNIX potrzebne jest narzędzie ssh:

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

Po zainicjowaniu tunelu klient RDP nie będzie już łączył się ze zdalnym serwerem, lecz z lokalnym hostem.

W przypadku urządzeń mobilnych sytuacja jest bardziej skomplikowana: trzeba kupić klienta SSH umożliwiającego skonfigurowanie tunelu, a w systemach iOS i iPadOS praca w tle aplikacji innych firm jest utrudniona ze względu na zbyt dobrą optymalizację zużycia energii. Na iPhonie i iPadzie nie będziesz w stanie skonfigurować tunelu w osobnej aplikacji – będziesz potrzebować aplikacji Combine, która sama może nawiązać połączenie RDP przez SSH. Na przykład, Zdalny Pro.

Menedżer sesji i sesje użytkowników

Możliwość pracy z wieloma użytkownikami jest realizowana bezpośrednio na serwerze Xrdp i nie wymaga dodatkowej konfiguracji. Po uruchomieniu usługi za pośrednictwem systemd, jeden proces działa w trybie demona, nasłuchuje na porcie 3389 i komunikuje się za pośrednictwem localhost z menedżerem sesji.

ps aux |grep xrdp

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04

sudo netstat -ap |grep xrdp

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Menedżer sesji zazwyczaj nie jest widoczny dla użytkowników, ponieważ nazwa użytkownika i hasło określone w ustawieniach klienta są do niego automatycznie przenoszone. Jeżeli tak się nie stanie lub wystąpi błąd uwierzytelniania, zamiast pulpitu pojawi się interaktywne okno logowania.

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04
Automatyczne uruchamianie menedżera sesji jest określone w pliku /etc/default/xrdp, a konfiguracja jest zapisana w /etc/xrdp/sesman.ini. Domyślnie wygląda to mniej więcej tak:

[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]

Nie musisz tutaj niczego zmieniać, musisz jedynie zabronić logowania z uprawnieniami roota (AllowRootLogin=false). Dla każdego użytkownika zalogowanego do systemu uruchamiany jest osobny proces xrdp: jeśli rozłączysz się bez kończenia sesji, procesy użytkownika będą nadal działać domyślnie, a Ty będziesz mógł ponownie nawiązać połączenie z sesją. Ustawienia można zmienić w pliku /etc/xrdp/sesman.ini (sekcja [Sessions]).

Zmiana układu klawiatury

Zwykle nie ma problemów z dwukierunkowym schowkiem, ale w przypadku rosyjskiego układu klawiatury trzeba będzie trochę pomajstrować (ustawienia regionalne rosyjskie powinny być już zainstalowany). Edytujmy ustawienia klawiatury serwera Xrdp:

sudo nano /etc/xrdp/xrdp_keyboard.ini

Na końcu pliku konfiguracyjnego należy dodać następujące wiersze:

[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

Pozostaje tylko zapisać plik i ponownie uruchomić Xrdp:

sudo systemctl restart xrdp

Jak widać, skonfigurowanie serwera RDP na VPS z systemem Linux nie jest trudne i w Poprzedni artykuł Omówiliśmy już konfigurację VNC. Oprócz tych technologii istnieje jeszcze jedna ciekawa opcja: system X3Go, który wykorzystuje zmodyfikowany protokół NX 2. Zajmiemy się tym w następnej publikacji.

VPS na Linuksie z interfejsem graficznym: uruchomienie serwera RDP na Ubuntu 18.04

Źródło: www.habr.com