Table des matières
Crypter partition pour bacula
Pré-requis: /dev/xvdb1
est une partition quelconque.
# aptitude install cryptsetup
Formater (la 1er fois):
# cryptsetup luksFormat /dev/xvdb1
Voir les “slots” utilisés (jusqu'a 8 mots de passe possible):
# cryptsetup luksDump /dev/xvdb1
Ajouter un mot de passe:
# cryptsetup luksAddKey /dev/xvdb1
Dechiffrer la partition: (un mot de passe est demandé)
# cryptsetup luksOpen /dev/xvdb1 disk
Preparer le systeme de fichier:
# mkfs.ext3 /dev/mapper
Mounter la partition:
# mount /dev/mapper/disk /mnt/disk
Et voila.
Demonter:
# umount /mnt/disk
Fermer le dechiffrage:
# cryptsetup luksClose disk
Autres méthodes
simple
Ouvrir et monter:
# echo -n <MOT_DE_PASSE_SECRET> | cryptsetup luksOpen /dev/xvdb1 DISK -d - && mount /dev/mapper/DISK /mnt/DISK
Demonter:
# umount /mnt/DISK && cryptsetup luksClose DISK
Vérifier le mountage:
# cat /proc/mounts | egrep -q "^/dev/mapper/DISK" ; echo $?
Retourne “0” si monté.
ssh
Crypter une partition
Il existe plusieurs méthode, mais la plus souple semble celle avec LUKS
: la gestion des clés est plus pratique.
prérequis
Verifier qu'on a dm-crypt
$ /sbin/modinfo dm-crypt filename: /lib/modules/2.6.22-3-686/kernel/drivers/md/dm-crypt.ko ... <snip> ...
Si nécessaire:
# aptitude install dmsetup cryptsetup
# cryptsetup luksFormat /dev/xvdb1
partition loop
Creer image disk crypté
Creer image:
disk-crypt.bin
de 1 Go:
# dd if=/dev/zero of=./disk-crypt.bin bs=1024k count=1024
Mounter avec losetup
:
# losetup /dev/loop0 ./disk-crypt.bin
(A la fin, pour demounter, il faudra faire: losetup -d /dev/loop0
)
Formater pour le cryptage:
# cryptsetup luksFormat /dev/loop0 WARNING! ======== This will overwrite data on /dev/loop0 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful.
ATTENTION: la passphrase
est votre code secret !
Il s'agit d'une passphrase (code secret) parmi 8 possibles: voir plus loin comment créer d'autres clés.
Monter l'image disk crypté
Mapper (en ouvrant) la partition crypté:
# cryptsetup luksOpen /dev/loop0 <NOM_QUE_VOUS_VOULEZ> Enter LUKS passphrase: key slot 0 unlocked. Command successful.
C'est mappé là:
# ls /dev/mapper/ -lrt total 0 crw-rw---- 1 root root 10, 63 2008-01-13 12:05 control brw-rw---- 1 root disk 254, 0 2008-01-13 22:20 <NOM_CHOISIT>
Formater la couche crypté de la partition en ext3:
# mkfs.ext3 /dev/mapper/<NOM_CHOISIT> mke2fs 1.40.3 (05-Dec-2007) Étiquette de système de fichiers= Type de système d'exploitation : Linux ... <snip> ...
Mounter la partition crypté:
# mount /dev/mapper/<NOM_CHOISIT> /mnt/crypt/
Et l'utiliser…
# mkdir /mnt/crypt/document_secret # chown thierry: /mnt/crypt/document_secret/
Voila, “thierry
” peut maintenant écrire et lire des documents secrets:
Sans la “passphrase
”, il n'est plus possible de lire le contenu de l'image disk disk-crypt.bin
.
Demonter (le loop)
D'abord démonter l'image disk mappé.
# mount | grep mapper /dev/mapper/<NOM_CHOISIT> on /mnt/crypt type ext3 (rw)
Demontons donc:
# umount /mnt/crypt
Fermer la partition Luks
:
# cryptsetup luksClose <NOM_CHOISIT>
Liberer le périphérique loop
:
# losetup -d /dev/loop0
Ouf! C'est fini
clé USB
Brancher
# tail -f /var/log/syslog Jan 13 23:20:05 k8 kernel: sd 7:0:0:0: [sdd] Attached SCSI removable disk Jan 13 23:20:05 k8 kernel: sd 7:0:0:0: Attached scsi generic sg4 type 0
by-id
On peut aussi faire la même chose, sans savoir où est la clé USB, en utilisant le chemin “by-id
”:
# ls /dev/disk/by-id/ ... <snip> ... usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0 usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part1
Creer
# cryptsetup luksFormat /dev/sdd1 WARNING! ======== This will overwrite data on /dev/sdd1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful.
Ouvrir
# cryptsetup luksOpen /dev/sdd1 cle_usb Enter LUKS passphrase: key slot 0 unlocked. Command successful.
Verifions:
# ls /dev/mapper/ cle_usb control
by-id
Ca marche aussi comme ça:
# cryptsetup luksOpen /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0\:0-part1 cle_usb
Et on se moque de la place la clé dans le nommage “/dev/sd…
”
Formater
# mke2fs /dev/mapper/cle_usb mke2fs 1.40.3 (05-Dec-2007) Étiquette de système de fichiers= Type de système d'exploitation : Linux ... <snip> ...
Mounter
# mount /dev/mapper/cle_usb /mnt/crypt/
Lire et Ecrire
etc…
Demounter et fermer
# umount /mnt/crypt # cryptsetup luksClose cle_usb
Et voila.
Un peu plus loin
Partitionner la clé en 2 : cryptée et non cryptée.
# sfdisk -d /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0\:0 # partition table of /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0 unit: sectors /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part1 : start= 32, size= 7831520, Id= c, bootable /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part2 : start= 0, size= 0, Id= 0 /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part3 : start= 0, size= 0, Id= 0 /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part4 : start= 0, size= 0, Id= 0
On prend “cfdisk
” et on partitionne en 2 parties… et on a alors:
# sfdisk -d /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0\:0 # partition table of /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0 unit: sectors /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part1 : start= 32, size= 3905248, Id= c, bootable /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part2 : start= 3905280, size= 3953664, Id=83 /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part3 : start= 0, size= 0, Id= 0 /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part4 : start= 0, size= 0, Id= 0
Formater pour Crypter
# cryptsetup luksFormat /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part2
“/dev/mapper/cle_usb
” existe maintenant…
# mke2fs /dev/mapper/cle_usb
Accessoirement, formatter aussi la partition non crypté:
# mkfs.vfat /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0\:0-part1
Mounter et Lire/Ecrire
Si le cryptage n'est pas déjà ouvert:
# cryptsetup luksOpen /dev/disk/by-id/usb-LEXAR_JD_FIREFLY_106A6604070202310707-0:0-part2 cle_usb
Et puis:
# mount /dev/mapper/cle_usb /mnt/crypt/ # chown thierry: /mnt/crypt/. # su thierry $ touch /mnt/crypt/hello.txt $ ls -lart /mnt/crypt/ total 24 drwxr-xr-x 8 root root 4096 2008-01-13 22:23 .. drwx------ 2 root root 16384 2008-02-18 15:54 lost+found -rw-r--r-- 1 thierry thierry 0 2008-02-18 15:57 hello.txt drwxr-xr-x 3 thierry thierry 4096 2008-02-18 15:57 .
Ok, ca marche !
l'opération est simplifié sous X, car 1 fois le cryptage en place, un “popup” propose d'explorer (en mountant) la partition détecté.
Demonter
# umount /mnt/crypt/ # cryptsetup luksClose cle_usb
Autres commandes
Voir
Voir l'etat du disk crypto: (on reprend de l'exemple loop
ci-dessus)
# cryptsetup luksDump /dev/loop0 LUKS header information for /dev/loop0 Version: 1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Hash spec: sha1 Payload offset: 1032 MK bits: 128 MK digest: 2c 68 bd d4 a2 c7 d4 45 fe b2 3c fb ba 6b cc 71 f1 6a 0d de MK salt: c9 ba 57 c7 98 af 19 34 91 2e da 1a 9f 0c f9 e5 b8 07 75 cd fa 5e 23 c0 df 43 3d d5 4d 5d eb 18 MK iterations: 10 UUID: bc75820a-108d-465d-9f89-e5c234b3687a Key Slot 0: ENABLED Iterations: 148684 Salt: 25 19 93 22 b1 7e 0b 8e b1 d1 e8 2c 73 94 53 47 28 31 39 71 f7 66 73 52 8a d3 f2 70 d6 4e d1 9f 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
Gestion des clés
On peut ajouter 7 clés (en plus de la clé initialement créé). L'ensemble des clés ont des droits identiques.
La commande luksDump
(vu ci-dessus) permet d'avoir l'etat des attributions de clés.
Ajouter
# cryptsetup luksAddKey /dev/loop0 Enter any LUKS passphrase: key slot 0 unlocked. Enter new passphrase for key slot: xxxxxxx Verify passphrase: xxxxxxx Command successful.
Supprimer
# cryptsetup luksDelKey /dev/loop0 <NUMERO_DU_SLOT> Enter any remaining LUKS passphrase: key slot 0 unlocked. Command successful.
Automount
En jouant avec /etc/crypttab
, on peut monter, dés le boot, des partitions cryptés (sans oublier de modifier /etc/fstab
en conséquence).
Clé dans fichier
Lorsqu'on veut que cryptsetup
trouve tout seul les clés. On créé un fichier comme cela:
(par exemple)
# cd /root # mkdir crypt # cd crypt
Et puis:
# echo -n "mot_de_passe" >> fichier.key # chmod 400 fichier.key
Le echo -n
permet de creer le fichier sans retour chariot a la fin.
J'en ai bavé avec vi
avant de comprendre qu'il fouttait toujours un “\n
” a la fin !
Et puis:
# cryptsetup luksOpen -d /root/cryptkey/fichier.key /dev/sdb1 sdhc key slot 0 unlocked. Command successful.
Si vous avez “Command failed: No key available with this passphrase.” , alors c'est ce #*!@ de “\n
” qui est sans doute là !
Et enfin:
Dans /etc/crypttab
:
# <target name> <source device> <key file> <options> sdhc /dev/sdb1 /root/crypt/fichier.key luks
Et dans /etc/fstab
:
.. <snip> .. /dev/mapper/sdhc /mnt/sdhc vfat defaults,noatime,uid=1000,gid=1000 0 2
Crypter Root
Pour un eeePC, on montre comment crypter “/
” (sauf “/boot
”).
Cela fonctionne pour les dérivés de Debian testé.
Le cryptage doit être fait au moment de l'installation de Linux.
Il n'y a pas de manière simple aprés l'installation.