Ceci est une ancienne révision du document !
Table des matières
Accès graphique distant
Ce n'est pas recommandé. C'est lourd, lent et gros. Cela implique donc une bien plus grande surface d'attaque du serveur.
Cependant il arrive que ce soit nécessaire, par exemple pour faire tourner une solution complexe ou un progiciel qui n'est pas interfaçable à distance ("headless"), ou bien pouvoir lancer un client web à distance pour configurer le routeur internet qui refuse en général de fonctionner en WAN (ce qui est bien d'un point de vue sécuritaire).
On va utiliser ici TigerVNC, un serveur et un client VNC (virtual network computer) open source.
on conseille l'utilisation d'un
user
dédié pour limiter les risques. Ne faites pas de VNC en root !
ssh root@tiger.modomaine.com useradd vnc sudo su - vnc # ... ajouter sa clé publique SSH dans le /home/vnc/.ssh/authorized_keys
Serveur VNC
Serveur X déjà lancé (session utilisateur ouverte)
Si le serveur X est déjà lancé sur la machine distante, on peut l'emprunter simplement avec:
sudo apt install tigervnc-scraping-server vncpasswd # pour définir le mot de passe d'acces à l'interface x0vncserver -display "$DISPLAY" -rfbauth .vnc/passwd
Nb: $DISPLAY
vaut généralement :0
si vous voulez donner un accès distant risqué, utilisez par exemple
X0tigervnc -display :0 -localhost=0 -desktop :0 -rfbport 5900 -PasswordFile ~/.vnc/passwd &
Serveur X non lancé (aucune session utilisateur ouverte)
Il faut créer un serveur X, par exemple avec:
sudo apt install x11vnc xvfb fluxbox # uniquement si vous n'avez pas déjà X installé sudo apt install tigervnc-standalone-server tigervnc-xorg-extension tigervnc-tools vncpasswd # pour définir le mot de passe d'acces à l'interface vncserver -depth 24 -geometry 1400x1050 # Le ''depth'' optionnel est la résolution colorimétrique # Le ''geometry'' optionnel spécifie la taille de l'écran virtuel
Diagnostic et fermeture
Nb: Utilisez ss -ant
pour lister les services ouverts.
Pour arrêter le service VNC il faut avoir identifié la bonne session X avec:
vnclist # ou bien x0vncserver -list vncserver -kill :1 # ou bien x0vncserver -kill :1
le service vnc restera ouvert tant qu'il n'est pas tué !
Client VNC
Du coté cient, on a seulement besoin du "viewer":
sudo apt install tigervnc-viewer
TigerVNC ne sécurise pas ses communications et n'écoute qu'en local sur le serveur par défaut.
Sécurisation par tunnel SSH
Une solution simple est d'utiliser un tunnel ssh entre le poste et le serveur qui va router un port local vers le port VNC sur le serveur (spécifiez le bon "user@host"):
ssh vnc@ssh root@tiger.modomaine.com -L 5901:127.0.0.1:5901
Si l'on termine cette commande, le tunnel sera refermé. Voyez la page associée pour plus d'option et de robustesse associée aux tunnels. Utilisez ss -ant
pour valider la présence du tunnel.
A partir de là, le port 5901 local sur le poste client permet d'obtenir le service VNC distant.
vncviewer
Il faut passer à l'application TigerVNC Client l'adresse 127.0.0.1:5901
et donner le mot de passe saisi lors du vncpasswd
sur le serveur (attention, ce n'est pas le mot de passe de l'utilisateur unix vnc
).
Sécurisation par VPN
Il très intéressant d'utiliser un serveur tiers qui fera office de proxy pour connecter entre eux des clients/serveurs VNC de façon précise et sécurisée. C'est utile aussi lorsque le poste cible n'a pas de serveur SSH ou n'a aucune raison de laisser le client s'y connecter (meme en tunnel).
Par exemple avec le VPN wireguard et le pare-feu UFW, le client VPN 10.0.0.222 pourra contrôler le 10.0.0.111 via son serveur VNC seulement si vous l'avez autorisé avec la règle:
ufw route allow in on rwin out on rwin from 10.0.0.222 to 10.0.0.111 port 5900
Le minimum de règles pour gérer l'ensemble sera très réduit (ports 22 pour le SSH et 51820 pour wireguard lui-même);
# ufw status numbered To Action From -- ------ ---- [ 1] 51820 ALLOW IN Anywhere [ 2] 22 ALLOW IN Anywhere [ 3] 10.0.0.111 5900 on rwin ALLOW FWD 10.0.0.222 on rwin
L'accès depuis 10.0.0.222 se fera donc avec vncviewer 10.0.0.111
Divers
Pour installer un navigateur web léger … mais instable (ama): sudo apt install midori
coté serveur donc.
En version la plus courte
Sur son PC dans un premier shell:
ssh remoteuser@remoter.server.com -L 5901:127.0.0.1:5901 'x0vncserver -fg -display :1 -rfbauth .vnc/passwd'
Et dans un second shell, lancer alors vncviewer