In Wir haben den Start eines VNC-Servers auf einer virtuellen Maschine beliebigen Typs behandelt. Diese Variante hat viele Nachteile, der Hauptnachteil sind die hohen Anforderungen an die Bandbreite der Datenübertragungswege. Heute werden wir versuchen, über RDP (Remote Desktop Protocol) eine Verbindung zum grafischen Desktop unter Linux herzustellen. Das VNC-System basiert auf der Übertragung von Pixelarrays über das RFB-Protokoll (Remote Framebuffer), während RDP komplexere grafische Primitivformen und hochrangige Befehle übermitteln kann. Es wird üblicherweise für die Bereitstellung von Remote-Desktop-Diensten in Windows verwendet, aber Server für Linux sind ebenfalls verfügbar.
Inhaltsverzeichnis:
Installation der grafischen Oberfläche
Wir verwenden eine virtuelle Maschine mit Ubuntu Server 18.04 LTS, die über zwei CPU-Kerne, vier Gigabyte Arbeitsspeicher und eine Festplatte (HDD) mit zwanzig Gigabyte verfügt. Eine schwächere Konfiguration eignet sich schlecht für einen grafischen Desktop, obwohl dies von den zu lösenden Aufgaben abhängt. Vergessen Sie nicht, den Promo-Code Habrahabr10 zu verwenden, um einen 10% Rabatt bei Ihrer Bestellung zu erhalten.

Die Installation der Desktop-Umgebung mit allen Abhängigkeiten erfolgt mit folgendem Befehl:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsWie im vorherigen Fall haben wir uns aufgrund der relativ geringen Anforderungen an die Rechenressourcen für XFCE entschieden.
Lokalisierung des Servers und Installation von Software
Oft werden virtuelle Maschinen nur mit der englischen Lokalisierung bereitgestellt. Auf dem Desktop könnte eine russische erforderlich sein, die einfach eingerichtet werden kann. Lassen Sie uns zunächst die Übersetzungen für die Systemprogramme installieren:
sudo apt-get install language-pack-ruLassen Sie uns die Lokalisierung einrichten:
sudo update-locale LANG=ru_RU.UTF-8Der gleiche Effekt kann erzielt werden, indem die Datei /etc/default/locale manuell bearbeitet wird.
Für die Lokalisierung von GNOME und KDE sind im Repository die Pakete language-pack-gnome-de und language-pack-kde-de verfügbar – diese werden benötigt, wenn Sie Anwendungen aus diesen Desktop-Umgebungen verwenden. In XFCE werden die Übersetzungen zusammen mit den Anwendungen installiert. Danach können Sie die Wörterbücher installieren:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictDarüber hinaus kann die Installation von Übersetzungen für einige Anwendungen erforderlich sein:
# Браузер 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-ruDamit ist die Vorbereitung der Desktop-Umgebung abgeschlossen, und es bleibt nur noch, den RDP-Server einzurichten.
Installation und Konfiguration des RDP-Servers
In den Repositorys von Ubuntu gibt es den kostenfrei verfügbaren Server Xrdp, den wir verwenden werden:
sudo apt-get install xrdpWenn alles gut gelaufen ist, sollte der Server automatisch starten:
sudo systemctl status xrdp 
Der Xrdp-Server wird mit den Rechten des Benutzers xrdp gestartet und verwendet standardmäßig das Zertifikat /etc/ssl/private/ssl-cert-snakeoil.key, das durch ein eigenes ersetzt werden kann. Um Leserechte für die Datei zu erhalten, muss der Benutzer zur Gruppe ssl-cert hinzugefügt werden:
sudo adduser xrdp ssl-certDie Standardkonfiguration kann in der Datei /etc/default/xrdp gefunden werden, während alle anderen Konfigurationsdateien des Servers im Verzeichnis /etc/xrdp liegen. Die Hauptparameter befinden sich in der Datei xrdp.ini, die nicht geändert werden muss. Die Konfiguration ist gut dokumentiert, zudem gibt es die entsprechenden manpages im Lieferumfang:
man xrdp.ini
man xrdpEs bleibt nur noch, das Skript /etc/xrdp/startwm.sh zu bearbeiten, das bei der Initialisierung der Benutzersitzung ausgeführt wird. Zuerst erstellen wir ein Backup des Skripts aus der Distribution:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shUm die Desktop-Umgebung XFCE zu starten, wird ein Skript mit einem ähnlichen Inhalt benötigt:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Bitte beachten Sie: In Skripten ist es besser, den vollständigen Pfad zu den ausführbaren Dateien anzugeben – das ist eine gute Gewohnheit. Machen wir das Skript ausführbar, damit gilt die Konfiguration des Xrdp-Servers als abgeschlossen:
sudo chmod 755 /etc/xrdp/startwm.shWir starten den Server neu:
sudo systemctl restart xrdp
Einrichtung der Firewall
Standardmäßig hört Xrdp auf TCP-Port 3389 an allen Schnittstellen. Je nach Konfiguration des virtuellen Servers kann es erforderlich sein, die Netfilter-Firewall einzustellen. In Linux geschieht dies normalerweise mit dem Tool iptables, aber in Ubuntu sollte man besser ufw verwenden. Wenn die IP-Adresse des Clients bekannt ist, erfolgt die Konfiguration mit folgendem Befehl:
sudo ufw allow from IP_Address to any port 3389Um Verbindungen von jeder IP zu erlauben, kann folgender Befehl verwendet werden:
sudo ufw allow 3389Das RDP-Protokoll unterstützt Verschlüsselung, aber den Zugriff auf den Xrdp-Server aus öffentlichen Netzwerken zu ermöglichen, ist keine gute Idee. Wenn der Kunde keine feste IP hat, sollte der Server zur Erhöhung der Sicherheit nur auf localhost hören. Der Zugang sollte besser über ein SSH-Tunnel konfiguriert werden, der den Datenverkehr sicher vom Client-Computer umleitet. Einen ähnlichen Ansatz haben wir für den VNC-Server verwendet.
Verbindung zum RDP-Server
Um mit der Desktop-Umgebung zu arbeiten, ist es besser, einen separaten unprivilegierten Benutzer zu erstellen:
sudo adduser rdpuser 
Wir fügen den Benutzer zur sudo-Gruppe hinzu, damit er administrative Aufgaben erledigen kann. Wenn dies nicht nötig ist, kann dieser Schritt übersprungen werden:
sudo gpasswd -a rdpuser sudoDer Zugriff auf den Server kann mit jedem RDP-Client erfolgen, einschließlich des integrierten Remote Desktop Clients von Windows. Wenn Xrdp auf dem externen Interface lauscht, sind keine weiteren Schritte erforderlich. Es genügt, in den Verbindungseinstellungen die IP-Adresse des VPS, den Benutzernamen und das Passwort anzugeben. Nach der Verbindung sehen wir etwa folgendes Bild:

Nach der Erstkonfiguration der Desktop-Umgebung erhalten wir einen voll funktionsfähigen Desktop. Wie Sie sehen können, benötigt er nicht viel Ressourcen, obwohl alles weitere von den verwendeten Anwendungen abhängt.

Wenn der Xrdp-Server nur auf localhost hört, muss der Datenverkehr auf dem Client-Computer in ein SSH-Tunnel verpackt werden (sshd muss auf dem VPS laufen). Unter Windows kann ein grafischer SSH-Client (zum Beispiel PuTTY) verwendet werden, während in UNIX-Systemen das ssh-Tool erforderlich ist:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipNach der Initialisierung des Tunnels wird sich der RDP-Client nicht mehr mit dem Remote-Server, sondern mit dem lokalen Host verbinden.
Mit mobilen Geräten ist es komplizierter: Clients, die in der Lage sind, Tunnel aufzubauen, müssen gekauft werden, außerdem ist die Hintergrundarbeit von Drittanbieteranwendungen in iOS und iPadOS aufgrund der hervorragenden Energieoptimierung erschwert. Auf iPhone und iPad lässt sich ein Tunnel nicht in einer separaten Anwendung erstellen – es wird eine All-in-One-App benötigt, die selbst das RDP über SSH verbinden kann. Ein Beispiel dafür ist: .
Sitzungsmanager und Benutzersitzungen
Die Möglichkeit zur Mehrbenutzerarbeit ist direkt im Xrdp-Server implementiert und erfordert keine zusätzliche Konfiguration. Nach dem Start des Dienstes über systemd arbeitet ein Prozess im Demomodus, hört auf Port 3389 und interagiert über localhost mit dem Sitzungsmanager.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Der Sitzung-Manager ist für die Benutzer in der Regel nicht sichtbar, da die im Kundeneinstellungen festgelegten Anmeldedaten automatisch übermittelt werden. Wenn dies nicht geschieht oder ein Fehler bei der Authentifizierung auftritt, erscheint anstelle des Desktops ein interaktives Anmeldefenster.

Der automatische Start des Sitzung-Managers ist in der Datei /etc/default/xrdp festgelegt, während die Konfiguration in /etc/xrdp/sesman.ini gespeichert ist. Standardmäßig sieht sie etwa so aus:
[Globals]
ListenAdresse=127.0.0.1
ListenPort=3350
BenutzerFensterManager=true
BenutzerFensterManager=startwm.sh
StandardFensterManager=startwm.sh
[Sicherheit]
RootLoginErlauben=true
MaxLoginVersuche=4
TerminalServerBenutzer=tsusers
TerminalServerAdministratoren=tsadmins
; Wenn AlwaysGroupCheck=false ist, wird der Zugang erlaubt
; falls die Gruppe TerminalServerBenutzer nicht definiert ist.
AlwaysGroupCheck=false
[Sitzungen]Hier muss nichts geändert werden, außer dass der Root-Zugang verboten wird (AllowRootLogin=false). Für jeden authentifizierten Benutzer im System wird ein separater xrdp-Prozess gestartet: Wenn man die Sitzung ohne Beendigung trennt, bleiben die Benutzerprozesse standardmäßig aktiv, und man kann sich erneut mit der Sitzung verbinden. Die Einstellungen können in der Datei /etc/xrdp/sesman.ini (Abschnitt [Sessions]) geändert werden.
Wechseln der Tastaturlayouts
Mit einem bidirektionalen Clipboard treten normalerweise keine Probleme auf, aber bei der russischen Tastaturbelegung muss man etwas nachhelfen (das russische Gebietsschema sollte bereits ). Lassen Sie uns die Tastatureinstellungen des Xrdp-Servers bearbeiten:
sudo nano /etc/xrdp/xrdp_keyboard.iniAm Ende der Konfigurationsdatei müssen die folgenden Zeilen hinzugefügt werden:
[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,ruJetzt bleibt es nur noch, die Datei zu speichern und Xrdp neu zu starten:
sudo systemctl restart xrdpWie Sie sehen, ist es nicht schwer, einen RDP-Server auf einem Linux-VPS einzurichten. In haben wir bereits die VNC-Konfiguration behandelt. Neben diesen Technologien gibt es noch eine interessante Option: das X2Go-System, das ein modifiziertes NX 3 Protokoll verwendet. Damit werden wir uns in der nächsten Veröffentlichung befassen.
Quelle: habr.com
