Im haben wir den Start eines VNC-Servers auf einer virtuellen Maschine beliebigen Typs besprochen. Diese Variante hat zahlreiche Nachteile, von denen der wichtigste die hohen Anforderungen an die Bandbreite der Datenübertragung ist. Heute versuchen wir, ü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 die Übertragung komplexerer grafischer Primitiven und hochrangiger Befehle ermöglicht. Normalerweise wird es zur Bereitstellung von Remote-Desktop-Diensten unter Windows verwendet, aber Server für Linux sind ebenfalls verfügbar.
Inhaltsverzeichnis:
Installation der grafischen Umgebung
Wir nehmen eine virtuelle Maschine mit Ubuntu Server 18.04 LTS, zwei CPU-Kernen, vier Gigabyte RAM und einer Festplatte (HDD) mit zwanzig Gigabyte. 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 Rabattcode Habrahabr10 für einen 10% Rabatt bei der Bestellung zu verwenden.

Die Installation der Desktop-Umgebung mit allen Abhängigkeiten erfolgt mit dem folgenden Befehl:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsWie im vorherigen Fall haben wir uns für XFCE entschieden, da die Anforderungen an die Computerressourcen relativ gering sind.
Lokalisierung des Servers und Installation von Software
Oft werden virtuelle Maschinen nur mit englischer Lokalisierung bereitgestellt. Auf dem Desktop kann Russische benötigt werden, was einfach einzurichten ist. Zuerst installieren wir die Übersetzungen für Systemprogramme:
sudo apt-get install language-pack-ruLegen wir die Lokalisierung fest:
sudo update-locale LANG=ru_RU.UTF-8Den gleichen Effekt kann man erzielen, indem man die Datei /etc/default/locale manuell bearbeitet.
Für die Lokalisierung von GNOME und KDE gibt es im Repository die Pakete language-pack-gnome-ru und language-pack-kde-ru – diese werden benötigt, wenn Sie Programme aus diesen Desktop-Umgebungen verwenden. Unter XFCE werden die Übersetzungen zusammen mit den Anwendungen installiert. Danach können Wörterbücher installiert werden:
# Словари для проверки орфографии
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 Anwendungsprogramme 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-ruDie Vorbereitung der Desktop-Umgebung ist abgeschlossen, es bleibt nur noch, den RDP-Server einzurichten.
Installation und Konfiguration des RDP-Servers
In den Ubuntu-Repositories gibt es den frei verfügbaren Xrdp-Server, den wir verwenden werden:
sudo apt-get install xrdpWenn alles normal verlaufen 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, welches durch ein eigenes ersetzt werden kann. Um Lesezugriff auf die Datei zu erhalten, muss der Benutzer zur Gruppe ssl-cert hinzugefügt werden:
sudo adduser xrdp ssl-certDie Standardeinstellungen befinden sich in der Datei /etc/default/xrdp, alle anderen Konfigurationsdateien des Servers liegen im Verzeichnis /etc/xrdp. Die Hauptparameter sind in der Datei xrdp.ini zu finden, die nicht verändert werden muss. Die Konfiguration ist gut dokumentiert, außerdem sind die entsprechenden Manpages enthalten:
man xrdp.ini
man xrdpJetzt bleibt nur noch, das Skript /etc/xrdp/startwm.sh zu bearbeiten, das bei der Initialisierung der Benutzersitzung ausgeführt wird. Zuerst erstellen wir eine Sicherungskopie 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, ist ein Skript mit etwa folgendem Inhalt erforderlich:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Bitte beachten: 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, und damit kann die Einrichtung des Xrdp-Servers als abgeschlossen betrachtet werden:
sudo chmod 755 /etc/xrdp/startwm.shWir starten den Server neu:
sudo systemctl restart xrdp
Einstellungen der Firewall
Standardmäßig hört Xrdp auf TCP-Port 3389 auf allen Schnittstellen. Je nach Konfiguration des virtuellen Servers könnte eine Anpassung der Netfilter-Firewall erforderlich sein. In Linux geschieht dies normalerweise mit dem Tool iptables, in Ubuntu ist jedoch die Verwendung von ufw empfehlenswert. Wenn die IP-Adresse des Clients bekannt ist, erfolgt die Anpassung mit folgendem Befehl:
sudo ufw allow from IP_Address to any port 3389Verbindungen von jeder IP können so zugelassen werden:
sudo ufw allow 3389Das RDP-Protokoll unterstützt Verschlüsselung, jedoch ist es eine schlechte Idee, den Zugriff auf den Xrdp-Server aus öffentlichen Netzwerken zu gewähren. Wenn der Client keine feste IP hat, sollte der Server zur Erhöhung der Sicherheit nur auf localhost hören. Der Zugriff sollte besser über einen SSH-Tunnel eingerichtet werden, der den Datenverkehr vom Client-Computer sicher umleitet. Einen ähnlichen Ansatz haben wir für den VNC-Server.
Verbindung zum RDP-Server
Um mit der Desktop-Umgebung zu arbeiten, ist es besser, einen separaten unprivilegierten Benutzer zu erstellen:
sudo adduser rdpuser 
Fügen wir den Benutzer zur sudo-Gruppe hinzu, damit er administrativen Aufgaben nachkommen kann. Wenn dies nicht nötig ist, kann dieser Schritt übersprungen werden:
sudo gpasswd -a rdpuser sudoZu dem Server kann man mit jedem RDP-Client, einschließlich des eingebauten Clients des Windows-Dienstes für Fernarbeitsplätze, eine Verbindung herstellen. Wenn Xrdp auf die externe Schnittstelle hört, 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 so aus:

Nach der ersten Einrichtung der Desktop-Umgebung erhalten wir einen vollständigen Desktop. Wie Sie sehen, verbraucht er nicht viel Ressourcen, obwohl alles Weitere von den verwendeten Anwendungen abhängt.

Wenn der Xrdp-Server nur auf localhost horcht, muss der Verkehr auf dem Client-Computer in einen SSH-Tunnel gepackt werden (sshd muss auf dem VPS laufen). Unter Windows kann ein grafischer SSH-Client (z. B. PuTTY) verwendet werden, während in UNIX-Systemen das Tool ssh benötigt wird:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipNach der Initialisierung des Tunnels wird der RDP-Client nicht mehr mit dem Remote-Server, sondern mit dem lokalen Host verbunden.
Mit mobilen Geräten ist es komplizierter: Die SSH-Clients, die einen Tunnel erstellen können, müssen gekauft werden; zudem wird die Hintergrundarbeit von Drittanwendungen in iOS und iPadOS durch eine zu gute Energieoptimierung erschwert. Auf dem iPhone und iPad ist es nicht möglich, einen Tunnel in einer separaten Anwendung zu erstellen — eine Kombi-Anwendung ist erforderlich, die selbst in der Lage ist, eine RDP-Verbindung über SSH herzustellen. Eine solche ist zum Beispiel .
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 läuft 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 Sitzungsmanager ist für den Benutzer normalerweise nicht sichtbar, da der im Klienten eingestellte Benutzername und das Passwort automatisch an ihn übermittelt werden. Wenn dies nicht geschehen ist oder bei der Authentifizierung ein Fehler aufgetreten ist, erscheint anstelle des Desktops ein interaktives Fenster für die Anmeldung.

Der automatische Start des Sitzungsmanagers ist in der Datei /etc/default/xrdp festgelegt, während die Konfiguration in /etc/xrdp/sesman.ini gespeichert ist. Standardmäßig sieht sie ungefähr so aus:
[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
; Wenn AlwaysGroupCheck=false ist, wird der Zugriff erlaubt
; wenn die Gruppe TerminalServerUsers nicht definiert ist.
AlwaysGroupCheck=false
[Sessions]Hier muss nichts geändert werden, es sollte nur der Root-Zugang verboten werden (AllowRootLogin=false). Für jeden sich im System authentifizierenden Benutzer wird ein separater xrdp-Prozess gestartet: Wenn man sich trennt, ohne die Sitzung zu beenden, laufen die Benutzerprozesse standardmäßig weiter, und man kann sich erneut mit der Sitzung verbinden. Die Einstellungen können in der Datei /etc/xrdp/sesman.ini (Sektion [Sessions]) geändert werden.
Umschalten der Tastaturlayouts
Mit einem bidirektionalen Clipboard gibt es normalerweise keine Probleme, aber bei der russischen Tastaturbelegung muss man ein wenig herumtüfteln (die russische Locale sollte bereits ). Lassen Sie uns die Tastatureinstellungen des Xrdp-Servers bearbeiten:
sudo nano /etc/xrdp/xrdp_keyboard.iniAm Ende der Konfigurationsdatei müssen folgende 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,ruSie müssen die Datei speichern und Xrdp neu starten:
sudo systemctl restart xrdpWie Sie sehen können, ist es nicht schwer, einen RDP-Server auf einem Linux-VPS einzurichten, und in haben wir bereits die VNC-Konfiguration behandelt. Neben diesen Technologien gibt es noch eine weitere interessante Option: das X2Go-System, das das modifizierte NX 3-Protokoll verwendet. Damit werden wir uns in der nächsten Veröffentlichung befassen.
Quelle: habr.com
