Partition chiffrée avec Cryptsetup
Afin de protéger au mieux vos données personnelles, il peut être nécessaire de chiffrer vos partitions utilisateur. En effet, si via le système il est impossible d’accéder aux fichiers qui ne vous appartiennent pas, un simple passage sur un livecd permet d’accéder à n’importe quel fichier de votre système. Le chiffrement de partition permet d’éviter ça. Ubuntu intègre en standard les outils nécessaires à une gestion simple de votre sécurité.
Installation
Installer cryptsetup
Si nécessaire charger les modules « aes-i586 », « dm_mod » et « dm_crypt ». Au besoin, les ajouter à la liste de /etc/modules (cf. infra Référence).
Applications
Chiffrer une partition
Créer un conteneur pour vos données : une partition ou un fichier contenant votre système de fichier.
Les données sont chiffrées à la volée, tout est transparent pour l'utilisateur, mais cependant il y a un coût machine pour le chiffrement. Ce coût est négligeable, tant que la fonction première de votre machine n'est pas serveur de fichiers.
Initialiser la partition
Exemple sur une partition libre /dev/hda7 :
sudo cryptsetup luksFormat /dev/hda7
On invoque cette commande pour formater la partition au type LUKS (initialiser la partition LUKS et définir la clé initiale). Le chiffrement sera de type AES avec un algorithme de hachage SHA256. Vous allez taper votre phrase de déchiffrement qui va permettre de créer un conteneur standard chiffré à l'aide de votre phrase.
Le conteneur chiffré de manière standard va stocker la clé de chiffrement maître qui servira à ouvrir votre volume chiffré. Il est possible d'ajouter jusqu'à 8 clefs supplémentaires dans des "slots", qui déverrouillent l'accès à la clef maître. Vous pouvez ainsi avec cette méthode avoir plusieurs utilisateurs qui vont chacun ouvrir le conteneur chiffré avec leur clef, et il vous sera possible de révoquer les clés éventuellement compromises.
Pour ajouter une clé d'accès au conteneur chiffré précédent :
sudo cryptsetup luksAddKey /dev/hda7
Pour voir l'état du conteneur chiffré et les "slots" utilisés :
sudo cryptsetup luksDump /dev/hda7
Pour révoquer une clé contenue dans un "slot" :
sudo cryptsetup luksKillSlot /dev/hda7 <numero_de_slot>
Montage manuel et formatage
Ouverture et formatage en ext3 de la partition chiffrée. L'appellation du volume est ici home1).
sudo cryptsetup luksOpen /dev/hda7 home sudo mkfs.ext3 /dev/mapper/home
puis montage de la partition :
sudo mount -t ext3 /dev/mapper/home /mnt/
puis démontage et fermeture du volume chiffré :
sudo umount /mnt sudo cryptsetup luksClose home
Aparté sur la transformation de fichiers en volumes
Pour générer un fichier de nom big de 10 Mo :
dd if=/dev/urandom bs=1M count=10 of=big
Pour éviter de dévoiler des informations, cette commande remplit le fichier avec du contenu aléatoire (/dev/urandom/). Cette opération est horriblement lente (quelque MiB/s). Utilisez Truecrypt pour générer un volume dans un fichier, la génération du fichier est beaucoup plus rapide et continuez ensuite normalement ce tutoriel.
Pour transformer le fichier en volume (sur Dapper, remplacer /dev/loop0 par /dev/loop/0) :
sudo losetup /dev/loop0 big
Pour déconnecter le volume du fichier (sur Dapper, remplacer /dev/loop0 par /dev/loop/0) :
sudo losetup -d /dev/loop0
Ces informations vous permettront d'utiliser dm-crypt sur des systèmes de fichiers embarqués dans des fichiers.
Montage automatique
Depuis Dapper, Ubuntu intègre la gestion des volumes chiffrée LUKS en standard, ce qui permet de gérer de manière automatique le montage et le démontage de vos volumes (partitions) sécurisées. La configuration des paramètres du volume chiffré est dans le fichier /etc/crypttab et le montage du volume est de manière classique dans /etc/fstab.
Un exemple de chiffrement du dossier /home:
Modifier le fichier /etc/crypttab :
# <target name> <source device> <key file> <options> home /dev/hda7 none luks
Si vos disques cryptés ont des noms séquentiels vous pouvez utiliser une boucle:
for i in sda1 sda2 ; do echo "${i}_crypt UUID=$(blkid -o full /dev/$i | cut -d '"' -f 2) none luks" >> /etc/crypttab ; done
Si vous désirez que tout vous array raid soient décryptés:
truncate -s 0 /etc/crypttab ; for i in $(cat /proc/mdstat | grep -E "^md" | cut -d ' ' -f 1) ; do echo "${i}_crypt UUID=$(blkid -o full /dev/$i | cut -d '"' -f 2) none luks" >> /etc/crypttab ; done
Modifier /etc/fstab pour le volume qui nous intéresse :
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/home /home ext3 defaults 0 1
La clé d'ouverture du volume chiffré vous sera demandée au démarrage de la machine si votre partition est montée automatiquement (voir fstab).
Attention, si une ligne est déjà présente pour le montage de la partition qui héberge le système de fichier chiffré (/dev/hda7 dans l'exemple ci-dessus), il faut la commenter (en ajoutant un # comme premier caractère) pour éviter un message d'erreur au démarrage.
Attention : si le boot a lieu avec les options quiet splash supprimées, la demande de la phrase de décodification va passer inaperçue… Le boot se mettra à attendre la saisie de la clé. Le plus simple est d'appuyer sur la touche entrée afin qu'il repose la question.
Ouverture automatique du conteneur chiffré au démarrage à l'aide d'un support amovible
securiser_ubuntu_avec_peripherique_externe
On peut grâce à LUKS monter automatiquement les partitions chiffrées au démarrage sans mot de passe à taper. Ceci est possible par l'intermédiaire d'une clé USB ou d'une carte SD ou MS : http://web.archive.org/web/20100110234521/http://petaramesh.org/post/2007/11/29/Une-cle-de-contact-pour-votre-portable-chiffre
Suivre la procédure indiquée plus haut, mais modifier le fichier /etc/crypttab :
# <target name> <source device> <key file> <options> home /dev/hda7 /dev/sda:/keyfile:1 luks,keyscript=/lib/cryptsetup/scripts/passdev home /dev/hda7 none luks
De cette manière, le système va tenter de déchiffrer la partition /dev/hda7 au moyen du fichier clé "keyfile" se trouvant sur le périphérique /dev/sda (en FAT par exemple). Le "1" représente le temps d'attente avant de demander le mot de passe si le fichier clé n'est pas trouvé.
ou
Pour les versions plus récentes d'Ubuntu (10.04 et plus) : http://wejn.org/how-to-make-passwordless-cryptsetup.html#28bd9ec7b2f9ea74ea0499586bde727c
Ouverture et montage automatique de la partition chiffrée à l'ouverture de session, sans support amovible ni pass-phrase
Les techniques exposées plus haut offrent un haut niveau de sécurité pour peu que la pass-phrase de LUKS ait été bien choisie. Cependant, elles sont également assez lourdes, dans la mesure où elles nécessitent que l'utilisateur rentre à chaque démarrage sa pass-phrase (ou qu'il porte sur lui en permanence le support amovible permettant l'ouverture du conteneur chiffré). La méthode proposée ici va permettre d'ouvrir automatiquement le conteneur chiffré et de monter la partition chiffrée au démarrage de la session, sans que la pass-phrase ne soit saisie. La partition chiffrée n'est donc plus protégée que par le mot de passe d'ouverture de session.
La pass-phrase de la partition chiffrée et le mot de passe associé au compte doivent être les mêmes (PAM ne fait que "passer" le mot de passe de session pour le montage de la partition), cela a donc des implications lorsque le mot de passe de l'utilisateur doit être changé : il faut au préalable rajouter une pass-phrase (identique au nouveau mot de passe) dans un nouveau "slot" et une fois que cela est validé, supprimer l'ancienne pass-phrase.
Le niveau de sécurité est donc plus bas, mais le chiffrement devient parfaitement transparent pour l'utilisateur. Cette solution convient donc bien si vous souhaitez simplement protéger vos données personnelles en cas de vol de votre machine par un quidam quelconque, mais peut-être pas si vous avez des documents vraiment confidentiels à protéger.
Nous allons utiliser PAM, utilitaire habituellement utilisé pour le montage automatique de partitions sur des postes multi-utilisateurs.
La situation est la suivante : la partition /dev/sda2 est notre partition chiffrée. Elle doit être montée automatiquement au point /mnt/cryptodisk. Les opérations suivantes ont donc été effectuées au préalable :
#Création du containeur chiffré. Attention, la partition ne doit pas être montée. De plus, toute donnée présente sur cette partition sera perdue : sudo cryptsetup luksFormat /dev/sda2 #Ouverture du containeur nouvellement créé, à qui on donne le nom de "cryptodisk": sudo cryptsetup luksOpen /dev/sda2 cryptodisk #Création du système de fichier ext3 sur cette partition chiffrée : sudo mkfs.ext3 /dev/mapper/cryptodisk #Création du point de montage : sudo mkdir /mnt/cryptodisk #Définition du point de montage: Dans le fichier /etc/fstab, notez l'option #"noauto" qui permet de faire apparaître la partition dans le fichier fstab #sans pour autant la monter automatiquement au démarrage /dev/mapper/cryptodisk /mnt/cryptodisk ext3 defaults,noauto 0 0 #Et on s'arrête là. Ne RIEN ajouter dans le fichier /etc/cryptab
Notre partition chiffrée est à présent créée, formatée, et un point de montage a été défini. Il ne reste plus qu'à indiquer à PAM de la monter automatiquement à chaque ouverture de session (sans demande de la pass-phrase donc).
#Installation de la librairie : sudo apt-get install libpam-mount
Indication à PAM de la partition à monter : Editer le fichier /etc/security/pam_mount.conf.xml. Au début du fichier, après la première balise <pam-mount>, ajouter la ligne suivante :
<volume user="*" mountpoint="/mnt/cryptodisk" path="/dev/sda2" fstype="crypt" />
La partition /dev/sda2 de type "crypt" (partition chiffrée) sera montée à l'ouverture de session sans demande de la phrase-pass sur le point de montage /mnt/cryptodisk, et ce quel que soit l'utilisateur qui se connecte (et dont le mot de passe de session correspond à une pass-phrase de la partition).
Et pour finir, il suffit d'indiquer à gdm (dans le cas de Gnome) ou kdm (pour KDE) d'appeler PAM. Ouvrir ainsi dans le cas de Gnome le fichier /etc/pam.d/gdm, et ajouter à la fin de ce fichier la ligne
@include common-pammount
Remarque : ceci n'est plus utile depuis Jaunty.
Et voilà ! Il ne vous reste plus qu'à redémarrer votre machine, et à l'ouverture de session la partition chiffrée sera ouverte et montée automatiquement, sans que la pass-phrase ne vous soit demandée. Bien entendu, si vous avez au préalable désactivé l'authentification pour l'ouverture de la session, cela ne sert pas à grand chose d'avoir une partition chiffrée (car alors l'authentification étant désactivée, la session est ouverte automatiquement à chaque démarrage et la partition chiffrée est également ouverte et montée automatiquement et sans pass-phrase à chaque démarrage).
Remarque: méthode testée et approuvée sous Ubuntu 10.04
Réglage de la priorité d'exécution
Par défaut le niveau de priorité du démon de chiffrage est trop élevé et peut induire des ralentissements gênants. Vous pouvez modifier cette priorité à l'aide de la commande renice :
sudo renice 10 `pgrep kcryptd`
Pour exécuter cette commande à chaque démarrage, il faut la placer dans le fichier /etc/rc.local avant la ligne exit 0 sans sudo car c'est le système avec les droits administrateur qui l'exécutera.
#!/bin/sh -e # renice 10 `pgrep kcryptd` exit 0
Cas concret en version 22.04
- Créer la partition chiffrée en utilisant l'application gnome-disk-utility.
- Récupérer le UUID généré. Exemple: 1a831923-20f8-4219-aaa9-c13e6da8b6e2.
- Définir cette partition dans le fichier /etc/crypttab. Exemple:
echo PartitionChiffree UUID=1a831923-20f8-4219-aaa9-c13e6da8b6e2 none luks | sudo tee -a /etc/crypttab
Le mot PartitionChiffree peut être remplacé par tout mot qui vous convient. Les espaces sont interdits. Eviter les caractères spéciaux et les accents.
- Mettre à jour le fichier /etc/fstab. Exemple:
echo /dev/mapper/PartitionChiffree /media/PartitionChiffree ext4 defaults 0 1 | sudo tee -a /etc/fstab
- Créer le point de montage
sudo mkdir -v /media/PartitionChiffree
Modifier le mot de passe de la partition chiffrée
LUKS autorise jusqu'à 8 mots de passe pour une même partition, ce qui permet d'attribuer des mots de passe différents à différents utilisateurs. Cette limitation est de 32 si utilisation de la version 22.04
Pour supprimer un mot de passe existant, il convient préalablement d'ajouter un mot de passe supplémentaire avant de supprimer l'ancien mot de passe lorsque la partition n'en contient qu'un!
Ajouter un mot de passe supplémentaire
On suppose que l'utilisateur a parfaitement identifié la partition physique chiffrée, par exemple avec lsblk :
usr@pc:~$ sudo lsblk sda 8:0 0 211,8G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 700M 0 part /boot └─sda3 8:3 0 210,6G 0 part └─partition_chiffree 253:0 0 210,6G 0 crypt ├─PartitionLUKS--vg-root 253:1 0 30G 0 lvm / └─PartitionLUKS--vg-home 253:2 0 180G 0 lvm /home sdb 8:48 0 800,4G 0 disk └─sdb1 8:49 0 800,4G 0 part /media/disque
Dans l'exemple ci-dessus, la partition dont le mot de passe doit être modifié est la partition /dev/sda3. L'ajout d'un mot de passe se fait en utilisant la commande cryptsetup luksAddKey. L'affichage interactif invite ensuite l'utilisateur, dans le terminal, à saisir d'abord une clé valide (la seule s'il n'y en a qu'une), puis, à deux reprises, le nouveau mot de passe (nouvelle clé ou nouvelle phrase secrète : ces termes sont ici synonymes).
usr@pc:~$ sudo cryptsetup luksAddKey /dev/sda3 Entrez une phrase secrète existante : Entrez une nouvelle phrase secrète pour l'emplacement de clé : Vérifiez la phrase secrète :
Une fois ce nouveau mot de passe créé, il est désormais possible de supprimer l'ancien mot de passe.
Supprimer un mot de passe
La suppression d'un mot de passe utilise la commande cryptsetup luksRemoveKey. Celle-ci nécessite, tout comme lors de la création d'un mot de passe, de connaître la partition physique sur laquelle opérer. Dans l'exemple ci-dessous, c'est toujours /dev/sda3. Après avoir saisi la commande suivie de la partition, il suffit donc, à l'invite du terminal, de saisir la phrase secrète (le mot de passe) à supprimer pour que celle-ci le soit immédiatement :
usr@pc:~$ sudo cryptsetup luksRemoveKey /dev/sda3 Entrez la phrase secrète à effacer :
C'est tout.
usr@pc:~$ cryptsetup luksChangeKey <target device> -S <target key slot number>
Monter automatiquement le volume chiffré (LUKS) au démarrage
Grâce à la librairie libpam-mount, il est possible de monter automatiquement un volume chiffré, occasionnant le fait que ce dernier soit configuré avec le même mot de passe que celui de l'utilisateur.
sudo apt install libpam-mount libpam-mount-bin
- Dans : /etc/pam.d/gdm-password :
Ajouter :
auth optional pam_mount.so try_first_pass
session optional pam_mount.so
- Dans /etc/security/pam_mount.conf.xml :
<volume user="awk" fstype="crypt" path="/dev/sdb1" mountpoint="/media/awk/Data" />
(changer "awk" par votre nom d'utilisateur et "sdb1" par votre disque)
Le disque se déchiffre et se monte au démarrage du PC.
Chiffrer votre système avec le swap aléatoirement
Allez voir ce tutoriel pour plus d'information sur le sujet : chiffrement_manuel
Conclusion
Le nouveau système de gestion des volumes chiffrés est très bien implémenté dans Dapper. Il permet notamment de sécuriser votre /home sans manipulation complexe autre que de renseigner la pass-phrase lors du démarrage.
Sous Windows
Grâce au logiciel FreeOTFE, il est possible de monter de façon non permanente une partition LUKS chiffrée par Cryptsetup sous Linux à partir de votre système Windows.
Pour monter et utiliser le même type de partition que celle décrite dans ce wiki, voici les étapes :
1. Télécharger FreeOTFE ici
2. Extraire les fichiers de l'archive dans un dossier et ouvrir FreeOTFE.exe
3. Lorsqu'on vous demande si vous voulez démarrer FreeOTFE en portable mode, dites oui. Si vous voulez utiliser FreeOTFE régulièrement afin de monter des volumes chiffrés sous Windows, vous pouvez cliquer sur non et activer de façon permanente tous les pilotes de chiffrement un par un.
4. Cliquez ensuite sur File / Linux volume / Mount partition
5. Choisissez la partition qui est chiffrée sur votre disque dur
6. Dans la grande case, entrez votre clé secrète, puis cliquez sur Ok
7. Si vous avez choisi la bonne partition et la bonne clé, le programme détectera le chiffrage correspondant et vous offrira une liste des pilotes pouvant monter le volume. Faites votre choix.
8. Si tout s'est bien passé, vous avez un nouveau lecteur dans votre poste de travail !
Notes importantes
Ce volume ne survivra pas à un redémarrage, il faudra tout reprendre de zéro à chaque fois.
Si vous fermez FreeOTFE alors qu'il est en mode portable, vous devez lui spécifier de ne pas désactiver les pilotes d'encryptage afin de ne pas perdre l'usage de votre partition.
Avant de fermer votre ordinateur, il est recommandé de démonter la partition à l'aide de FreeOTFE et de lui permettre de désactiver tous les pilotes à sa fermeture.
Si votre système de fichier est ext2 ou ext3, Windows ne sera pas capable de lire le contenu de votre partition, sauf si vous installez le Ext2 IFS For Windows. Attention toutefois, ce pilote pour Windows ne prend pas en charge les droits d'accès et la journalisation. Pour du partage entre Windows et Linux, le Fat32 est plus conseillée.
Liens
- Une bonne référence : https://wiki.ubuntu.com/EncryptedFilesystemHowto
- Un 'howto' expliquant étape par étape comment mettre en œuvre LUKS pour construire un système sûr: A startup key to protect my data
—-
Contributeur : ???