Unison sécurisé par SSH
Si vous souhaitez utiliser Unison pour recopier des données entre deux PC en utilisant le réseau internet, la méthode décrite précédemment pose deux soucis:
- Le port TCP 1050 du PC de destination doit être ouvert et accessible depuis l’internet (« NAT »),
- Les échanges entre les deux instances de Unison se feront en clair, sans cryptage.
Heureusement, Unison, contrairement à Rsync, sais utiliser le protocole SSH nativement, ce qui vous permettre de résoudre ces deux problèmes
Toute d’abord, sur le PC de destination, assurez vous qu’un serveur SSH est bine installé avec la commande:
apt-get install -y openssh-server
Pensez également à créer le même utilisateur sur les deux Pcs.
Vous devrez réaliser l’ouverture du port TCP 22 correspondant au protocole SSH sur l’internet (« PAT/NAT ») mais c’est un moindre mal puisque ce protocole exige la saisie d’un identifiant/mot de passe avant d’accepter du trafic entrant. De plus, tous les échanges sont cryptés.
Depuis le PC « source », lancez la synchronisation avec la commande où 8.0.0.0.1 est l’IP publique du routeur/pare-feu qui protège mon réseau de destination.
unison /home/ubuntu/source ssh://80.0.0.1/destination
Contacting server…
The authenticity of host ‘80.0.0.1 (80.0.0.1)’ can’t be established.
RSA key fingerprint is 4a:33:d8:9a:b4:7a:eb:2f:a2:bb:f1:d6:9c:36:fd:98.
Are you sure you want to continue connecting (yes/no)? Yes
Comme toujours, SSH demande la confirmation de la première connexion. Une copie du certificat d’échange entre les deux PC est crée sur le PC local aussi cette question ne sera posée que lors de la première connexion.
Vous devez ensuite saisir le mot de passe de l’utilisation courant sur le PC distant.
Warning: Permanently added ‘80.0.0.1’ (RSA) to the list of known hosts.
ubuntu@127.0.0.1’s password:
La connexion SHH est alors active et le processus de synchronisation se déroule normalement.
Connected [//ubuntu-laptop//home/ubuntu/destination -> //ubuntu-laptop//home/ubuntu/source]
Looking for changes
Waiting for changes from server
Reconciling changes
Nothing to do: replicas have not changed since last sync.
Il est à noter qu’aucune commande spécifique n’est à exécuter sur le serveur de destination. En effet, dès que le canal SSH est ouvert, Unison va demander le lancement du serveur sur cette machine distante. Ceci implique que le programme Unison soit exécutable par tous les utilisateurs de Unison. Ce soit ceci peux représenter une grosse faille de sécurité c’est pourquoi il est préférable d’enfermer les utilisateurs dans des environnements étanche (voir « chroot ») plus loin dans cet article.
Connexion SSH en utilisant une clé privée et une clé public
Le gros souci avec cette méthode est qu’il est obligatoire de saisir le mot de passe à chaque lancement de Unison ce qui rends à priori impossible l’automatisation des sauvegardes.
Toutefois, il est possible d’éviter l’étape d’authentification manuelle en procédant un à échange de clefs en utilisant la méthode décrite ci après (http://www.coagul.org/spip.php?page=article_imprime&id_article=168).
Sur le PC local, utilisez la commande suivante pour créer la clé privée et de la clé public :
apt-get install -y openssh-client
ssh-keygen -t dsa
Ne saisissez par de “passphrase”.
Cette commande va générer deux fichiers dans le dossier « /.ssh » :
- La clé privée nommée « id_dsa »
- La clé publique nommée « id_dsa.pub »
Ensuite, il faut exporter la clé publique sur le ou les serveurs distants à utiliser avec SSH:
ssh-copy-id -i /home/ubuntu/ssh/id_dsa.pub root@NomDuServeurSSH
Après la copie de cette clé, à chaque connexion via SSH, aucun identifiant ne sera demandée.
Chrooter SSH
Le souci, c’est qu’en ouvrant un accès SSH à un serveur distant pour que les utilisateurs puissent y sauvegarder leurs données, par défaut, les utilisateurs disposent du droit d’explorer toutes les données de l’ordinateur, y compris les fichiers des autres ordinateurs. Il s’avère que corriger ce comportement de sorte que l’utilisateur distant ne puisse que lire et écrire dans son répertoire personnel est assez complexe car cela implique de créer tout un environnement « chrootée (http://lea-linux.org/documentations/index.php/Admin-admin_env-chroot).
Un environnement « chrooté » se présente un peu comme une mini distribution linux en mode ligne de commande où seules quelques commandes seraient accessibles à l’utilisateur. Cet utilisateur n’a pas connaissance de (et ne peux interagir avec) l’environnement principal.
Cette opération est normalement assez longue et complexe mais il existe un script fort pratique qui réalise tout ce travail en une ligne de commande. Ce script « make_chroot_jail.sh » est téléchargeable depuis l’URL http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh.html. N’oubliez pas de la rendre exécutable avec la commande
chmod 700 make_chroot_jail.sh
Initialement, il est conçu pour les programmes SSH, SCP, RSYNC mais il suffit d’ajouter « /usr/bin/Unison » à la fin des lignes débutant par « APPS= » (où juste la ligne correspondant à votre version de Linux – ce script es compatible avec Debian/Ubuntu, Suse, Fedora and Redhat)
Ensuite, pour créer un environnement protégé (« chrooté ») accessible via SSH, lancez la commande suivante en tant que « root » (« username » est le nom de l’utilisateur distant)
[shell]debian:~# ./make_chroot_jail.sh Username</p>
Release: 2008-04-26</p>
Am I root?</p>
OK</p>
Checking distribution…</p>
Supported Distribution found</p>
System is running Debian Linux</p>
Checking for which…</p>
OK</p>
Checking for chroot…</p>
OK</p>
Checking for sudo…</p>
OK</p>
Checking for dirname…</p>
OK</p>
Checking for awk…</p>
OK</p>
—————————–</p>
The file /bin/chroot-shell exists.</p>
Probably it was created by this script.</p>
Are you sure you want to overwrite it?</p>
(you want to say yes for example if you are running the script for the second</p>
time when adding more than one account to the jail)</p>
(yes/no) -> yes</p>
Modifying /etc/sudoers</p>
Adding User “Username” to system</p>
Entrez le nouveau mot de passe UNIX :</p>
Retapez le nouveau mot de passe UNIX :</p>
password : le mot de passe a été mis à jour avec succès</p>
Adding User Username to jail</p>
Copying necessary library-files to jail (may take some time)</p>
Copying files from /etc/pam.d/ to jail</p>
Copying PAM-Modules to jail[/shell]Unison, SSH et Windows
L’utilisation d’un client Windows pour Unison ne pose aucune difficulté particulière. On peut le télécharger depuis l’url http://alan.petitepomme.net/unison/index.html
Par contre, en ce qui concerne l’usage du client SSH avec Unison, les choses sont un peu plus compliquées.
Tout d’abord, le client natif le plus utilisé pour se connecter en SHH est Plink que l’on peut télécharger à l’url http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html,
Toutefois, Unison cherchera à lancer un programme nommé « ssh.exe ».
Toutefois, il est possible de contourner cette contrainte en utilisant l’argument « -sshcmd=ssh.exe » pour préciser le nom du programme à utiliser.
Unison insiste pour passer à SSH un paramètre « -e » que Plink ne comprends pas.
Heureusement, on peut trouver sur le site http://www.wischik.com/lu/programmer/unison-ssh.html un petit programme ssh.exe qui filtre les entrées avant de la passer à Plink.exe
Il est possible de passer le mot de passe de connexions à l’hôte distant en utilisant l’option -sshargs=”-v -C -pw MyPassword” où MyPassword est le mot de passe de connexion SSH à l’hôte distant.
unison.exe -batch -force newer -times -sshcmd=ssh.exe -sshargs=”-pw MyPassword” “c:source” ssh://MyUsername@RemoteHostIP/source
Conclusion
Unison est un logiciel de synchronisation de dossiers. Il a l’avantage d’être multi plate-forme et portable et peut fonctionner à travers SSH RSH ou les sockets. Avec lui, vous pourrez réaliser des synchronisations entre des répertoires sous Windows, Mac et Linux.
Son interface graphique repose sur GTK, à l’instar de Gimp. Il existe en deux versions : l’une avec une interface graphique, l’autre en ligne de commande uniquement.
Ce logiciel fonctionne par profil on indique la source et la destination de synchronisation ou par options de commande
À la différence de Rsync celui-ci réalise une synchronisation bidirectionnelle.
Unison est une solution compacte et extrêmement performantes surtout s’il s’agit de recopier des données entre deux Pc distants car Unison dispose d’un arsenal d’optimisation de volumes de données à recopier.
Vous n’aurez donc plus d’excuse pour ne pas réaliser de sauvegardes!
La documentation du logiciel est assez volumineuse et on trouve de bons tutoriels en français notamment à l’URL http://wiki.mandriva.com/fr/Unison