Table des matières
LUKS
TODO: Relire et remettre de l'ordre.
Chiffrer un deuxième disque dur
On peut facilement configurer le chiffrement avec LUKS lors de l'installation d'une distribution GNU/Linux. Mais si on veut chiffrer un éventuel deuxième disque dur , il faut le faire à la main.
Une fois le disque identifié (avec fdisk, comme plus bas), on peut le chiffrer :
# cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha256 /dev/sda1 WARNING! ======== Cette action écrasera définitivement les données sur /dev/sda1. Are you sure? (Type uppercase yes): YES Saisissez la phrase secrète : Vérifiez la phrase secrète :
Vérification :
# cryptsetup luksDump /dev/sda1 LUKS header information for /dev/sda1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 512 MK digest: 0a 16 95 1f 9c 18 26 62 95 87 69 fb 9d 32 d5 00 89 21 a9 36 MK salt: 3f fd 91 5f c6 02 e8 8e 38 b8 05 bc 83 a7 e2 26 65 0a 07 88 02 38 da 73 db cb 0c 8e ba c8 8c b9 MK iterations: 173750 UUID: cff610dd-3207-472f-bdd9-dbaf102958a9 Key Slot 0: ENABLED Iterations: 1406591 Salt: 1f 0b 0c c5 21 0e d3 e8 05 8c 81 3b 81 fb e9 99 15 d1 65 c8 c6 70 b2 1d c4 39 94 fb 62 26 85 80 Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Il faut maintenant créer une partition :
# cryptsetup luksOpen /dev/sda1 data Saisissez la phrase secrète pour /dev/sda1 : # ls -l /dev/mapper/ total 0 lrwxrwxrwx 1 root root 7 nov 2 21:42 alt--simon--vg-home -> ../dm-3 lrwxrwxrwx 1 root root 7 nov 2 21:42 alt--simon--vg-root -> ../dm-1 lrwxrwxrwx 1 root root 7 nov 2 21:42 alt--simon--vg-swap_1 -> ../dm-2 crw------- 1 root root 10, 236 nov 2 21:42 control lrwxrwxrwx 1 root root 7 nov 2 22:28 data -> ../dm-4 lrwxrwxrwx 1 root root 7 nov 2 21:42 nvme0n1p3_crypt -> ../dm-0
# mkfs.ext4 -m 0 -L data /dev/mapper/data mke2fs 1.43.4 (31-Jan-2017) En train de créer un système de fichiers avec 122095616 4k blocs et 30531584 i-noeuds. UUID de système de fichiers=33ac1c64-3173-457e-a7c1-25c7ad35e161 Superblocs de secours stockés sur les blocs : 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000 Allocation des tables de groupe : complété Écriture des tables d'i-noeuds : complété Création du journal (262144 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété
Créer le point de montage et monter le disque :
# mkdir /mnt/data # mount -t ext4 -o noatime /dev/mapper/data /mnt/data
Chiffrer un disque dur externe
On repère le disque avec fdisk :
$ sudo fdisk -l (...) Disque /dev/sdc : 1,8 TiB, 2000365289472 octets, 3906963456 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : gpt Identifiant de disque : 0B31EF05-5462-40FF-B947-C7423EFAB8D2 Périphérique Début Fin Secteurs Taille Type /dev/sdc1 2048 3906961407 3906959360 1,8T Données de base Microsoft
Chiffrer le disque dur :
# cryptsetup luksFormat /dev/sdc1
J'ai voulu faire ça mais il y a des WARNINGS :
# cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha256 /dev/sdc1 WARNING: Device /dev/sdc1 already contains a 'ntfs' superblock signature. WARNING: Device /dev/sdc1 already contains a 'atari' partition signature. WARNING! ======== Cette action écrasera définitivement les données sur /dev/sdc1. Are you sure? (Type uppercase yes): no Opération interrompue.
J'ai fait un formatage un peu “brutal” à grand coups de dd (attention, ça a duré 200 000 secondes!):
$ sudo dd if=/dev/zero of=/dev/sdc iflag=nocache oflag=direct bs=4096 488370433+0 enregistrements lus 488370432+0 enregistrements écrits 2000365289472 octets (2,0 TB, 1,8 TiB) copiés, 199997 s, 10,0 MB/s
$ sudo fdisk -l Disque /dev/sdc : 1,8 TiB, 2000365289472 octets, 3906963456 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets
$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT (...) sdc 8:32 0 1,8T 0 disk
Création d'une nouvelle partition :
$ sudo fdisk /dev/sdc Bienvenue dans fdisk (util-linux 2.32.1). Les modifications resteront en mémoire jusqu'à écriture. Soyez prudent avant d'utiliser la commande d'écriture. Le périphérique ne contient pas de table de partitions reconnue. Création d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0xff8426b0. Commande (m pour l'aide) : n Type de partition p primaire (0 primaire, 0 étendue, 4 libre) e étendue (conteneur pour partitions logiques) Sélectionnez (p par défaut) : p Numéro de partition (1-4, 1 par défaut) : 1 Premier secteur (2048-3906963455, 2048 par défaut) : Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (2048-3906963455, 3906963455 par défaut) : Une nouvelle partition 1 de type « Linux » et de taille 1,8 TiB a été créée. Commande (m pour l'aide) : w La table de partitions a été altérée. Appel d'ioctl() pour relire la table de partitions. Synchronisation des disques.
Vérification:
$ sudo lsblk (...) sdc 8:32 0 1,8T 0 disk └─sdc1 8:33 0 1,8T 0 part
Chiffrer la partition sdc1 :
$ sudo cryptsetup -v -y -c aes-xts-plain64 -s 512 -h sha512 -i 5000 --use-random luksFormat /dev/sdc1 WARNING! ======== Cette action écrasera définitivement les données sur /dev/sdc1. Are you sure? (Type uppercase yes): YES Saisissez la phrase secrète pour /dev/sdc1 : Vérifiez la phrase secrète : Key slot 0 created. Opération réussie.
Vérification:
$ sudo cryptsetup luksDump /dev/sdc1 LUKS header information for /dev/sdc1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha512 Payload offset: 4096 MK bits: 512 MK digest: 6e c5 4d 4a 3c b6 bf d4 4b bb 1b 18 8a 24 a9 74 57 7c f1 5a MK salt: 94 97 d0 42 34 f3 20 eb f0 72 76 3d 90 00 72 2b d2 29 18 aa 36 fd 22 95 b0 0f 0c 00 2a cd d7 b8 MK iterations: 112027 UUID: a329d451-fbd0-4a40-9270-896e64472208 Key Slot 0: ENABLED Iterations: 4607100 Salt: 28 2a 94 33 a1 4d 2b b0 83 9f 9f 09 0d e3 24 86 b6 ec e4 97 27 83 f0 71 b8 d0 68 a4 99 58 f3 11 Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Backup du header (explications sur loganmarchione.com) :
$ sudo cryptsetup luksHeaderBackup --header-backup-file /home/simon/header_backup.img /dev/sdc1
Ouvrir le container LUKS :
$ sudo cryptsetup luksOpen /dev/sdc1 ddexterne Saisissez la phrase secrète pour /dev/sdc1 :
Créer une partition :
$ sudo mkfs.ext4 /dev/mapper/ddexterne mke2fs 1.44.4 (18-Aug-2018) En train de créer un système de fichiers avec 488369664 4k blocs et 122093568 i-noeuds. UUID de système de fichiers=7a5beb6b-7fc6-41bd-9767-1b3861718fe6 Superblocs de secours stockés sur les blocs : 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocation des tables de groupe : complété Écriture des tables d'i-noeuds : complété Création du journal (262144 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété
Utilisation
Déchiffrer et monter le disque :
$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT (...) sdd 8:48 0 1,8T 0 disk └─sdd1 8:49 0 1,8T 0 part <= C'est cette partition-ci, de 1,8To!! $ sudo cryptsetup luksOpen /dev/sdd1 ddexterne Saisissez la phrase secrète pour /dev/sdd1 : $ sudo mount /dev/mapper/ddexterne /mnt/ddexterne/
On travaille dedans et puis on referme/démonte :
$ sudo umount /mnt/ddexterne $ sudo cryptsetup luksClose /dev/mapper/ddexterne
Sources:
Montage automatique d'un disque dur chiffré (externe ou second disque)
Si le premier disque dur principal est déjà chiffré, nous pouvons stocker sur celui-ci un fichier qui servira de clé pour déchiffrer le deuxième disque dur. (Ce qui évite de taper deux mots de passe au démarrage!)
Création du fichier :
# dd if=/dev/random of=/mnt/.datakey bs=1 count=256 256+0 enregistrements lus 256+0 enregistrements écrits 256 bytes copied, 0,00285662 s, 89,6 kB/s # ls -al /mnt/ total 16 drwxr-xr-x 3 root root 4096 nov 2 22:43 . drwxr-xr-x 23 root root 4096 nov 2 21:40 .. drwxr-xr-x 3 root root 4096 nov 2 22:34 data -rw-r--r-- 1 root root 256 nov 2 22:43 .datakey
On ajoute la clé dans les “slot” qui permettent de déchiffrer le disque :
# cryptsetup luksAddKey /dev/sda1 /mnt/.datakey
Entrez une phrase secrète existante :
On vérifie :
# cryptsetup luksDump /dev/sda1 LUKS header information for /dev/sda1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 512 MK digest: 0a 16 95 1f 9c 18 26 62 95 87 69 fb 9d 32 d5 00 89 21 a9 36 MK salt: 3f fd 91 5f c6 02 e8 8e 38 b8 05 bc 83 a7 e2 26 65 0a 07 88 02 38 da 73 db cb 0c 8e ba c8 8c b9 MK iterations: 173750 UUID: cff610dd-3207-472f-bdd9-dbaf102958a9 Key Slot 0: ENABLED Iterations: 1406591 Salt: 1f 0b 0c c5 21 0e d3 e8 05 8c 81 3b 81 fb e9 99 15 d1 65 c8 c6 70 b2 1d c4 39 94 fb 62 26 85 80 Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 1391302 Salt: 73 ec 5a 9e 2e a9 51 1f 17 53 79 e3 27 01 09 56 eb 6f b2 19 be 44 1c e2 87 05 58 7d 5b 27 38 ce Key material offset: 512 AF stripes: 4000 Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Démontage :
# umount /mnt/data/ # cryptsetup luksClose /dev/mapper/data
Montage :
# cryptsetup luksOpen /dev/sda1 data Saisissez la phrase secrète pour /dev/sda1 : # mount -t ext4 -o noatime /dev/mapper/data /mnt/data
On doit maintenant modifier les fichiers /etc/fstab
et /etc/crypttab
:
# nvim /etc/crypttab # cat /etc/crypttab # <target name> <source device> <key file> <options> nvme0n1p3_crypt UUID=8fb1b94f-db06-4d28-bb8a-abc1a30d2126 none luks data /dev/sda1 /mnt/.datakey luks,keyscript=/lib/cryptsetup/scripts/passdev # nvim /etc/fstab # cat /etc/fstab # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/alt--simon--vg-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/nvme0n1p2 during installation UUID=c3829ece-82e0-4e83-9a79-ae6c444b42d7 /boot ext2 defaults 0 2 # /boot/efi was on /dev/nvme0n1p1 during installation UUID=B013-E763 /boot/efi vfat umask=0077 0 1 /dev/mapper/alt--simon--vg-home /home ext4 defaults 0 2 /dev/mapper/alt--simon--vg-swap_1 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 #SLF: Deuxième disque dur (/dev/mapper/data) UUID=33ac1c64-3173-457e-a7c1-25c7ad35e161 /mnt/data ext4 defaults 0 1
TODO: Terminer la configuration pour permettre à l'utilisateur courant de (dé)monter le deuxième disque et d'y écrire.
Bonus, pour ouvrir un disque chiffré avec Luks et avec un fichier-clé :
# cryptsetup --key-file=/etc/keys/sdb1_key luksOpen /dev/sdb1 sdb1_crypt
(source: keyfile-based luks encryption in Debian)
Ajouter une deuxième mot de passe pour déchiffrer
Suite à une intallation d'une Debian avec le disque chiffré, je souhaite pouvoir rajouter une clé pour déchiffrer le disque dur, en plus de celle configurée au départ.
On identifie tout d'abord les partitions :
# fdisk -l Disque /dev/nvme0n1 : 238,5 GiB, 256060514304 octets, 500118192 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : gpt Identifiant de disque : FB187D7A-0D33-4743-889D-5441E424852D Périphérique Début Fin Secteurs Taille Type /dev/nvme0n1p1 2048 1050623 1048576 512M Système EFI /dev/nvme0n1p2 1050624 1550335 499712 244M Système de fichiers Linux /dev/nvme0n1p3 1550336 500117503 498567168 237,8G Système de fichiers Linux Disque /dev/sda : 465,8 GiB, 500107862016 octets, 976773168 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0x6ee5e36e Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/sda1 * 2048 976771071 976769024 465,8G 7 HPFS/NTFS/exFAT Disque /dev/mapper/nvme0n1p3_crypt : 237,8 GiB, 255264292864 octets, 498563072 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Disque /dev/mapper/alt--simon--vg-root : 28 GiB, 29997662208 octets, 58589184 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Disque /dev/mapper/alt--simon--vg-swap_1 : 15,9 GiB, 17075011584 octets, 33349632 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Disque /dev/mapper/alt--simon--vg-home : 193,9 GiB, 208188473344 octets, 406618112 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets
# cryptsetup luksDump /dev/nvme0n1p3 LUKS header information for /dev/nvme0n1p3 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 512 MK digest: 6f c0 da 10 e2 67 96 91 e3 d1 61 49 7a ef 5b f0 2b f2 94 9a MK salt: 2a 58 19 02 dd 6a ca 3e d4 ba ac 6d 34 c3 0e 4b b4 45 61 69 58 6d 41 1b e3 ed 08 d7 08 a1 b9 05 MK iterations: 174750 UUID: 8fb1b94f-db06-4d28-bb8a-abc1a30d2126 Key Slot 0: ENABLED Iterations: 1391302 Salt: ef 73 48 b9 05 36 24 ec 7c 0a 9b ca 63 fd d0 fa e6 c6 c1 aa f1 56 d9 13 f7 50 14 cc d1 3c 22 2c Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
On voit qu'il reste 7 slots disponibles. On ajoute :
# cryptsetup luksAddKey /dev/nvme0n1p3 Entrez une phrase secrète existante : Entrez une nouvelle phrase secrète pour l'emplacement de clé : Vérifiez la phrase secrète :
On vérifie :
# cryptsetup luksDump /dev/nvme0n1p3 LUKS header information for /dev/nvme0n1p3 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 512 MK digest: 6f c0 da 10 e2 67 96 91 e3 d1 61 49 7a ef 5b f0 2b f2 94 9a MK salt: 2a 58 19 02 dd 6a ca 3e d4 ba ac 6d 34 c3 0e 4b b4 45 61 69 58 6d 41 1b e3 ed 08 d7 08 a1 b9 05 MK iterations: 174750 UUID: 8fb1b94f-db06-4d28-bb8a-abc1a30d2126 Key Slot 0: ENABLED Iterations: 1391302 Salt: ef 73 48 b9 05 36 24 ec 7c 0a 9b ca 63 fd d0 fa e6 c6 c1 aa f1 56 d9 13 f7 50 14 cc d1 3c 22 2c Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 1398906 Salt: d1 cf 7f 08 e8 bb 57 0c f4 e5 27 fb fd c7 a3 66 c7 1c 85 7f b6 be 79 50 fa f0 60 ab 0c bd c8 44 Key material offset: 512 AF stripes: 4000 Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
Cette fois, deux emplacements sont bien utilisés.
Backup du header de LUKS
Comme expliqué dans cet article sur loganmarchione.com, il est très important de sauvegarder le header de LUKS.
$ sudo cryptsetup luksHeaderBackup --header-backup-file /home/simon/header_backup.img /dev/sdc1
Il faut évidemment stocker ce header sur un autre support chiffré…
Sources
- Accéder à un système LUKS manuellement (dans le cas, ici, d'un plantage de la machine suite à une mise à jour.)