samedi 4 mai 2013

Linux, Debian, Wheezy, chiffrer $HOME avec eCryptfs, pour confidentialiser mes données et pour mes sauvegardes locales / Clouds

Bonjour :-)

Objectifs


1-> Chiffrer mon repertoire personnel pour confidentialiser mes données
2-> Avoir des sauvegardes de mon rep perso, elles aussi chiffrées
3-> Pouvoir mettre mes données chiffrées sur les "clouds" du net

NB : vous êtes seul responsable des dégâts que vous causeriez à votre sytème en suivant ce tutoriel, sauvegardez vos données ...





Pourquoi eCryptfs ?


Pourquoi s'embêter à chiffrer son $HOME avec eCryptfs ? alors que l'on peut utiliser LUKS pour créer une partition chiffrée puis créer un groupe de volume sur cette partition chiffrée et enfin créer les volumes logiques /usr, /var, swap et /home dans ce groupe de volume et basta !

La racine du système étant à part et non chiffrée.


Le disque disque dur serait illisible pour ses parties sensibles pour quiconque ne possédant pas le mot de passe de la partition chiffrée ...


Oui mais voilà, je veux pouvoir avoir les sauvegardes de mon
$HOME chiffrées, d'une part, et d'autre part je veux pouvoir utiliser les "clouds" du net en toute sécurité en y déposant des données chiffrées ...

Ces deux voeux ne sont pas exhaussables avec LUKS ... d'où l'intérêt d'eCryptfs !

C'est pourquoi je n'ai pas chiffré mon /home à l'installation, j'ai décidé de le faire plus tard

j'avais déjà réalisée cette opération de chiffrement de mon $HOME sur Gnu / Linux Debian Squeeze à l'aide de cet excellent guide mais j'ai trouvé cet article d'un responsable du développement d'eCryptfs qui semble singulièrement simplifier le travail ...


Si vous voulez aller vite, ne vous fatiguez pas à lire la suite, suivez simplement l'article de Dustin Kirkland, et puis c'est tout : vous obtiendrez un rep perso chiffré et des noms de fichiers eux même chiffrés. Mais le fait que les noms de fichiers soient eux-même chiffrés vous interdira de déposer ces fichiers sur un cloud du net ( vous pouvez, mais pour s'y retrouver dans les noms de fichiers ... )

Surtout ouvrez une session avec cet utilisateur AVANT de redémarrer votre sytème.


Pour ceux qui veulent un peu mieux comprendre eCryptfs, et pouvoir avoir des noms de fichiers non chiffrés dans l'objectif de pouvoir les mettre sur un cloud du net, lire la suite ...

Dans cet article de Dustin Kirkland on découvre l'utilitaire ( un script bash )


# ecryptfs-migrate-home --help

Usage:


/usr/bin/ecryptfs-migrate-home -u USER


 -u,--user       Migrate USER's home directory to an encrypted home directory


WARNING: Make a complete backup copy of the non-encrypted data to

another system or external media. This script is dangerous and, in
case of an error, could result in data lost, or lock you out of your
system!

This program must be executed by root.


Allez, je le fais ! Préparation


Il faut tout d'abord installer eCryptfs et rsync

# aptitude update && aptitude upgrade
# aptitude install ecryptfs-utils rsync

Ceci étant fait, comme je suis "légèrement" méfiant, j'ai créé un nouvel utilisateur user-1 pour tester cet utilitaire:


# adduser user-1
Ajout de l'utilisateur « user-1 » ...
Ajout du nouveau groupe « user-1 » (1002) ...
Ajout du nouvel utilisateur « user-1 » (1002) avec le groupe « user-1 » ...
Création du répertoire personnel « /home/user-1 »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur user-1
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
Nom complet []:
N° de bureau []:
Téléphone professionnel []:
Téléphone personnel []:
Autre []:
Cette information est-elle correcte ? [O/n]


# groups user-1
user-1 : user-1

Comme je veux que cet utilisateur ait les mêmes caractéristiques que moi :

# groups seb
seb : seb adm cdrom floppy audio dip video plugdev netdev scanner bluetooth

je fait ceci pour aller plus vite :

# usermod -a -G $(groups seb | cut -d' ' -f4- | sed 's/ /,/g') user-1

on vérifie :

# groups user-1
user-1 : user-1 adm cdrom floppy audio dip video plugdev netdev scanner bluetooth

Voilà, user-1 me ressemble pas mal ! je le rajoute aussi dans /etc/sudoers avec la commande

# visudo

Et je lui donne les même permissions que mon utilisateur ordinaire.

Ensuite je m'y connecte en session graphique ( X11 ) et je l'utilise un peu ... j'y met des données ...




Puis j'ai fermé la session de cette utilisateur et j'ai ouvert une session root sur mon compte ordinaire dans le but de tenter cette migration


Allez, je le fais ! Action !

Pour obtenir des noms de fichiers non chiffrés, vous devez modifier le script /usr/bin/ecryptfs-migrate-home et changer la ligne 148 ( date : 2013-04 )

# cat -n /usr/bin/ecryptfs-migrate-home | grep 'ecryptfs-setup-private -u'

   148 if ! ecryptfs-setup-private -u "$USER_NAME" -b $ECRYPTFS_SETUP_PRIVATE_ARGS; then


Faire d'abord une copie :

# cp /usr/bin/ecryptfs-migrate-home /usr/bin/ecryptfs-migrate-home.bak

Puis avec un éditeur de votre choix, rajoutez l'option -n ( --no-fnek ) pour la commande ecryptfs-setup-private dont ce sert ce script :

148 if ! ecryptfs-setup-private -u "$USER_NAME" -n -b $ECRYPTFS_SETUP_PRIVATE_ARGS; then

Voilà : vos nom de fichier ne seront pas chiffrés ...

Allez, assez blablaté : ACTION : on chiffre le $HOME de user-1:

# ecryptfs-migrate-home -u user-1

Le script demande alors le mot de passe de user-1 pour pouvoir chiffrer la "passphrase" de montage du système de fichier eCryptfs, et la déchiffrer au moment du login de user-1 pour pouvoir "monter" le répertoire /home/.ecryptfs/user-1/.Private . C'est PAM qui permet ça, les fichiers de /etc/pam.d concernés :


# echo ; echo ; find -L /etc/pam.d/ \! -type d -exec grep -Ei 'ecryptfs' '{}' \; -print -exec echo -e '\n\n' \;

session optional pam_ecryptfs.so unwrap

/etc/pam.d/common-session

password optional pam_ecryptfs.so 

/etc/pam.d/common-password

auth optional pam_ecryptfs.so unwrap

/etc/pam.d/common-auth

session optional pam_ecryptfs.so unwrap

/etc/pam.d/common-session-noninteractive

À la fin du chiffrage de /home/user-1 et donc du script ecryptfs-migrate-home, on lit l'important message suivant :

========================================================================
Some Important Notes!

 1. The file encryption appears to have completed successfully, however,
    user-1 MUST LOGIN IMMEDIATELY, _BEFORE_THE_NEXT_REBOOT_,
    TO COMPLETE THE MIGRATION!!!

 2. If user-1 can log in and read and write their files, then the migration is complete,
    and you should remove /home/user-1.cwD4XjX3.
    Otherwise, restore /home/user-1.cwD4XjX3 back to /home/user-1.

 3. user-1 should also run 'ecryptfs-unwrap-passphrase' and record
    their randomly generated mount passphrase as soon as possible.

 4. To ensure the integrity of all encrypted data on this system, you
    should also encrypted swap space with 'ecryptfs-setup-swap'.
========================================================================

Suite à une erreur de manip de ma part, le nom de user-1 devient à partir de maintenant essai_crypt , désolé, mais ce n'est pas grave !

On doit donc impérativement ouvrir une session avec essai_crypt AVANT tout redémarrage de la machine

Ok ! juste avant de le faire, j'ai été regarder le contenu de /home/essai_crypt :



Comme on peut le voir le contenu de /home/essai_crypt à singulièrement changé !

1->  /home/essai_crypt n'est plus accessible à personne sauf à essai_crypt et root bien sûr et il est en lecture seule :

      # dr-x --- --- /home/essai_crypt

2-> tous les fichiers qui se trouvaient dans /home/essai_crypt ont disparus ! mdr :-) En fait les fichiers / rep se trouvent maintenant dans :
/home/.ecryptfs/essai_crypt/.Private 

sous forme chiffrés, comme on va le voir.


Mais maintenant que ma curiosité est satisfaite, j'obéis aux injonctions du script : je dois ouvrir une session avec essai_crypt et si je peux lire et écrire des fichiers, c'est que tout va bien,et normalement on peut supprimer le répertoire 

/home/essai_crypt.E59dZhuk qui contient une sauvegarde de l'ancien /home/essai_crypt, mais ce n'est pas urgent ! prudence ...



Ouf ! tout est là ... :-)

J'ouvre donc une session avec essai_crypt :



On peut constater que tout va bien, on peut créer, écrire et lire des fichiers ...




$ mount | grep -i ecryptfs

/home/essai_crypt/.Private on /home/essai_crypt type ecryptfs (rw,nosuid,nodev,relatime,ecryptfs_sig=3c35d1e2e345897b,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)


On voit que le système de fichier eCrypfs /home/.ecryptfs/essai_crypt/.Private a été monté sur /home/essai_crypt

Reportez à la doc d'eCryptfs pour plus d'explications sur

- ecryptfs_sig=3c35d1e2e345897b

- ecryptfs_cipher=aes


- ecryptfs_key_bytes=16


- ecryptfs_unlink_sigs


sig = signature
cipher = algorithme de chiffrement : aes, clé de 16 octets, unlink signatures

Le contenu de /home/.ecryptfs/essai_crypt/.ecryptfs, le contenu des fichiers et le déchiffrement de la passphrase de montage du système de fichier eCryptfs de /home/.ecryptfs/essai_crypt/.Private :




Ci dessous, on visualise le contenu de /home/.ecryptfs/essai_crypt/.Private qui contient les données chiffrées.




Ici on visualise uniquement les noms des fichiers et leur permission ( c'est le même rép que celui en clair plus haut ( /home/essai_crypt en clair ) , avec le fichier fichier.txt  )

Les noms de fichiers sont bien en clair comme souhaité ...


Et le contenu des 10 dernières lignes de fichier.txt :



On n' y comprends pas grand chose, hein ! c'est le but. Mes sauvegardes sur disque externe et mes fichiers sur clouds auront la même allure ! Mais il suffira que je copie un fichier du cloud sur /home/.ecryptfs/essai_crypt/.Private pour pouvoir en lire très simplement le contenu en clair dans /home/essai_crypt/

# cat /home/essai_crypt/fichier.txt




Maintenant on peut fermer la session de essai_crypt et redémarrer le système pour vérifier que l'on peut ouvrir une session avec essai_crypt et voir les fichiers en clair dans /home/essai_crypt et les fichiers chiffrés dans /home/.ecryptfs/essai_crypt/.Private

# shutdown -r now


Dés que vous êtes sûr de bien avoir toutes vos données, vous pouvez tranquillement supprimer /home/essai_crypt.E59dZhuk ( c'est bien sûr un nom de rep différent chez vous )

# /bin/rm -fr /home/essai_crypt.E59dZhuk

Bon ! Tout ceci fonctionne très bien sur ma Wheezy, si vous avez un système de sauvegarde automatisé de vos données, vous devez faire un choix : soit vous sauvegardez les données en clair, soit vous sauvegardez les données chiffrées ( c'est mon choix, bien sûr )

N'oubliez pas de remettre en place l'original du script /usr/bin/ecryptfs-migrate-home ( sauvegardez la version modifiée avec un nom explicite, ça vous évitera de refaire cette manip au cas où )

Maintenant, vous pouvez déposer les fichiers se trouvant dans :


/home/.ecryptfs/essai_crypt/.Private/

sur des clouds quelconques : ils sont illisibles pour quiconque ... :-)


J'ai fait un petit article là dessus :

Linux, Debian, Wheezy, mettre données chiffrées / cryptées sur cloud Dropbox

Aucun commentaire:

Enregistrer un commentaire