
Im vorherigen Artikel haben wir uns mit der Ausführung eines VNC-Servers in einer beliebigen Art von virtueller Maschine befasst. Diese Option hat viele Nachteile, wobei der Hauptgrund die hohen Anforderungen an die Bandbreite der Datenübertragungskanäle sind. Heute werden wir versuchen, mithilfe von RDP (Remote Desktop Protocol) eine Verbindung zu einem grafischen Linux-Desktop herzustellen. VNC basiert auf der Übertragung von Arrays von Pixeln unter Verwendung des RFB-Protokolls (Remote Framebuffer), während RDP das Senden komplexerer grafischer Grundelemente und Befehle auf hoher Ebene ermöglicht. Es wird häufig zum Organisieren von Remotedesktopdiensten unter Windows verwendet, es sind jedoch auch Server für Linux verfügbar.
Inhaltsverzeichnis:
Installieren der grafischen Umgebung
Server Russification und Softwareinstallation
Installieren und Konfigurieren des RDP-Servers
Konfigurieren der Firewall Herstellen einer
Verbindung zum RDP-Server Sitzungsmanager
und Benutzersitzungen
Wechseln des Tastaturlayouts
Installieren einer grafischen Umgebung
Wir nehmen eine virtuelle Maschine mit Ubuntu Server 18.04 LTS mit zwei Prozessorkernen, vier Gigabyte RAM und einem 20-Gigabyte-Festplattenlaufwerk (HDD). Eine schwächere Konfiguration ist für einen grafischen Desktop nicht geeignet, hängt jedoch von den zu lösenden Aufgaben ab. Vergessen Sie nicht, den Gutscheincode Habrahabr10 zu verwenden, um 10% Rabatt bei der Bestellung zu erhalten.

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-utils
Wie im vorherigen Fall haben wir uns wegen des relativ geringen Rechenaufwands für XFCE entschieden.
Server Russification und Softwareinstallation
Virtuelle Maschinen werden häufig nur mit englischer Lokalisierung bereitgestellt. Auf dem Desktop benötigen Sie möglicherweise Russisch, was nicht schwer einzurichten ist. Lassen Sie uns zunächst Übersetzungen für Systemprogramme installieren:
sudo apt-get install language-pack-ru
Lassen Sie uns die Lokalisierung einrichten:
sudo update-locale LANG=ru_RU.UTF-8
Sie können den gleichen Effekt erzielen, indem Sie das Gebietsschema / etc / default / manuell bearbeiten.
Um GNOME und KDE zu lokalisieren, enthält das Repository die Sprachpakete gnome-ru und language-pack-kde-ru. Sie benötigen sie, wenn Sie Programme aus diesen Desktop-Umgebungen verwenden. In XFCE werden Übersetzungen zusammen mit den Anwendungen installiert. Dann können Sie Wörterbücher installieren:
#
sudo apt-get install hunspell hunspell-ru
# LibreOffice
sudo apt-get install mythes-ru
# - DICT
sudo apt-get install mueller7-dict
Darüber hinaus kann für einige Anwendungen die Installation von Übersetzungen 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-ru
Damit ist die Vorbereitung der Desktop-Umgebung abgeschlossen. Der RDP-Server muss noch konfiguriert werden.
RDP-Server installieren und konfigurieren
In den Ubuntu-Repositories gibt es einen kostenlosen Xrdp-Server, den wir verwenden werden:
sudo apt-get install xrdp
Wenn alles gut gegangen ist, sollte der Server automatisch starten:
sudo systemctl status xrdp

Der Xrdp-Server startet als xrdp-Benutzer und verwendet standardmäßig das Zertifikat /etc/ssl/private/ssl-cert-snakeoil.key, das Sie durch Ihr eigenes ersetzen können. Um die Datei zu lesen, müssen Sie den Benutzer zur Gruppe ssl-cert hinzufügen:
sudo adduser xrdp ssl-cert
Die Standardeinstellungen finden Sie in der Datei / etc / default / xrdp, während sich alle anderen Serverkonfigurationsdateien im Verzeichnis / etc / xrdp befinden. Die Hauptparameter befinden sich in der Datei xrdp.ini, die unverändert bleiben kann. Die Konfiguration ist gut dokumentiert und das Kit enthält entsprechende Manpages:
man xrdp.ini
man xrdp
Es bleibt nur das Skript /etc/xrdp/startwm.sh zu bearbeiten, das ausgeführt wird, wenn die Benutzersitzung initialisiert wird. Lassen Sie uns zunächst eine Sicherungskopie des Skripts aus der Distribution erstellen:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.sh
Zum Starten der XFCE-Desktopumgebung benötigen Sie ein Skript, das dem folgenden ähnelt:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4
Bitte beachten Sie: Es ist besser, den vollständigen Pfad zu ausführbaren Dateien in Skripten zu schreiben - dies ist eine gute Angewohnheit. Lassen Sie uns das Skript ausführbar machen und das Xrdp-Server-Setup kann als abgeschlossen betrachtet werden:
sudo chmod 755 /etc/xrdp/startwm.sh
Wir starten den Server neu:
sudo systemctl restart xrdp
Firewall-Konfiguration
Standardmäßig überwacht Xrdp auf allen Schnittstellen den TCP-Port 3389. Abhängig von der Konfiguration des virtuellen Servers müssen Sie möglicherweise die Netfilter-Firewall konfigurieren. Unter Linux erfolgt dies normalerweise mit dem Dienstprogramm iptables, unter Ubuntu ist es jedoch besser, ufw zu verwenden. Wenn die IP-Adresse des Clients bekannt ist, erfolgt die Konfiguration mit dem folgenden Befehl:
sudo ufw allow from IP_Address to any port 3389
Erlauben Sie Verbindungen von jeder IP wie folgt:
sudo ufw allow 3389
RDP unterstützt die Verschlüsselung, es ist jedoch eine schlechte Idee, den Xrdp-Server aus öffentlichen Netzwerken freizulegen. Wenn der Client keine feste IP hat, sollte der Server nur localhost abhören, um die Sicherheit zu erhöhen. Der Zugriff erfolgt am besten über einen SSH-Tunnel, der den Datenverkehr vom Client-Computer sicher weiterleitet. Wir haben im vorherigen Artikel einen ähnlichen Ansatz für den VNC-Server verwendet.
Verbindung zum RDP-Server herstellen
Um mit der Desktop-Umgebung zu arbeiten, ist es besser, einen separaten nicht privilegierten Benutzer zu erstellen:
sudo adduser rdpuser

Fügen wir den Benutzer der Sudo-Gruppe hinzu, damit er verwaltungsbezogene Aufgaben lösen kann. Wenn dies nicht erforderlich ist, können Sie diesen Schritt überspringen:
sudo gpasswd -a rdpuser sudo
Sie können mit jedem RDP-Client, einschließlich des integrierten Windows-Remotedesktopdienst-Clients, eine Verbindung zum Server herstellen. Wenn Xrdp eine externe Schnittstelle abhört, sind keine zusätzlichen Gesten erforderlich. Es reicht aus, die VPS-IP-Adresse, den Benutzernamen und das Kennwort in den Verbindungseinstellungen anzugeben. Nach dem Verbinden sehen wir ungefähr Folgendes:

Nach der Ersteinrichtung der Desktop-Umgebung erhalten wir einen vollwertigen Desktop. Wie Sie sehen, verbraucht es nicht so viele Ressourcen, obwohl alles von den verwendeten Anwendungen abhängt.

Wenn der Xrdp-Server nur localhost abhört, muss der Datenverkehr auf dem Clientcomputer in einen SSH-Tunnel gepackt werden (sshd muss auf dem VPS ausgeführt werden). Unter Windows können Sie einen grafischen SSH-Client (z. B. PuTTY) verwenden, und auf UNIX-Systemen benötigen Sie das Dienstprogramm ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ip
Nach der Initialisierung des Tunnels stellt der RDP-Client keine Verbindung mehr zum Remote-Server, sondern zum lokalen Host her.
Bei mobilen Geräten ist es schwieriger: SSH-Clients, die in der Lage sind, den Tunnel zu erhöhen, müssen gekauft werden. Außerdem ist in iOS und iPadOS die Hintergrundarbeit von Anwendungen von Drittanbietern aufgrund einer zu guten Energieoptimierung schwierig. Auf dem iPhone und iPad funktioniert es nicht, den Tunnel in einer separaten Anwendung anzuheben. Sie benötigen eine Kombinationsanwendung, die selbst eine RDP-Verbindung über SSH herstellen kann. Zum Beispiel als Remoter Pro .
Sitzungsmanager- und Benutzersitzungen
Die Mehrbenutzerfunktion wird direkt auf dem Xrdp-Server implementiert und erfordert keine zusätzliche Konfiguration. Nach dem Starten des Dienstes über systemd wird ein Prozess im Dämonmodus ausgeführt, überwacht Port 3389 und kommuniziert über localhost mit dem Sitzungsmanager.
ps aux |grep xrdp

sudo netstat -ap |grep xrdp

Der Sitzungsmanager ist normalerweise für Benutzer nicht sichtbar, da die in den Clienteinstellungen angegebenen Anmeldungen und Kennwörter automatisch an ihn übertragen werden. Wenn dies nicht geschehen ist oder während der Authentifizierung ein Fehler aufgetreten ist, wird anstelle des Desktops ein interaktives Anmeldefenster angezeigt.

Der automatische Start des Sitzungsmanagers ist in der Datei / etc / default / xrdp angegeben, und die Konfiguration wird in /etc/xrdp/sesman.ini gespeichert. Standardmäßig sieht es 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
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]
Sie können hier nichts belassen, Sie müssen nur die Root-Anmeldung deaktivieren (AllowRootLogin = false). Für jeden am System angemeldeten Benutzer wird ein separater xrdp-Prozess gestartet: Wenn Sie die Verbindung trennen, ohne die Sitzung zu beenden, funktionieren die Benutzerprozesse standardmäßig weiter und Sie können die Verbindung zur Sitzung wiederherstellen. Die Einstellungen können in der Datei /etc/xrdp/sesman.ini (Abschnitt [Sitzungen]) geändert werden.
Tastaturlayouts wechseln
Bei einer zweiseitigen Zwischenablage treten normalerweise keine Probleme auf, aber beim russischen Tastaturlayout müssen Sie ein wenig basteln (das russische Gebietsschema muss bereits installiert sein ). Lassen Sie uns die Tastatureinstellungen des Xrdp-Servers bearbeiten:
sudo nano /etc/xrdp/xrdp_keyboard.ini
Die folgenden Zeilen sollten am Ende der Konfigurationsdatei 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,ru
Es bleibt die Datei zu speichern und Xrdp neu zu starten:
sudo systemctl restart xrdp
Wie Sie sehen, ist es nicht schwierig, einen RDP-Server auf einem Linux-VPS einzurichten, und im vorherigen Artikel haben wir bereits das VNC-Setup erläutert. Zusätzlich zu diesen Technologien gibt es eine weitere interessante Option: das X2Go-System, das ein modifiziertes NX 3-Protokoll verwendet. Wir werden uns in der nächsten Veröffentlichung damit befassen.
