Outils pour utilisateurs

Outils du site


doc:formations:hebergement:serveur:vnc

Ceci est une ancienne révision du document !


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

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:

me@client:~ $ ssh remoteuser@remoter.server.com -L 5901:127.0.0.1:5901 'vncserver -depth 24 -geometry 1400x1050'
me@client:~ $ ssh -Y -C remoteuser@remoter.server.com -L 5901:127.0.0.1:5901
me@client:~ $ vncviewer 127.0.0.1:5901
doc/formations/hebergement/serveur/vnc.1712692182.txt.gz · Dernière modification : 2024/04/09 19:49 de jeremie