VNC

Logo VNC VNC (Virtual Network Computing) est un système qui vous permet de contrôler une machine à distance, et ce, en prenant le contrôle du clavier et de la souris de cette machine. Cela peut être utile si l'un de vos proches débute en informatique car vous pouvez voir ce qu'il voit sur son écran. Par ailleurs, cela peut vous épargner de passer par la ligne de commande. Pour plus d'informations, vous pouvez consulter la page Wikipédia. Pour mettre en place un service VNC complet il est nécessaire d'installer les applications à cet effet sur le client (l'ordinateur qui contrôle) et sur le serveur (l'ordinateur contrôlé). Ubuntu intègre par défaut à la fois le client VNC, pour se connecter à une machine distante et le serveur VNC qui déporte l'affichage.

VNC est présent dans Ubuntu. Pour les variantes installez les paquets vino pour la partie serveur, et remmina ou une des applications prévues à cet effet pour la partie cliente. Vous trouverez une liste des clients sur la page qui traite du bureau à distance.

Le serveur et client VNC d'Ubuntu est vino. Il est utile pour une utilisation en réseau local sur des pc avec des ressources. Il vise les particuliers pour une utilisation normale de VNC.

Il existe d'autres clients et serveurs VNC, qui peuvent avoir l'avantage d'être moins gourmand en ressource processeur et réseau.

Pour ceux qui veulent utiliser VNC en connexion inversée pour contrôler un ordinateur à distance à travers un NAT, qui est beaucoup plus simple à mettre en place pour la personne à dépanner, et ne nécessite que des modifications du pare-feu de la part de celui qui souhaite accéder à la machine (client) il y a une très bonne application graphique, qui fait client et serveur : Gitso. x11vnc gère aussi les connexions inversées mais en ligne de commande. La commande à utiliser est :
x11vnc -connect VOTRE.ADRESSE.IP

Autoriser la connexion distante locale

Serveur sous Unity et Xfce

Sur le serveur il est nécessaire de donner le contrôle de la machine au client qui tentera de se connecter à celui-ci. Pour cela faites une recherche dans le tableau de bord Unity avec les mots clés Partage de Bureau, ou via la commande :

vino-preferences

Dans la fenêtre qui apparaît se présentent quatre cases à cocher. La première case, Autoriser d'autres utilisateurs à voir votre bureau, active ou désactive le serveur VNC de cette machine, et limite le contrôle à distance à la vision du bureau.

La seconde case,Autoriser d'autres utilisateurs à contrôler votre bureau, active quant à elle le contrôle de la machine. Elle doit être cochée si vous souhaitez prendre le contrôle de cette machine.

La troisième case : Chaque accès à cet ordinateur doit être confirmé, vous demande confirmation, est importante pour le respect de la vie privée des utilisateurs. En effet, lorsque cette case n'est pas cochée, vous pouvez prendre le contrôle de la machine distante sans que l'utilisateur en soit informé, et donc voir et contrôler son bureau à son insu.

La dernière case, L'utilisateur doit saisir ce mot de passe :, apporte une sécurité supplémentaire, car il vous impose la saisie d'un mot de passe pour prendre le contrôle de la machine distante.

Vérifier que le Bureau à distance est activé dans les applications au démarrage. Sans cela, le serveur VNC par défaut, vino-server, ne se lance pas, ce qui rend toute connexion VNC impossible.

Pour tester si le serveur est bien activé, lancez dans un terminal :

/usr/lib/vino/vino-server

et connectez-vous depuis un client.

Pour lancer le serveur depuis une connexion SSH avec option de transfert X11 (ssh -C), il faut entrer dans le terminal la commande suivante :
DISPLAY=:0 /usr/lib/vino/vino-server

avant de se connecter depuis un client.

S'il n'est pas activé, ajouter la commande précédente aux applications au démarrage.

Pour Ubuntu MATE depuis la version 18.04 LTS, le partage de bureau a disparu des menus et la commande vino-preferences n'existe plus.

Une fois vino installé, il faut passer par l'éditeur dconf : les options de partage de bureau se trouvent à la clé /org/gnome/desktop/remote-access/

Ce sont les mêmes options que celles des Préférences de partage de bureau… mais en anglais !

Le mot de passe doit être codé en base64, ce qui peut-être réalisé en ligne de commande de façon à ce qu'il soit inscrit codé dans la clé dconf :

gsettings set org.gnome.Vino vnc-password $(echo -n "MonMotDePasse"|base64)

Serveur sous KDE

Rendez-vous sur la machine à contrôler à distance, et effectuez les manipulations suivantes. La configuration du serveur VNC s'effectue grâce à un petit utilitaire graphique que vous devez installer krfb. Cliquez sur menu K → Internet → Krfb (Partage de bureau). Voici ce que vous verrez :

Cette première fenêtre permet de créer des invitations temporaires, ainsi si vous avez un problème pour configurer votre distribution vous pouvez donner un accès temporaire à une personne qui vous aidera a régler votre problème. Le premier bouton (Nouvelle invitation personnelle…) vous permet de créer cette invitation. Le deuxième bouton (Nouvelle invitation par courrier électronique…) permet d'envoyer simplement toutes les informations nécessaires pour se connecter par courriel. Ainsi vous n'aurez pas à chercher le bon mot de passe, l'adresse IP ou le port à utiliser.

La partie intéressante se trouve dans la configuration de krfb dans le menu Configuration → Configurer Partage de Bureau… :

Les choix faits dans cette section ouvrent une porte vers votre ordinateur. Toute modification doit être mûrement réfléchie et faite en connaissance de cause.

Comme vous le voyez dans cette configuration cette machine est accessible de manière permanente par tout utilisateur connaissant le mot de passe. Celui-ci doit donc être particulièrement sûr. Un bon mot de passe contient au minimum 7 caractères alphanumérique avec des majuscules, minuscules, un ou plusieurs chiffres et au moins un caractères non alphanumérique, comme un signe de ponctuation.

Le fait d'autoriser les connexions non invitées autorise une personne à se connecter sans qu'elle vous ait, au préalable, demandé son autorisation. Mais nous verrons plus tard que ceci n'est pas forcément gênant.

La case décochée ici (Confirmer les connexions non invitées avant acceptation), si elle est décochée, peut poser un problème. En effet, jusqu'à présent, si une personne essayait de prendre le contrôle de votre ordinateur, votre autorisation était sollicitée. Une fois cette case décochée, cette demande ne vous est plus faite. Donc si vous n'êtes pas devant votre ordinateur la personne aura tout loisir d'y faire ce qu'elle veut. Cette option est néanmoins utile si vous souhaitez vous même prendre le contrôle de votre ordinateur vu que dans ce cas vous ne serez pas devant votre écran pour accepter la connexion. Ceci, encore une fois, exige un mot de passe sécurisé.

La case Autoriser les connexions non invitées sert à définir si les personnes se connectant de manière non invitée sont simples

Dans Réseau vous pouvez modifier le port que votre serveur VNC va écouter en attendant d'éventuelles connexions.

Configuration du pare-feu Ubuntu

Il vous faut ensuite activer le pare-feu, et ouvrir le port 5900. Ceci est la dernière étape indispensable pour ne pas faire face à un message du type « host your_host is unreachable !! ».

Le pare-feu ufw est installé par défaut sur Ubuntu. Vous pouvez l'activer et ouvrir le port adéquat en entrant dans un terminal les commandes suivantes :

sudo ufw enable
sudo ufw allow 5900

On peut aussi passer par Gufw en ajoutant une règle dans Politique du trafic entrant.

Le client sous Unity et Xfce

Le client est donc l'ordinateur qui souhaite se connecter au serveur distant (la personne à dépanner par exemple). Pour cette partie reportez-vous au la documentation qui concerne les applications clientes pour bureau à distance.

Un dysfonctionnement_du_pave_numerique a été constaté sous Trusty, voir ici.

Le client sous KDE pour Kubuntu

Une fois la machine distante configurée, vous pouvez en prendre le contrôle en lançant le client VNC de KDE : krdc. Cliquez sur menu K → Internet → Krdc (Connexion à un bureau distant).

Il ne vous reste plus alors qu'à taper l'adresse IP de la machine suivie du numéro d'écran (généralement, zéro) ou du port à utiliser. Exemple : vnc:/186.165.167.12:0 ou vnc:/186.165.167.12:5900.

Vous pouvez remplacer l'adresse IP par le nom d'hôte si la machine en est pourvue.

Dans ce cas on utilise le protocole VNC, on peut également utiliser le protocole RDP.
Si l'écran sur lequel on se connecte en VNC a une résolution supérieure un problème se produit : la barre de défilement se met à descendre tout en bas quand on clique sur la barre de défilement sans possibilité de remonter à première vue (pas de possibilité de défilement avec la molette, normal sinon comment l'utiliser aussi avec vnc ?).
Néanmoins pour la faire remonter il suffit de cliquer sur le 3ème bouton de la souris ou à défaut sur le bouton droite et gauche en même temps.

Clients sous Windows

Il existe des logiciels VNC libres utilisables sous Windows :

Logiciel propriétaire VNC:

Avec WindowsXP professionnel vous avez aussi par défaut un logiciel pour vous connecter "Terminal Serveur" (mais il faudra installer le paquet pour ubuntu - Grdesktop).

Connexion hors de son réseau local

Si on souhaite contrôler une machine hors de son réseau local, il est fortement conseillé de créer un tunnel SSH afin de chiffrer les données.
Sous Hardy, deux remarques:
  1. Le paquet fail2ban pour protéger openssh-server des attaques par force brute ne fonctionne pas. Pour un serveur perso, construire des règles de limit iptables pour empêcher trop de connexions d'une même IP pour une durée donnée.
  2. Le tunnel SSH doit être lancé sous le nom de l'utilisateur de la session à contrôler. Sinon, VNC ne va pas se connecter via le tunnel. Il semble que de la sécurité ait été ajoutée empêchant la connexion de VNC sur la socket du tunnel SSH d'un autre utilisateur. (Ce fut autrefois possible).

Serveur

La machine a contrôler s'appelle le serveur.

  • Installez le paquet fail2ban, qui sert à protéger des attaques par force brute.
  • Configurez le pare-feu afin d'accepter les connexions SSH entrantes (port 22). Si vous utilisez un routeur, il faudra également que les connexions soient acceptées et routées vers la bonne machine.
  • Dans le fichier /etc/ssh/sshd_config, ajoutez la ligne GatewayPorts sur yes (n'oubliez pas de décommenter la ligne ;))
  • Dès lors que la liaison VNC va être encapsulée dans le tunnel SSH, il n'est pas nécessaire de laisser le port 5900 ouvert.
  • Autorisez le bureau à distance, et cocher les autorisations voulues.
  • Si l'adresse IP attribuée par votre FAI n'est pas fixe, vous devriez vous intéresser aux services offerts par DynDNS (payant) ou FreeDNS (gratuit).

Client

La machine qui contrôle s'appelle la machine cliente.

Prise en main depuis une machine sous Linux

Ouvrez deux sessions de terminal (ou utilisez screen) :

  • 1er terminal (à laisser ouvert le temps de la session VNC) :
    ssh -L 5901:localhost:5900 -XC <user>@<machine_a_contrôler_ip_ou_nom_domaine>

Sans entrer dans le détail '-L' permet à SSH de rediriger le port local 5901 vers le port distant 5900, '-X' d'autoriser le transfert du serveur X de la machine distante (en gros son bureau) et '-C' de compresser les données transmises pour économiser la bande passante.

  • 2e terminal, utilisation du logiciel vncviewer :
    vncviewer localhost:1

    (vncviewer ajoute automatiquement 5900 au numéro de port indiqué, ici 1)

OU

  • 2e terminal, utilisation du logiciel de vinagre :
    vinagre localhost:5901

vncviewer ou vinagre se connecte alors via le port 5901 de la machine locale qui se trouve être redirigé par SSH vers le port 5900 de la machine distante… et le tour est joué.

Remarque : on peut aussi passer par les interfaces graphiques déjà disponibles (Terminal Server Client pour Gnome, Krdc pour KDE), ce qui évite d'ouvrir le deuxième terminal…
Prise en main depuis une machine sous Windows

Voir la page SSH VNC.

  • Télécharger vncviewer ou UltraVNC.
  • Connectez-vous à l'ip 127.0.0.1, vous voilà connecté sur votre machine Ubuntu en ssh, sécurisé donc!
Permettre la prise de contrôle à distance d'une machine présente un risque en terme de sécurité si l'on ne met pas en place une politique de connexion sécurisée. Vous devriez contrôler la connexion au serveur VNC en installant une connexion vpn et/ou un tunnel ssh (+ fail2ban), voire en configurant un pare-feu (dans le cas d'une utilisation locale et en maitrisant toute la configuration et les machines du réseau à 100%).

Par défaut, VNC n'est pas un protocole sécurisé. Alors que les mots de passe ne sont pas envoyés en texte clair (comme dans le telnet), la force brute de craquage pourrait s'avérer fructueuse si les deux clés de chiffrement et mot de passe codés sont surveillés à partir d'un réseau. Pour cette raison, il est recommandé qu'un mot de passe d'au moins 8 caractères soit utilisé.

Toutefois, VNC peut être mis dans un tunnel sur une connexion SSH ou VPN ce qui pourrait ajouter une couche de sécurité supplémentaire avec un chiffrement plus robuste. Les Clients SSH sont disponibles pour toutes les principales plates-formes, les tunnels SSH peuvent être créés à partir de clients UNIX (y compris Mac OS X), les clients Windows, Mac OS Classic clients (System 7 et +) - et bien d'autres.

  • UltraVNC s'appuie sur l'utilisation d'un plugin open-source de chiffrement qui chiffre l'ensemble de la session VNC notamment l'authentification de mot de passe et transfert de données. Il permet également l'authentification par NTLM et des comptes d'utilisateurs Active Directory.
  • RealVNC permet de chiffrer les connexions dans son package commercial.
  • Workspot publié des correctifs de chiffrement AES pour VNC.

Bien que certaines personnes croient que VNC peut facilement être utilisé pour casser un système, généralement un utilisateur doit activer explicitement l'accès à distance pour les ports utilisés par VNC afin d'être piraté. En d'autres termes, un système exécutant VNC sur un réseau ne peut être accessible depuis l'extérieur de ce réseau, sauf si l'utilisateur spécifie le contraire (comme dans les paramètres de configuration du routeur) - ou qu'une autre machine du réseau puisse servir de relais au piratage de la machine vnc (attaque utilisée par Kevin Mitnick).

Vous pouvez aussi songer à IPsec.

Vous pouvez également suivre la configuration suivante afin d'en faire un serveur multi-poste sécurisé.

Pour l'installation et la configuration de vnc4server en tant que serveur de sessions distantes :

  • Changer les droits du fichier xinitrc qui se trouve dans /etc/X11/xinit :
    sudo chmod 755 /etc/X11/xinit/xinitr 

* installez le paquet vnc4server

Effectuer les modifications suivantes dans le fichier xstartup de chaque utilisateur pour lequel on souhaite une session distante indépendante soit ~/.vnc/xstartup :

- décommenter les lignes - unset SESSION_MANAGER et exec /etc/X11/xinit/xinitrc - ajouter la ligne - unset DBUS_SESSION_BUS_ADDRESS après la ligne unset SESSION_MANAGER

Après ces modifications voir fonctionnement classique (lancement du serveur et connexion à la session créée). Ne pas s'inquiéter si les menus mettent un peu de temps à apparaître…

NB : L'erreur error opening security policy file /etc/X11/xserver/SecurityPolicy n'est pas bloquante…

La touche F8 de votre clavier permet de contrôler VNC avec un menu contextuel qui apparaît sur frappe de la touche. Elle est très pratique car elle vous permet de quitter le mode plein écran par exemple.

Dysfonctionnement du pavé numérique du clavier sur la machine hôte (le serveur)

Après avoir contrôlé une machine à distance, il peut arriver que le pavé numérique du clavier change de fonctionnement. En effet au lieu des chiffres ce sont maintenant les mouvements de la souris qui sont contrôlés. Si cela vous arrive, pas de panique !

Il suffit de réactiver le pavé numérique en allant dans le menu : Paramètres Système → Accès Universel → Pointage et clic de la souris. Puis dans le champs Touches de la souris décocher la case « contrôle du pointeur à l'aide du pavé numérique ». S'il est désactivé, activez-le et re-désactivez-le.

Ainsi votre pavé numérique retrouvera son fonctionnement habituel.

Autre possibilité : Ctrl + Maj + VerrNum active/désactive l'activation des touches de souris
  • vnc.txt
  • Dernière modification: Le 11/09/2022, 12:09
  • par moths-art