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.
Pré-requis
- Disposer des droits d'administration.
- Disposer d'une connexion à Internet configurée et activée.
Installation
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.
Utilisation
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.
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.
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.
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.
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… :
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.
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.
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
- 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.
- 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.
- 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.
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é.
Prise en main depuis une machine sous Windows
Voir la page SSH VNC.
- Connectez-vous à l'ip 127.0.0.1, vous voilà connecté sur votre machine Ubuntu en ssh, sécurisé donc!
Sécurité
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.
Serveur multiposte
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…
VNC en plein écran
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.
Problèmes connus
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.
Liens externes
- Discussion VNC et prise de contrôle a distance
et surtout n'oubliez pas d'accepter les invitations reçues… et attendues
Contributeurs : L'Africain.