====== 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 [[https://loganmarchione.com/2015/05/encrypted-external-drive-with-luks/#Step_2_8211_Securely_wipe_your_disk|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:__
* [[https://loganmarchione.com/2015/05/encrypted-external-drive-with-luks/#Step_2_8211_Securely_wipe_your_disk|loganmarchione.com]]
* [[https://blog.hellnino.com/?p=464|hellnino.com]]
===== 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
#
**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: [[https://www.finnie.org/2009/07/26/keyfile-based-luks-encryption-in-debian/|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 [[https://loganmarchione.com/2015/05/encrypted-external-drive-with-luks/#Step_2_8211_Securely_wipe_your_disk|loganmarchione.com]], il est très important de sauvegarder le **header** de LUKS.
{{ ::20150505_002-1024x753.png?400 |}}
$ 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 =====
* [[http://web.archive.org/web/20100110234521/http://petaramesh.org/post/2007/11/29/Une-cle-de-contact-pour-votre-portable-chiffre|web.archive de petaramesh.org]]
* [[https://doc.ubuntu-fr.org/cryptsetup|doc.ubuntu-fr.org/cryptsetup]]
* [[https://mart-e.be/post/2020/12/12/acceder-a-un-systeme-luks-manuellement/|Accéder à un système LUKS manuellement]] (dans le cas, ici, d'un plantage de la machine suite à une mise à jour.)