Copier et agrandir une partition chiffrée

Introduction

Un de mes disques externes chiffrés de sauvegardes  arrivant manifestement en fin de vie, j’ai décidé de le remplacer préventivement par un autre de taille supérieure.

Mon disque chiffré ne contient qu’une partition et a été chiffré avec cryptsetup (LUKS) sans utiliser LVM ; si vous ne savez pas comment chiffrer votre partition, vous pouvez par exemple vous référer ici : http://doc.ubuntu-fr.org/cryptsetup.

Attention : Les étapes suivantes peuvent causer des pertes de données en cas d’erreur (par exemple si vous vous trompez de disque) ou de problème matériel ou logiciel ; si vous n’avez pas d’autre copie de vos données (c’est mal), faites-en une avant ; en outre, si vous ne comprenez pas une étape, demandez avant de recopier les commandes suivantes.

Copie des données

Pour copier les données de l’ancien disque (dans cet exemple, sdc) vers le nouveau disque (dans cet exemple sdd), j’ai utilisé ddrescue puisque je n’étais pas sûr de pouvoir correctement lire tous les secteurs de l’ancien disque (attention à bien démonter toutes les partitions sur les disques concernés avant de commencer).

On commence par installer ddrescue si on ne l’a pas encore :

sudo aptitude install gddrescue

Ensuite, on copie tout le disque :

sudo ddrescue -n -r1 -v /dev/sdc /dev/sdd backup.log

Si des erreurs sont survenues pendant la copie, on refait une passe en insistant un peu :

sudo ddrescue -r2 -v /dev/sdc /dev/sdd backup.log

Redimensionnement de la partition

La première étape consiste à modifier sa table des partitions :

sudo fdisk /dev/sdd
[...]
Commande (m pour l'aide): d
Partition sélectionnée 1
Commande (m pour l'aide): n
Commande d'action
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4): 1
Premier cylindre (1-38913, par défaut 1):[entrée]
Utilisation de la valeur par défaut 1
Dernier cylindre, +cylindres or +taille{K,M,G} (1-38913, par défaut 38913):[entrée]
Utilisation de la valeur par défaut 38913
Commande (m pour l'aide): w
La table de partitions a été altérée!
[...]

Maintenant que la partition prend toute la place disponible sur le nouveau disque, il faut encore redimensionner le conteneur des données chiffrées après l’avoir déverrouillé :

sudo cryptsetup luksOpen /dev/sdd1 cryptbackup
sudo cryptsetup resize cryptbackup

La dernière étape consiste à redimensionner le système de fichiers après l’avoir vérifié :

sudo e2fsck -f /dev/mapper/cryptbackup
sudo resize2fs -p /dev/mapper/cryptbackup

Plus d’informations sur le sujet

Si vous souhaitez faire la même opération mais en réduisant la partition plutôt qu’en l’agrandissant, vous pouvez vous référer à cet article sur le forum Ubuntu (en anglais). Si vous souhaitez déverrouiller votre partition chiffrée automatiquement lors de votre connexion (en utilisant votre mot de passe comme phrase de passe), vous pouvez lire mon article sur le sujet.

Déchiffrer son dossier personnel lors de l’identification avec pam-mount

Cas d’utilisation

Un ordinateur partagé avec plusieurs utilisateurs dont un (moi) souhaite chiffrer ses données. Je ne veux pas qu’il soit nécessaire d’entrer une phrase de passe au démarrage, ni utiliser eCryptfs (qui chiffre chaque fichier séparément). Le but est donc d’utiliser ma partition chiffrée LUKS (Linux Unified Key Setup) et d’utiliser mon mot de passe utilisateur comme phrase de passe pour déchiffrer puis monter cette partition (il est donc important d’utiliser un mot de passe identique à une des phrases de passe utilisée pour débloquer la clé de chiffrement).

Le chiffrement de la partition ne sera pas abordé ici, pour Ubuntu, vous pouvez par exemple vous référer ici : http://doc.ubuntu-fr.org/cryptsetup

Mise en place

Premièrement, vous aurez besoin du module PAM (Pluggable Authentication Module) pam-mount :

sudo aptitude install pam_mount

Ensuite, il vous faudra, le cas échéant, commenter la ligne qui sert à monter votre partition chiffrée dans /etc/fstab ainsi que la ligne correspondante dans /etc/crypttab pour éviter que le système tente de déchiffrer et monter cette partition au démarrage (avant l’identification).

Il faut maintenant indiquer à pam-mount quelle est la partition à monter en ajoutant la ligne suivante au fichier/etc/security/pam_mount.conf.xml juste avant </pam_mount> (en remplaçant jernst par le nom d’utilisateur correspondant) :

<volume user="jernst" fstype="crypt" path="/dev/sda2" mountpoint="/data" />

Il ne reste plus qu’à configurer PAM en ajoutant la ligne suivante à la fin des fichiers /etc/pam.d/common-session et /etc/pam.d/common-auth

# added for libpam-mount
@include common-pammount

Finalement, dans cet exemple, il faut encore déplacer toutes vos données personnelles vers votre partition chiffrée, puis faire un lien symbolique entre votre dossier personnel et /data.

Derniers mots

Cette technique a aussi l’avantage de vous permettre d’allumer votre ordinateur sans qu’une phrase de passe vous soit immédiatement demandée, ce qui est particulièrement utile dans des pays où la protection de votre vie privée peut vous valoir un séjour en détention ou un mauvais quart d’heure à la douane (il suffit alors de vous identifier avec un autre utilisateur).

Finalement si quelqu’un a une idée pour permettre une hibernation dans ce cas de figure (i.e. sans que la clé de chiffrement ne soit compromise, ce qui serait le cas avec une partition de SWAP), je suis preneur.

Mise à jour 14 juin 2009 : Il semblerait que depuis Jaunty, pam_mount ajoute automatiquement « session optional        pam_mount.so » dans les fichiers qui se trouvent dans pam.d ; si vous avez une telle ligne, il n’est pas nécessaire d’ajouter les lignes indiquées dans l’article à la fin de ces fichiers.