Dans Nous avons examiné le lancement d'un serveur VNC sur une machine virtuelle de tout type. Cette option présente de nombreux inconvénients, dont le principal est les exigences élevées en bande passante des canaux de transmission de données. Aujourd'hui, nous allons essayer de nous connecter à un bureau graphique sous Linux via RDP (Remote Desktop Protocol). Le système VNC est basé sur la transmission d'ensembles de pixels via le protocole RFB (Remote Framebuffer), tandis que RDP permet d'envoyer des primitives graphiques plus complexes et des commandes de haut niveau. Il est généralement utilisé pour organiser des services de bureau à distance sous Windows, mais des serveurs pour Linux sont également disponibles.
Table des matières :
Installation de l'environnement graphique
Nous prendrons une machine virtuelle avec Ubuntu Server 18.04 LTS, dotée de deux cœurs de calcul, de quatre gigaoctets de mémoire vive et d'un disque dur (HDD) de vingt gigaoctets. Une configuration plus faible convient mal à un bureau graphique, bien que cela dépende des tâches à accomplir. N'oubliez pas d'utiliser le code promo Habrahabr10 pour obtenir une réduction de 10 % lors de la commande.

L'installation de l'environnement de bureau avec toutes les dépendances se fait avec la commande suivante :
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsComme dans le cas précédent, nous avons choisi XFCE en raison de ses exigences relativement faibles en ressources de calcul.
Localisation du serveur et installation des logiciels
Souvent, les machines virtuelles ne sont déployées qu'avec la localisation anglaise. Un bureau peut nécessiter la langue russe, qu'il est facile de configurer. Commençons par installer les traductions pour les programmes système :
sudo apt-get install language-pack-frConfigurons la localisation :
sudo update-locale LANG=fr_FR.UTF-8Le même résultat peut être atteint en modifiant manuellement le fichier /etc/default/locale.
Pour la localisation de GNOME et KDE, il existe des paquets language-pack-gnome-fr et language-pack-kde-fr dans le dépôt — ils seront nécessaires si vous utilisez des programmes de ces environnements de bureau. Dans XFCE, les traductions sont installées avec les applications. Ensuite, vous pouvez installer des dictionnaires :
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictDe plus, l'installation des traductions peut être nécessaire pour certaines applications :
# Браузер 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À ce stade, la préparation de l'environnement de bureau est terminée, il reste à configurer le serveur RDP.
Installation et configuration du serveur RDP
Dans les dépôts d'Ubuntu, il existe un serveur Xrdp distribué librement, que nous allons utiliser :
sudo apt-get install xrdpSi tout s'est bien passé, le serveur devrait se lancer automatiquement :
sudo systemctl status xrdp 
Le serveur Xrdp se lance avec les droits de l'utilisateur xrdp et utilise par défaut le certificat /etc/ssl/private/ssl-cert-snakeoil.key, qui peut être remplacé par le vôtre. Pour accéder en lecture à ce fichier, il faut ajouter l'utilisateur au groupe ssl-cert :
sudo adduser xrdp ssl-certLes paramètres par défaut se trouvent dans le fichier /etc/default/xrdp, et tous les autres fichiers de configuration du serveur se trouvent dans le répertoire /etc/xrdp. Les principaux paramètres se trouvent dans le fichier xrdp.ini, qu'il n'est pas nécessaire de modifier. Le fichier de configuration est bien documenté et comprend également des manpages appropriées :
man xrdp.ini
man xrdpIl ne reste plus qu'à modifier le script /etc/xrdp/startwm.sh, qui s'exécute lors de l'initialisation de la session utilisateur. Nous allons d'abord créer une copie de sauvegarde du script distribué :
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPour lancer l'environnement de bureau XFCE, un script de contenu semblable est requis :
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4À noter : dans les scripts, il est préférable d'indiquer le chemin complet vers les fichiers exécutables — c'est une bonne habitude. Rendre le script exécutable, et à ce stade, la configuration du serveur Xrdp peut être considérée comme terminée :
sudo chmod 755 /etc/xrdp/startwm.shRedémarrer le serveur :
sudo systemctl restart xrdp
Configuration du pare-feu
Par défaut, Xrdp écoute le port TCP 3389 sur toutes les interfaces. Selon la configuration du serveur virtuel, il peut être nécessaire de configurer le pare-feu Netfilter. Sur Linux, cela se fait généralement à l'aide de l'outil iptables, mais sur Ubuntu, il est préférable d'utiliser ufw. Si l'adresse IP du client est connue, la configuration s'effectue avec la commande suivante :
sudo ufw allow from IP_Address to any port 3389Pour autoriser les connexions depuis n'importe quelle IP, on peut faire ainsi :
sudo ufw allow 3389Le protocole RDP supporte le chiffrement, mais ouvrir l'accès au serveur Xrdp depuis des réseaux publics est une mauvaise idée. Si le client n'a pas d'IP fixe, pour augmenter le niveau de sécurité, le serveur doit écouter uniquement localhost. Il est conseillé de configurer l'accès via un tunnel SSH, qui redirigera en toute sécurité le trafic depuis l'ordinateur du client. Une approche similaire est pour le serveur VNC.
Connexion au serveur RDP
Pour travailler avec l'environnement de bureau, il est préférable de créer un utilisateur non privilégié distinct :
sudo adduser rdpuser 
Ajoutons l'utilisateur au groupe sudo afin qu'il puisse résoudre les tâches administratives liées. Si cela n'est pas nécessaire, cette étape peut être omise :
sudo gpasswd -a rdpuser sudoOn peut se connecter au serveur à l'aide de n'importe quel client RDP, y compris le client intégré du service de bureau à distance Windows. Si Xrdp écoute sur l'interface externe, aucune démarche supplémentaire n'est nécessaire. Il suffit d'indiquer dans les paramètres de connexion l'adresse IP du VPS, le nom d'utilisateur et le mot de passe. Après la connexion, nous devrions voir quelque chose comme ceci :

Après la configuration initiale de l'environnement de bureau, nous aurons un bureau complet. Comme vous pouvez le voir, il consomme peu de ressources, bien que par la suite tout dépendra des applications utilisées.

Si le serveur Xrdp n'écoute que sur localhost, le trafic devra être encapsulé dans un tunnel SSH (sshd doit être en cours d'exécution sur le VPS). Sous Windows, vous pouvez utiliser un client SSH graphique (comme PuTTY), tandis que dans les systèmes UNIX, vous aurez besoin de l'outil ssh :
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipAprès l'initialisation du tunnel, le client RDP ne se connectera plus au serveur distant, mais à l'hôte local.
Avec les appareils mobiles, c'est plus compliqué : il faudra acheter des clients SSH capables de créer un tunnel, et de plus, sur iOS et iPadOS, le travail en arrière-plan des applications tierces est compliqué en raison de l'optimisation excessive de la consommation d'énergie. Sur iPhone et iPad, il n'est pas possible de créer un tunnel dans une application séparée — une application combinée sera nécessaire, capable d'établir une connexion RDP via SSH. Par exemple, comme .
Gestionnaire de sessions et sessions utilisateur
La possibilité de travail multi-utilisateur est implémentée directement dans le serveur Xrdp et ne nécessite aucune configuration supplémentaire. Après le démarrage du service via systemd, un processus fonctionne en mode démon, écoute le port 3389 et interagit avec le gestionnaire de sessions via localhost.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Le gestionnaire de sessions n'est généralement pas visible aux utilisateurs, car le login et le mot de passe définis dans les paramètres du client lui sont transmis automatiquement. Si cela ne se produit pas ou si une erreur d'authentification se produit, une fenêtre interactive pour se connecter apparaîtra au lieu du bureau.

Le démarrage automatique du gestionnaire de sessions est défini dans le fichier /etc/default/xrdp, tandis que la configuration est stockée dans /etc/xrdp/sesman.ini. Par défaut, elle ressemble à ceci :
[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
; Lorsque AlwaysGroupCheck=false, l'accès sera permis
; si le groupe TerminalServerUsers n'est pas défini.
AlwaysGroupCheck=false
[Sessions]Ici, vous pouvez ne rien changer, il suffit d'interdire l'accès avec des droits root (AllowRootLogin=false). Pour chaque utilisateur authentifié dans le système, un processus xrdp séparé est lancé : si vous vous déconnectez sans terminer la session, les processus utilisateurs continueront de fonctionner par défaut, et vous pourrez vous reconnecter à la session. Les paramètres peuvent être modifiés dans le fichier /etc/xrdp/sesman.ini (section [Sessions]).
Changement de dispositions de clavier
Avec le port de presse bidirectionnel, il n'y a généralement pas de problèmes, mais avec la disposition du clavier russe, il faudra faire quelques réglages (la locale russe doit déjà être ). Modifions les paramètres du clavier sur le serveur Xrdp :
sudo nano /etc/xrdp/xrdp_keyboard.iniIl faut ajouter les lignes suivantes à la fin du fichier de configuration :
[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,ruIl ne reste plus qu'à enregistrer le fichier et à redémarrer Xrdp :
sudo systemctl restart xrdpComme vous le voyez, mettre en place un serveur RDP sur un VPS Linux n'est pas difficile, et dans nous avons déjà couvert la configuration de VNC. En plus de ces technologies, il existe une autre option intéressante : le système X2Go qui utilise un protocole modifié NX 3. Nous examinerons cela dans la prochaine publication.
Source : habr.com
