In We hebben de opzet van een VNC-server op een virtuele machine van elk type besproken. Deze optie heeft veel nadelen, waarvan de belangrijkste zijn dat de eisen aan de bandbreedte van gegevensoverdracht hoog zijn. Vandaag zullen we proberen verbinding te maken met de grafische desktop op Linux via RDP (Remote Desktop Protocol). Het VNC-systeem is gebaseerd op het verzenden van pixelarrays via het RFB-protocol (Remote Framebuffer), terwijl RDP complexere grafische primitieve en high-level opdrachten kan verzenden. Het wordt meestal gebruikt voor het opzetten van remote desktop-diensten in Windows, maar er zijn ook servers voor Linux beschikbaar.
Inhoudsopgave:
Installatie van de grafische omgeving
We nemen een virtuele machine met Ubuntu Server 18.04 LTS met twee rekenkernen, vier gigabyte RAM en een harde schijf (HDD) van twintig gigabyte. Een zwakkere configuratie is minder geschikt voor een grafische desktop, hoewel dit afhangt van de taken die moeten worden uitgevoerd. Vergeet niet de kortingscode Habrahabr10 te gebruiken voor 10% korting op je bestelling.

De installatie van de desktopomgeving met alle afhankelijkheden wordt uitgevoerd met de volgende opdracht:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsNet als in het vorige geval hebben we XFCE gekozen vanwege de relatief lage eisen aan de rekencapaciteit.
Russificatie van de server en installatie van software
Vaak worden virtuele machines alleen met een Engelse localisatie uitgerold. Op de desktop kan een Russische nodig zijn, welke eenvoudig is in te stellen. Laten we eerst de vertalingen voor systeemprogramma's installeren:
sudo apt-get install language-pack-ruLaten we de localisatie instellen:
sudo update-locale LANG=ru_RU.UTF-8Hetzelfde effect kan worden bereikt door handmatig het bestand /etc/default/locale te bewerken.
Voor de localisatie van GNOME en KDE zijn er pakketten language-pack-gnome-ru en language-pack-kde-ru in de repository - deze zijn nodig als je programma's uit deze desktopomgevingen gebruikt. In XFCE worden vertalingen samen met de applicaties geïnstalleerd. Vervolgens kunnen we woordenboeken installeren:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictBovendien kan de installatie van vertalingen nodig zijn voor sommige applicatieprogramma's:
# Браузер 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-ruDe voorbereiding van de desktopomgeving is afgerond, nu moet de RDP-server worden geconfigureerd.
Installatie en configuratie van de RDP-server
In de Ubuntu-repositories is er een gratis beschikbare Xrdp-server die we zullen gebruiken:
sudo apt-get install xrdpAls alles goed is gegaan, moet de server automatisch opstarten:
sudo systemctl status xrdp 
De Xrdp-server draait onder de gebruiker xrdp en gebruikt standaard het certificaat /etc/ssl/private/ssl-cert-snakeoil.key, dat je kunt vervangen door een eigen certificaat. Om het bestand leesbaar te maken, moet de gebruiker aan de groep ssl-cert worden toegevoegd:
sudo adduser xrdp ssl-certDe standaardinstellingen zijn te vinden in het bestand /etc/default/xrdp, terwijl alle andere configuratiebestanden van de server zich in de map /etc/xrdp bevinden. De belangrijkste parameters bevinden zich in het bestand xrdp.ini, dat je het beste niet kunt wijzigen. De configuratie is goed gedocumenteerd en er zijn bijpassende manpages beschikbaar:
man xrdp.ini
man xrdpJe moet alleen het script /etc/xrdp/startwm.sh bewerken, dat wordt uitgevoerd bij het initialiseren van de gebruikerssessie. Maak eerst een back-up van het distributiescript:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shOm de desktopomgeving XFCE te starten, heb je een script nodig dat ongeveer de volgende inhoud heeft:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Let op: in scripts is het beter om het volledige pad naar uitvoerbare bestanden op te geven — dit is een goede gewoonte. Maak het script uitvoerbaar en met deze stap is de configuratie van de Xrdp-server voltooid:
sudo chmod 755 /etc/xrdp/startwm.shHerstart de server:
sudo systemctl restart xrdp
Configuratie van de firewall
Standaard luistert Xrdp op TCP-poort 3389 op alle interfaces. Afhankelijk van de configuratie van de virtuele server kan het nodig zijn om de netfilter firewall in te stellen. In Linux wordt dit meestal gedaan met behulp van de iptables-tool, maar in Ubuntu is het beter om ufw te gebruiken. Wanneer het IP-adres van de client bekend is, kan de configuratie met de volgende opdracht worden uitgevoerd:
sudo ufw allow from IP_Address to any port 3389Verbinden vanaf een willekeurig IP kan als volgt worden toegestaan:
sudo ufw allow 3389Het RDP-protocol ondersteunt encryptie, maar toegang tot de Xrdp-server vanuit openbare netwerken open te stellen is geen goed idee. Als de client geen vast IP heeft, moet de server alleen op localhost luisteren voor een hoger beveiligingsniveau. Het is beter om toegang via een SSH-tunnel in te stellen, die het verkeer veilig van de computer van de client doorverwijst. Een soortgelijke aanpak hebben we voor de VNC-server.
Verbinden met de RDP-server
Voor een desktopomgeving is het beter om een aparte niet-beheerdersgebruiker aan te maken:
sudo adduser rdpuser 
Voeg de gebruiker toe aan de sudo-groep, zodat hij administratieve taken kan uitvoeren. Als dit niet nodig is, kan deze stap worden overgeslagen:
sudo gpasswd -a rdpuser sudoJe kunt verbinding maken met de server met behulp van elke RDP-client, inclusief de ingebouwde client van de Windows Remote Desktop-service. Als Xrdp naar de externe interface luistert, zijn er geen extra stappen nodig. Het is voldoende om het IP-adres van de VPS, de gebruikersnaam en het wachtwoord in de verbindingsinstellingen op te geven. Na het verbinden krijgen we ongeveer deze weergave:

Na de initiële configuratie van de desktopomgeving krijgen we een volledige desktop. Zoals je ziet, verbruikt hij niet veel middelen, hoewel alles verder afhangt van de gebruikte applicaties.

Als de Xrdp-server alleen naar localhost luistert, moet het verkeer op de clientcomputer in een SSH-tunnel worden verpakt (sshd moet op de VPS draaien). Onder Windows kan een grafische SSH-client worden gebruikt (bijvoorbeeld PuTTY), en in UNIX-systemen is de ssh-tool nodig:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipNa het initialiseren van de tunnel maakt de RDP-client verbinding met de lokale host in plaats van met de externe server.
Het is lastiger met mobiele apparaten: clients die in staat zijn om een tunnel op te zetten, moeten worden aangeschaft, bovendien is het moeilijk om op iOS en iPadOS achtergrondwerk voor externe toepassingen uit te voeren vanwege de goede optimalisatie van het energieverbruik. Op de iPhone en iPad kan een tunnel niet in een aparte applicatie worden opgezet — er is een alles-in-één-app nodig die zelf RDP-verbindingen via SSH kan maken. Bijvoorbeeld, zoals .
Sessiebeheerder en gebruikerssessies
De mogelijkheid voor multigebruikersamenwerking is direct in de Xrdp-server geïmplementeerd en vereist geen extra configuratie. Na het starten van de service via systemd draait één proces in daemonmodus, luistert naar poort 3389 en communiceert via localhost met de sessiebeheerder.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
De sessiebeheerder is voor gebruikers meestal niet zichtbaar, omdat de in de clientinstellingen opgegeven gebruikersnaam en het wachtwoord automatisch aan hem worden doorgegeven. Als dit niet gebeurde of er een fout optrad bij de authenticatie, verschijnt in plaats van de desktop een interactief inlogvenster.

De automatische start van de sessiemanager staat in het bestand /etc/default/xrdp, en de configuratie wordt opgeslagen in /etc/xrdp/sesman.ini. Standaard ziet deze er ongeveer zo uit:
[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
; Wanneer AlwaysGroupCheck=false is, wordt toegang toegestaan
; als de groep TerminalServerUsers niet is gedefinieerd.
AlwaysGroupCheck=false
[Sessions]Hier hoeft niets te worden veranderd, behalve het verbieden van inloggen met rootrechten (AllowRootLogin=false). Voor elke gebruiker die zich in het systeem authenticiseert, wordt een aparte xrdp-proces gestart: als je de sessie loskoppelt zonder te beëindigen, blijven de gebruikersprocessen standaard werken en kan opnieuw verbinding worden gemaakt met de sessie. De instellingen kunnen worden gewijzigd in het bestand /etc/xrdp/sesman.ini (sectie [Sessions]).
Gesprekken van de toetsenbordindelingen wisselen
Met een bidirectionele klembord werkt meestal prima, maar met de Russische toetsenbordindeling moet je wat spelen (de Russische locale moet al ). We zullen de toetsenbordinstellingen van de Xrdp-server bewerken:
sudo nano /etc/xrdp/xrdp_keyboard.iniAan het einde van het configuratiesbestand moeten de volgende regels worden toegevoegd:
[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,ruSla het bestand op en herstart Xrdp:
sudo systemctl restart xrdpZoals je ziet, is het eenvoudig om een RDP-server op een Linux VPS in te stellen, en in hebben we al de configuratie van VNC behandeld. Naast deze technologieën is er nog een interessante optie: het systeem X2Go, dat een gemodificeerde NX 3-protocol gebruikt. Hierover zullen we in de volgende publicatie meer bespreken.
Bron: habr.com
