{"id":143,"date":"2011-01-04T16:06:20","date_gmt":"2011-01-04T15:06:20","guid":{"rendered":"http:\/\/crudelis.fr\/blog\/?p=143"},"modified":"2011-01-04T16:06:20","modified_gmt":"2011-01-04T15:06:20","slug":"synchronisation-rsync-sur-dossier-chiffre","status":"publish","type":"post","link":"https:\/\/crudelis.fr\/site\/sblog\/2011\/01\/synchronisation-rsync-sur-dossier-chiffre\/","title":{"rendered":"Synchronisation rsync sur dossier chiffr\u00e9"},"content":{"rendered":"<p>Apr\u00e8s le dossier de <a href=\"https:\/\/crudelis.fr\/sblog\/2011\/01\/creer-un-dossier-de-partage-avec-sshfs\/\">partage sshfs<\/a> permettant de partager simplement des fichiers entre plusieurs machines.<\/p>\n<p>Je me lance maintenant dans la synchronisation rsync entre plusieurs machines via une connexion ssh et un chiffrement des donn\u00e9es.<\/p>\n<p>Nous allons exploiter rsync pour la synchronisation des donn\u00e9es, encfs pour le chiffrage des dossiers sur le serveur et ssh pour s\u00e9curiser tout nos \u00e9changes.<br \/>\n<!--more--><br \/>\nPr\u00e9-requis<br \/>\n- Avoir un serveur ssh op\u00e9rationnel, c'est lui qui h\u00e9bergera les dossiers crypt\u00e9s.<br \/>\n- Avoir rsync install\u00e9 sur le serveur et les clients.<\/p>\n<p>Afin de chiffrer les donn\u00e9es stock\u00e9es sur le serveur, nous allons installer encfs:<\/p>\n<pre>apt-get install encfs<\/pre>\n<p><em>A installer sur le serveur qui r\u00e9ceptionnera les donn\u00e9es bien \u00e9videmment<\/em><br \/>\nEncfs \u00e0 besoin des d\u00e9pendances suivante: libboost-filesystem1.42.0 libboost-serialization1.42.0 libboost-system1.42.0 librlog5.<\/p>\n<blockquote><p>** L'usage de encfs n'est pas indispensable, vous pouvez vous passer de encfs si vous ne d\u00e9sirez pas chiffrer les donn\u00e9es stock\u00e9es sur le serveur. **<\/p><\/blockquote>\n<p>Toujours sur le serveur, nous allons maintenant configurer encfs.<br \/>\nencfs utilise 2 dossiers pour travailler, un dossier dont le contenu est en permanence chiffr\u00e9. Nous l'appellerons dir_encrypt. Et un second, vide, sur lequel encfs va monter le premier en d\u00e9chiffrant son contenu, nous l'appellerons dir_clear.<\/p>\n<blockquote><p>** Il est important de comprendre que encfs ne va pas dupliquer les donn\u00e9es dans le second dossier. Il va simplement donner un acc\u00e8s d\u00e9chiffr\u00e9 aux donn\u00e9es via le second dossier. **<\/p><\/blockquote>\n<p>Pour configurer encfs, on tape cette commande:<\/p>\n<pre>encfs \/media\/HD\/Dossier_synchro\/dir_encrypt \/media\/HD\/Dossier_synchro\/dir_clear<\/pre>\n<p>encfs va demander si il doit cr\u00e9er les dossiers lui m\u00eame (si ils n'existent pas). Puis il demande le mode de configuration \u00e0 choisir.<\/p>\n<p>3 modes de configuration sont propos\u00e9s:<br \/>\n- Le mode expert (x). Pour les barbares de la cryptographie. Encfs demande de choisir chaque option en d\u00e9tail. Pour ma part je passe mon tour.<br \/>\n- Le mode parano\u00efaque (p). C'est celui que j'ai choisi, on va pas faire les choses \u00e0 moiti\u00e9.<br \/>\n- Le mode normal (defaut).<\/p>\n<p>La diff\u00e9rence entre le mode normal et le mode parano\u00efaque se joue \u00e0 quelques options qui diff\u00e8rent:<\/p>\n<p>Mode parano\u00efaque:<br \/>\nTaille de cl\u00e9 : 256 bits<br \/>\nTaille de bloc : 512 octets, y compris 8 octets d'en-t\u00eate MAC<br \/>\nL'IV des donn\u00e9es du fichier est cha\u00een\u00e9e \u00e0 l'IV du nom de fichier.<\/p>\n<p>Mode normal:<br \/>\nTaille de cl\u00e9 : 192 bits<br \/>\nTaille de bloc : 1024 octets<br \/>\nFile holes passed through to ciphertext.<\/p>\n<p>Choisissez ensuite votre mot de passe et c'est termin\u00e9 pour la configuration de encfs.<br \/>\nA pr\u00e9sent, nous pouvons avoir acc\u00e8s aux donn\u00e9es chiffr\u00e9es par la commande:<\/p>\n<pre>encfs \/media\/HD\/Dossier_synchro\/dir_encrypt \/media\/HD\/Dossier_synchro\/dir_clear<\/pre>\n<p>Les donn\u00e9es seront ainsi lisibles dans le dossier dir_clear apr\u00e8s renseignement du mot de passe.<br \/>\nPour interdire \u00e0 nouveau l'acc\u00e8s aux donn\u00e9es.<\/p>\n<pre>fusermount -u \/media\/HD\/Dossier_synchro\/dir_clear<\/pre>\n<p>Pour automatiser le d\u00e9chiffrement du dossier 'dir_encrypt', nous allons placer un script (nomm\u00e9 encfs_mount_umount.sh) dans le dossier 'Dossier_synchro':<\/p>\n<pre>#\/bin\/bash\nif [ $1 = 'm' ]\nthen\n        echo D\u00e9chiffrage du dossier de synchronisation.\n        encfs \"\/media\/HD\/Dossier_synchro\/dir_encrypt\" \"\/media\/HD\/Dossier_synchro\/dir_clear\"\nfi\nif [ $1 = 'u' ]\nthen\n        echo Fermeture du mount de encfs\n        fusermount -u \"\/media\/HD\/Dossier_synchro\/dir_clear\"\nfi<\/pre>\n<p>Nous pouvons \u00e0 pr\u00e9sent quitter le serveur et revenir \u00e0 la machine cliente.<br \/>\nLe client va devoir initialis\u00e9 la connexion ssh avec le serveur, demander l'acc\u00e8s au dossier chiffr\u00e9, ex\u00e9cuter ses synchronisations rsync et enfin demander \u00e0 encfs la fermeture du dossier chiffr\u00e9.<br \/>\nVoyons tous \u00e7a en d\u00e9tail.<\/p>\n<p>L'acc\u00e8s au dossier chiffr\u00e9 va se faire simplement de la fa\u00e7on suivante:<\/p>\n<pre>ssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh m\"<\/pre>\n<p>On ex\u00e9cute le script pr\u00e9sent sur le serveur, en lui demandant l'acc\u00e8s au dossier chiffr\u00e9 par l'argument 'm'.<\/p>\n<blockquote><p><strong>Dans certains cas, l'argument -t de ssh (qui permet d'obtenir un terminal distant dans lequel le mot de passe \u00e0 taper ne sera pas visible) provoque une erreur de montage de encfs.<br \/>\nErreur qui se traduit par: \"<span style=\"color:#b50101\">Noeud final de transport n'est pas connect\u00e9<\/span>\".<br \/>\nDans ce cas on peut remplacer l'argument -t par stty -echo qui retirera tout echo des saisies au clavier.<\/strong><\/p>\n<pre>stty -echo\nssh maniack@crudelis.fr -p 2222 \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh m\"\nstty echo<\/pre>\n<\/blockquote>\n<p>On effectue la synchronisation rsync:<\/p>\n<pre>rsync -avzhuE --progress --delete \"\/media\/DOCUMENTS\/Mes documents\/Fichiers divers\" -e 'ssh -p 2222' maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\"<\/pre>\n<p>Le dossier 'Fichier divers' va \u00eatre ainsi synchronis\u00e9 avec son double sur le serveur.<br \/>\n<em>Je posterais plus tard un article sur rsync, avec d'avantage de d\u00e9tails sur cette commande.<\/em><\/p>\n<p>Il ne nous reste plus qu'\u00e0 refermer l'acc\u00e8s au dossier chiffr\u00e9:<\/p>\n<pre>ssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh u\"<\/pre>\n<p><pre>#!\/bin\/bash\necho Appel de encfs pour d\u00e9chiffement.\nssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh m\"\necho Ex\u00e9cution de rsync pour synchronisation.\nrsync -avzhuE \u2013progress \u2013delete \"\/media\/DOCUMENTS\/Mes documents\/Fichiers divers\" -e \u2018ssh -p 2222\u2032 maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\"\necho Appel de encfs pour d\u00e9montage du volume d\u00e9chiffr\u00e9.\nssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh u\"<\/pre>\n<p>Toutefois, nous avons l\u00e0 un inconv\u00e9nient majeur, avec 3 connexions ssh successives, il va falloir retaper 3 fois le mot de passe ssh.<br \/>\nPlus grave encore, si on n'est pas pr\u00e9sent lors de la demande de mot de passe pour la derni\u00e8re connexion. On risque un timeout de ssh. D\u00e9s lors, cela signifie que dir_clear restera visible puisqu'on aura jamais demand\u00e9 la fermeture du dossier.<\/p>\n<p>Pour palier \u00e0 ce probl\u00e8me, nous allons utiliser <a href=\"http:\/\/www.delafond.org\/traducmanfr\/man\/man1\/ssh-agent.1.html\">ssh-agent<\/a>. ssh-agent va utiliser votre cl\u00e9 priv\u00e9e ssh pour valider votre identit\u00e9 lors de toute les connexions qui suivront. De fait vous ne donnez votre mot de passe qu'une seule fois, \u00e0 ssh-agent.<br \/>\nPour utiliser ssh-agent, nous allons proc\u00e9der ainsi:<\/p>\n<pre># Lancement de ssh-agent pour automatiser la connection ssh le temps du script.\nssh-agent\n# Ajout de la cl\u00e9 priv\u00e9e pour ssh-agent.\nssh-add $HOME\/.ssh\/id_dsa     #ssh-add demandera le mot de passe pour ouvrir la cl\u00e9.\n# Multiples connexions ssh au sein de votre script.\n# Suppression de la cl\u00e9 pour ssh-agent. Car nous ne souhaitons pas que ssh-agent continue \u00e0 autoriser des connexions sans mot de passe.\nssh-add -d $HOME\/.ssh\/id_dsa<\/pre>\n<p>Ainsi ssh-agent nous permet des connexions ssh sans n\u00e9cessiter le mot de passe \u00e0 plusieurs reprise, juste le temps de l'ex\u00e9cution du script.<br \/>\nCela implique toutefois l'usage d'un couple cl\u00e9 publique\/priv\u00e9e. Ce qui n'exclue pas l'usage des connexions par simple mot de passe pour ssh.<\/p>\n<pre>#!\/bin\/bash\necho Lancement de ssh-agent pour automatiser la connection ssh le temps du script.\nssh-agent &gt;&gt; \/dev\/null\necho Ajout de la cl\u00e9 pour ssh-agent.\nssh-add $HOME\/.ssh\/id_dsa\necho Appel de encfs pour d\u00e9chiffement.\nssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh m\"\necho Ex\u00e9cution de rsync pour synchronisation.\nrsync -avzhuE \u2013progress \u2013delete \"\/media\/DOCUMENTS\/Mes documents\/Fichiers divers\" -e \u2018ssh -p 2222\u2032 maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\"\necho Appel de encfs pour d\u00e9montage du volume d\u00e9chiffr\u00e9.\nssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh u\"\necho Suppression de la cl\u00e9 pour ssh-agent.\nssh-add -d $HOME\/.ssh\/id_dsa<\/pre>\n<p>Si on souhaite simplement faire des sauvegardes sur un dossier chiffr\u00e9, on peut s'arr\u00eater l\u00e0.<br \/>\nMais le but ici est de synchroniser plusieurs machines.<br \/>\nCeci implique qu'on ne veux pas simplement envoyer les donn\u00e9es sur le serveur, on veux aussi pouvoir les rapatrier sur le client.<br \/>\nOn va donc simplement inverser la commande rsync pour que les donn\u00e9es soit synchroniser depuis le serveur vers le poste client.<br \/>\nCe qui nous donne \u00e7a:<\/p>\n<pre>#\n!\/bin\/bash\n\necho \"Envoi des donn\u00e9es sur le serveur (Synchronisation ascendante): e.\"\necho \"Mise \u00e0 jour des donn\u00e9es sur le poste local (Synchronisation descendante): m.\"\necho -n \"(e\/m)?: \"\nread rep\necho Lancement de ssh-agent pour automatiser la connection ssh le temps du script.\nssh-agent &gt;&gt; \/dev\/null\necho Ajout de la cl\u00e9 pour ssh-agent.\nssh-add $HOME\/.ssh\/id_dsa\necho Appel de encfs pour d\u00e9chiffement.\nssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh m\"\necho Ex\u00e9cution de rsync pour synchronisation.\nif [ $rep = 'e' ] || [ $rep = 'E' ]\n  then\n    echo Synchronisation ascendante\n    rsync -avzhuE \u2013progress \u2013delete \"\/media\/DOCUMENTS\/Mes documents\/Fichiers divers 1\" -e \u2018ssh -p 2222\u2032 maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\"\n    rsync -avzhuE \u2013progress \u2013delete \"\/media\/DOCUMENTS\/Mes documents\/Fichiers divers 2\" -e \u2018ssh -p 2222\u2032 maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\"\n  \nelse\n    if [ $rep = 'm' ] || [ $rep = 'M' ]\n      then\n\techo Synchronisation descendante avec backup\n\trsync -avzbhuE --progress --exclude='backup_rsync' --delete --backup-dir=backup_rsync -e 'ssh -p 2222' maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\/Fichiers divers 1\" \"\/media\/DOCUMENTS\/Mes documents\"\n \trsync -avzbhuE --progress --exclude='backup_rsync' --delete --backup-dir=backup_rsync -e 'ssh -p 2222' maniack@crudelis.fr:\"\/media\/HD\/Dossier_synchro\/dir_clear\/Fichiers divers 2\" \"\/media\/DOCUMENTS\/Mes documents\"\n      else\n\techo Aucune action associ\u00e9e...\n    fi\nfi\necho Appel de encfs pour d\u00e9montage du volume d\u00e9chiffr\u00e9.\nssh maniack@crudelis.fr -p 2222 -t \"\/media\/HD\/Dossier_synchro\/encfs_mount_umount.sh u\"\necho Suppression de la cl\u00e9 pour ssh-agent.\nssh-add -d $HOME\/.ssh\/id_dsa<\/pre>\n<p>Il suffit maintenant de copier le script sur chacun des clients qui doivent profiter de la synchronisation et le tour est jou\u00e9.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s le dossier de partage sshfs permettant de partager simplement des fichiers entre plusieurs machines. Je me lance maintenant dans la synchronisation rsync entre plusieurs machines via une connexion ssh et un chiffrement des donn\u00e9es. Nous allons exploiter rsync pour la synchronisation des donn\u00e9es, encfs pour le chiffrage des dossiers sur le serveur et ssh [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[3],"tags":[13,18,32,35,36,38,40],"class_list":["post-143","post","type-post","status-publish","format-standard","hentry","category-home-server","tag-chiffrage","tag-encfs","tag-partage","tag-rsync","tag-securite","tag-ssh","tag-synchronisation"],"_links":{"self":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts\/143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/comments?post=143"}],"version-history":[{"count":0,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/posts\/143\/revisions"}],"wp:attachment":[{"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/media?parent=143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/categories?post=143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crudelis.fr\/site\/sblog\/wp-json\/wp\/v2\/tags?post=143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}