====== 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: vncserver -list # 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 -f vns@remoteserver -L 5901:127.0.0.1:5901 # options: -N -4 Si l'on termine cette commande, le tunnel sera refermé. Voyez [[doc:formations:hebergement:serveur:ssh#ssh_tunnels|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 [[[[doc:formations:hebergement:service:wireguard|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: Lancer le serveur VNC sur le display '':1'': me@client:~ $ REMOTE=remoteuser@remoter.server.com me@client:~ $ # Si vous ne l'avez pas déjà fait: 'ssh $REMOTE' puis 'vncpasswd' ! Lancer le service sur le serveur en même temps que le tunnel SSH sur le poste local: me@client:~ $ ssh $REMOTE -L 5901:127.0.0.1:5901 'vncserver -depth 24 -geometry 1400x1050 :1' Lancer le client VNC local sur le tunnel local: me@client:~ $ vncviewer 127.0.0.1:5901 Terminer le serveur distant: me@client:~ $ ssh $REMOTE vncserver -kill :1