Outils pour utilisateurs

Outils du site


disk_crypto

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

FIXME

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 :-P

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.

disk_crypto.txt · Dernière modification : 2011/11/13 21:50 de thierry