Tightvncserver est un serveur VNC libre sur Linux afin de partager son écran.
Avec ce serveur, vous pouvez prendre la main à distance via le protocole VNC.
Cela permet d’administrer via l’interface graphique n’importe quel PC ou serveur.
Cet article vous guide pour installer et prendre la main avec VNC sur Linux.
Vous trouverez aussi de l’aide pour sécuriser le serveur VNC contre les piratages.
Table des matières
Installer et prendre la main avec VNC sur Linux
Dans cet article, nous utilisons un serveur Linux sans serveur X.
On part ici d’un serveur Linux sur internet accessible que par SSH.
En effet, il peut parfois arriver que l’on ait besoin d’un écran graphique.
Dans ces cas là, on peut installer le serveur tightvncserver avec un gestionnaire de fenêtres léger comme fluxbox, Xfwm4, Openbox, etc.
Pour installer le serveur VNC avec le gestionnaire de fenêtres :
apt-get install tightvncserver fluxbox xfonts-base
Laisser les paquets s’installer :
Créer le mot de passe et lancer le serveur VNC
Ensuite on s’identifie avec l’utilisateur avec lequel nous exécutons le serveur VNC.
Évitez de lancer ce dernier avec l’utilisateur root pour des raisons évidentes de sécurité.
Suivez les recommandations en fin d’article.
On lance la commande suivante afin de créer le mot de passe :
vncpasswd
Il est impératif de choisir un mot de passe fort et sûr pour limiter les piratages VNC.
Suivre éventuellement ce lien :
Enfin on lance le serveur VNC avec la commande suivante :
vncserver&
Ici on voit qu’il s’exécute sur l’écran (DISPLAY) :1
Par défaut, le serveur VNC s’exécute avec une résolution de 1024×768. Vous pouvez forcer la résolution avec le paramètre -geometry.
Par exemple :
vncserver -geometry 1900x1080
Configurer le gestionnaire de fenêtres dans le serveur VNC
Seulement pour le moment, le serveur VNC ne lance aucun gestionnaire de fenêtres.
- Éditez le fichier ~/.vnc/xstartup
- Commencer la ligne /etc/X11/Xsession si présente
- Ajoutez une ligne afin de lancer le gestionnaire de fenêtres adéquates. Voici la liste des plus fréquents :
startkde &
gnome-session &
startxfce4 &
lxsession &
fluxbox &
- Dans mon cas, il s’agit de fluxbox, donc j’ajoute fluxbox&
Arrêtez le serveur VNC et relancez le afin de prendre en compte les changements :
vncserver -kill :1
vncserver&
Prise en main à distance VNC Linux
Il ne reste plus qu’à tester la prise en main à distance avec un client VNC.
- Télécharger et installer un client VNC
- Lancer ce dernier puis indiquez l’adresse IP du serveur VPN
- Lancer la connexion et saisissez le mot de passe
- La session VNC s’ouvre alors
Ici on voit que fluxbox se lance sans problème.
Il est même tout à fait possible de lancer les commandes depuis SSH directement dans VNC.
Pour cela, on exporte le DISPLAY pour ensuite lancer les commandes graphiques :
export DISPLAY=:1
Par exemple pour lancer firefox ensuite :
firefox&
Sécuriser le serveur VNC Linux
Le but est de ne pas laisser le serveur VNC accessible depuis internet et filtrer les connexions :
- Éviter les attaques par bruteforce qui peuvent permettre de pirater le serveur
- Se protéger des vulnérabilités VNC, même si vous pouvez aussi mettre à jour le logiciel VNC
Avec iptables
La première méthode la plus simple est de filtrer le port 5901 avec iptables.
Pour cela, vous pouvez vous inspirer de ces règles en remplaçant par des IP à autoriser.
/sbin/iptables -A INPUT -s XXX.XXX.XXX.XXX -p tcp --dport 5901 -j ACCEPT
/sbin/iptables -A INPUT ! -s YYY.YYY.YYY.YY -p tcp --dport 5901 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 5901 -j DROP
La seule limite de cette méthode est qu’il faut avoir une adresse IP fixe.
via un tunnel SSH
Le tunnel SSH consiste à se connecter au serveur VNC à travers SSH qui effectue une redirection de port.
De ce fait, le serveur VNC n’est pas exposé sur internet.
Première chose, on configure le serveur VNC afin de ne pas écoute sur toutes les interfaces réseaux mais seulement sur localhost.
Pour cela, il faut le démarrer de cette manière :
vncserver -nolisten tcp -localhost
La commande netstat confirme bien que le serveur VNC n’écoute que sur localhost.
Ensuite sur le PC client, on ouvre le tunnel SSH de cette manière.
La commande suivante ouvre le port 5000 vers le serveur VNC sur 127.0.0.1:5901 via le tunnel ssh user@host
1
ssh -L 5000:127.0.0.1:5901 -N -f user@host
Il ne reste plus qu’à lancer un client VNC pour se connecter sur localhost:5000 2
Si tout va bien, l’accès VNC s’effectue.
Ainsi le serveur VNC n’est pas accessible directement sur internet.
D’autres méthodes existes notamment avec PuTTy sur Windows.
Pour plus d’informations :
Port Knocking
Le port Knocking est une technique qui vise à fermer un port avec iptables et ne l’ouvrir qu’après une séquence TCP bien précise faites par le client.
Voici comment mettre en place ce filtrage :
aptitude install knockd
Sur le serveur, knockd doit tourner en daemon, pour cela, on modifie /etc/default/knockd :
START_KNOCKD=1
Ensuite on modifie /etc/knockd.conf en créant la séquence de ports qui va permettre de créer la règle d’ouverture de ports.
Par exemple, ci-dessous, il faut envoyer une connexion TCP sur les ports 7000 puis 8000 et enfin 9000 afin que la règle Iptables permettant l’accès soit générée :
(attention, bien mettre -I INPUT pour l’open)
[options] UseSyslog [openrsync] sequence = 7000,8000,9000 seq_timeout = 5 command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 5901 -j ACCEPT tcpflags = syn [closerync] sequence = 9000,8000,7000 seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn
Enfin, on créé la règle pour fermer le port 5901 :
/sbin/iptables -A INPUT -p tcp --dport 5901 -j DROP
Côté client, vous pouvez générer la séquence comme ceci :
knock -v host port1 port2 port3
Liens
- Les meilleurs logiciels de contrôle à distance d’un PC
- Activer et se connecter au bureau à distance de Windows 10
- Comment activer et utiliser le bureau à distance de Windows 11
- Se connecter avec l’application de bureau à distance de Windows 10/11
- Assistance à distance de Windows 10 pour contrôler un PC à distance
- Comment prendre la main sur un PC à distance avec RustDesk sur Windows, Ubuntu ou Android
- VNC : Configurer et utiliser un contrôle à distance d’un PC
- Prendre la main à distance sur Ubuntu avec VNC (Vino)
- Installer et prendre la main avec VNC sur Linux
- TeamViewer : prise en main à distance d’un ordinateur
- Comment installer Teamviewer sur Ubuntu