Crypttab

On s’intéresse ici au déverrouillage et montage des périphériques chiffrés, à l'aide des fichiers crypttab et fstab.

Note : Le déverrouillage initial par grub d'une partition boot chiffrée n'est pas traitée ici.

Mise à jour : Debian 9.6

1 - Principe

Dans ce qui suit, on utilise les conventions suivantes

$ lsblk -f /dev/sdb1
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb1 crypto_LUKS de53f0d1-e643-4782-bd8d-0655393f3efe
└─secret ext4 exemple 91d006c5-ae5f-4bc4-95d0-77616726c60f /mnt

1.1 - Crypttab

Le fichier /etc/crypttab contient la liste des périphériques à déverrouiller automatiquement. Chaque ligne du fichier crypttab est de la forme :

<target name> <source device> <key file> <options>

1.2 - Fstab

A chaque périphérique déclaré dans /etc/crypttab est associé une ligne dans /etc/fstab précisant les conditions de montage. Chaque ligne de fstab est de la forme :

<file system>  <mount point>     <type>    <options> <dump>    <pass>

1.3 - Déverrouillage au démarrage

$ sudo update-initramfs -u -k all

1.4 - Configurations

Trois situations sont envisagées :

Ces situations sont applicables respectivement

2 - Déverrouillage par saisie de mot de passe

2.1 - Configuration

Créer une ligne dans crypttab et fstab sur les modèles suivants :
$ cat /etc/crypttab
# <target name> <source device> <key file> <options>
secret UUID=de53f0d1-e643-4782-bd8d-0655393f3efe none luks

Note : l'uuid de la partition peut-être obtenu directement avec :

# blkid /dev/sdb1 -s UUID -o value
de53f0d1-e643-4782-bd8d-0655393f3efe
$ cat /etc/fstab
/dev/mapper/secret /mnt ext4 defaults 0 0

2.2 - Vérification

Démonter et verrouiller le périphérique, puis

# cryptdisks_start secret
[....] Starting crypto disk...[info] secret (starting)...
Please unlock disk secret: ****
[ ok t (started)...done.
# mount /dev/mapper/secret
# umount /mnt
# cryptdisks_stop secret
[ ok ] Stopping crypto disk...secret (stopping)...done.

2.3 - Utilisation

Au démarrage, le mot de passe sera demandé pour chaque périphérique présent dans crypttab. Une fois le mot de passe saisi, le périphérique sera automatiquement déverrouillé et monté.

3 - Déverrouillage par phrase de passe

Note de sécurité : Dans cette configuration, la phrase de passe est stockée dans l'arborescence du système. Pour qu'elle ne soit pas accessible lorsque le système est à l'arrêt, la partition système doit donc impérativement être chiffrée.

3.1 - Configuration

Dans ce qui suit, le fichier de phrase de passe sera stocké en /etc/key/secret_phrase

$ sudo mkdir /etc/keys
$ sudo dd if=/dev/urandom of=/etc/keys/secret_phrase bs=512 count=4
$ sudo chmod 600 /etc/keys/secret_phrase
$ sudo cryptsetup luksAddKey /dev/sdb1 /etc/keys/secret_phrase
Entrez une phrase secrète existante :
$ cat /etc/crypttab
# <target name> <source device> <key file> <options>
secret UUID=de53f0d1-e643-4782-bd8d-0655393f3efe /etc/keys/secret_phase luks
$ cat /etc/fstab
/dev/mapper/secret /mnt ext4 defaults 0 0

3.2 - Vérification

$ sudo cryptdisks_start secret

3.3 - Utilisation

Au démarrage, le périphérique est automatiquement déverrouillé et monté. Un message confirme le bon déverrouillage.

Note: Si le périphérique est démonté, verrouillé puis déconnecté lorsque le système est en fonctionnement, il sera automatiquement déverrouillé et monté s'il est reconnecté.

4 - Fichier de phrase de passe stockée dans l'initramfs

Note de sécurité : Dans cette configuration, la phrase de passe est stockée dans l'arborescence du système et dans l'initramfs. Pour qu'elle ne soit pas accessible lorsque le système est à l'arrêt, la partition système et la partition dans laquelle est située l'initramfs doivent impérativement être chiffrées.

4.1 - Configuration

Créer une phrase de passe comme dans la configuration précédente et l'ajouter dans un des slots de la partition chiffrée :

# mkdir /etc/keys
# dd if=/dev/urandom of=/etc/keys/secret_phrase bs=512 count=4
# chmod 600 /etc/keys/secret_phrase
# cryptsetup luksAddKey /dev/sdb1 /etc/keys/secret_phrase
Entrez une phrase secrète existante :
# cat > /etc/initramfs-tools/hooks/addkey <<EOF
#!/bin/sh
cp /etc/keys/secret_phrase "\${DESTDIR}"
EOF

Rendre le script exécutable

# chmod +x /etc/initramfs-tools/hooks/addkey

Restreindre à root seul, l'accès en lecture à initramfs :

# echo "UMASK=026" >>/etc/initramfs-tools/initramfs.conf
$ cat /etc/cryptab
# <target name> <source device> <key file> <options>
secret UUID=de53f0d1-e643-4782-bd8d-0655393f3efe /secret_phase luks,keyscript=/bin/cat
# update-initramfs -u -k all

On peut vérifier que le fichier secret_phrase est présent à la racine de l'initramfs :

# lsinitramfs /boot/initrd.img-4.9.0-3-amd64 |grep secret_phrase
secret_phrase
$ cat /etc/fstab
/dev/mapper/secret /mnt ext4 defaults 0 0

4.2 - Utilisation

Au démarrage, le périphérique est automatiquement déverrouillé et monté. Un message confirme le bon déverrouillage