Stocker des fichiers cryptés sur un serveur distant grâce à encfs et sshfs
Par jp.fox le mardi 11 novembre 2008, 15:55
Ubuntu
::
Lien permanent
J'ai découvert récemment le service Dropbox qui permet de synchroniser des fichiers entre plusieurs machines. Mais mon goût de la liberté me pousse à chaque fois à fuir ce genre de services commerciaux, bien que gratuits, qui ne me garantissent pas la sécurité de mes données ni le respect de ma vie privée.
J'ai donc cherché une solution pour pouvoir stocker des données sur un serveur distant sur lequel j'ai un accès ssh afin de pouvoir y accéder depuis mes différentes machines (y compris depuis le boulot). En parcourant le net et notamment le site doc.ubuntu-fr.org j'ai réalisé que la combinaison de deux technologies basées sur Fuse répondait parfaitement à mon attente.
Le principe
On monte tout d'abord un dossier du serveur distant dans un dossier local grâce à sshfs. De cette manière, tout ce que l'on écrit dans ce dossier se trouve stocké sur le serveur.
On monte ensuite un système d'encryptage de ce dossier dans un nouveau dossier. Là, tout ce qui sera écrit dans ce nouveau dossier sera crypté par le système encfs puis stocké sur le serveur au travers de sshfs.
Si on empile les couches utilisées avec les noms de dossier utilisés dans l'exemple ci-après, on obtient ceci :
machine locale : /home/$USER/SecuredBox/
encfs
machine locale : /home/$USER/.remotesshfs/.cryptedfolder/
sshfs
serveurDistant.fr : /home/loginSurServeurDistant/.cryptedfolder/
En résumé, tout ce qui sera écrit en local dans le dossier /home/$USER/SecuredBox/ sera en réalité stocké de manière cryptée dans le dossier /home/loginSurServeurDistant/.cryptedfolder/ de la machine distante.
Installation
Les paquets nécessaires
On installe tout d'abord les paquets sshfs, encfs, fuse-utils
sudo apt-get install sshfs encfs fuse-utils
Configuration de Fuse
On active fuse pour les prochains démarrage
sudo sh -c "echo fuse >> /etc/modules"
On charge le module fuse pour cette session, cela évite de rebooter.
sudo modprobe fuse
On ajoute son compte au groupe fuse
sudo adduser $(whoami) fuse
On réouvre une session pour prendre en compte l'ajout au groupe
su - $(whoami)
Création du système encfs over sshfs
On crée un dossier local qui va servir de point de montage au dossier distant
mkdir /home/$USER/.remotesshfs
On monte le dossier distant par sshfs
sshfs loginSurServeurDistant@serveurDistant.fr: /home/$USER/.remotesshfs -o uid=$UID,gid=$(id -g)
Désormais .remotesshfs correspond au dossier home de l'utilisateur sur le serveur distant
On crée un dossier distant qui va contenir les fichiers cryptés
mkdir /home/$USER/.remotesshfs/.cryptedfolder
On crée un dossier local qui va servir de point de montage pour la version claire des fichiers
mkdir /home/$USER/SecuredBox
On monte le système de cryptage
encfs /home/$USER/.remotesshfs/.cryptedfolder /home/$USER/SecuredBox -- -o uid=$UID,gid=$(id -g)
On choisit p pour le mode parano de base et on saisie le mot de passe de cryptage. Attention, ce mot de passe sera nécessaire pour accéder de nouveau aux données cryptées.
Voilà, tout ce qui va être mis dans le dossier /home/$USER/SecuredBox va en fait être crypté dans le dossier distant .cryptedfolder
Après utilisation, on démonte le système de cryptage
fusermount -u /home/$USER/SecuredBox
puis le système sshfs
fusermount -u /home/$USER/.remotesshfs
Utilisation courante
Depuis la même machine
Pour utiliser de nouveau le dossier SecureBox
sshfs loginSurServeurDistant@serveurDistant.fr: /home/$USER/.remotesshfs -o uid=$UID,gid=$(id -g) encfs /home/$USER/.remotesshfs/.cryptedfolder /home/$USER/SecuredBox -- -o uid=$UID,gid=$(id -g)
On ressaisie le mot de passe qui a servi au cryptage
Depuis une nouvelle machine
Il est alors nécessaire de répéter les mêmes opérations que dans la phase d'installation.
Démontage du système encfs over sshfs après utilisation du dossier /home/$USER/SecuredBox/
fusermount -u /home/$USER/SecuredBox fusermount -u /home/$USER/.remotesshfs
En cas de soucis, consultez la documentation plutôt claire de sshfs et de encfs.
Le système ssh et ses différentes utilisations m'impressionnera toujours autant !




Pareil, j'etais pas mal decu par dropbox : super integration au systeme, mais mes donnees en clair sur leurs serveurs bof...
Je teste https://spideroak.com/
dans le meme genre mais moins bien integre.
apres c'est bien aussi de gerer le service de bout en bout mais ca demande un dedie...
Super ce tuto.
Ca serait encore plus super si tu le mettais sur doc.ubuntu-fr.org !
Merci d'avance pour la communauté !
Attention, Dropbox est tout de même loin d'un fuse. Si vous préférez c'est un répertoire local avec un démon rsync permanent, ou mieux : avec une synchronisation de type subversion ou webdav avec historique.
Les fichiers sont en local, tout le temps. Ca a une grosse influence sur ta capacité à exploiter de gros fichiers, des grands nombres de fichiers, ou en mode déconnecté.
Le second problème c'est que fonctionner avec un disque crypté sur le côté client (ce qui est tout à fait intelligent) implique que les fichiers ne fonctionneront plus avec des synchronisations intelligentes : tu devras réuploader tout le fichier à chaque modification. Et encore, ça c'est si tu acceptes que les métadonnées soient en clair (noms des fichiers ou au moins architecture des fichiers) ; si tu veux vraiment tout crypter tu te retrouveras avec un gros blob binaire qui représente ton disque crypté et là c'est carrément inutilisable à distance.
Le plus simple reste probablement de faire ce que fait dropbox : Une copie locale, transmission des données à un prestataire de confiance.
La transmission utilise des données brutes en clair, la sécurité étant basée sur SSL. La sécurité des données locales et distantes sont basées sur le cryptage des disques locaux aux deux bouts.
La seule contrainte c'est d'avoir un prestataire distant qui est un vrai prestataire de confiance, parce que lui pourra relire/modifier tes données.
Vous noterez d'ailleurs que Dropbo peut très bien crypter ses disques distants sans vous le dire, donc c'est peut être ce qu'ils font. Charge à vous de sécuriser votre copie locale en cryptant votre propre disque.
Maintenant le jour où quelqu'un me propose quelque chose d'équivalent à Dropbox et de libre, j'installe ça sur un serveur privé avec plaisir. Mais pour l'instant les montages qu'on me propose n'ont pas d'historique, ou fonctionnent en "tout distant" sans copie locale, ou ont une synchronisation sans delta/diff/patch, ou ... Bref, rien d'aussi complet.
Je me permet de profiter de ton article pour vous faire découvrir Xsshfs : http://xsshfs.zici.fr/
Petite interface graphique pour sshfs...
David
Un petit commentaire sur le vocabulaire employé. On ne parle pas d'"encryptage", de "crypté", mais bien de chiffrement.
Chiffrer : rendre un message "clair", non "clair" à l'aide d'une clé de chiffrement.
Déchiffrer : rendre un message non "clair", "clair" à l'aide d'une clé de déchiffrement.
Décrypter : rendre un message non "clair", "clair" sans utiliser une clé de déchiffrement, en l'attaquant en d'autres termes.
Crypter n'existe pas, c'est un abus de langage (beaucoup) trop courant.
Cela n'enlève rien à la qualité de l'article. C'est une super idée d'avoir développer ce sujet.
Ceci dit, j'ai aussi tester avec succès une autre solution intermédiaire (entre celle de l'article et Dropbox). Utiliser encfs avec un dossier de Dropbox :
encfs ~/Dropbox/CryptedFolder ~/Coffre
Très sympa Xsshfs http://xsshfs.zici.fr/
Tiens, du coup moi je viens de vraiment découvrir dropbox via ton billet, j'étais toujours passer à côté. Excellent article encore une fois. Effectivement il manque cette dimension d'historique avec ta solution. Je conserve précieusement ton article, car comme beaucoup je pense que maitriser ces données est bien plus important que l'outil utilisé. Dropbox sera donc dans un premier temps une découverte avant de migrer vers une solution perso
Merci.
Merci pour ce billet très intéressant!
Ce sujet était justement sur ma liste des ToDo
J'aurai d'ailleurs à le faire sur d'autres distributions qu'Ubuntu, mais tout est bien dans ce post.
c'est un très bon tutoriel que tu nous a fait là jp.fox, me reste plus qu'à suivre ce qui est écrit. Je commence à comprendre pourquoi tu rajoutais de l'espace disque sur le serveur vendredi dernier
Merci de ce post repris sur planet ubuntu-fr qui m'a permis de découvrir le service dropbox.
Pour la confidentialité des données je l'utilise avec truecrypt.
Contrairement à mes craintes le container truecrypt stocké en local n'est pas re-uploadé complètement en cas de modification. J'ai donc uploadé un container truecrypt de 1giga qui me permet de partager entre plusieurs machines des données importantes.
Merci stef pour l'info