Cryptage de partitions sous Linux

Avant d’attaquer le cryptage de partitions sous Linux, je vais rappeler quelques règles de base (parce que bon, crypter une partition, ça fait pas tout :))

Sécurisation à minima de sa machine

Je ne rentre pas dans le détail, ce sont justes des principes généraux:

  • protéger l’accès au BIOS par un mot de passe*;
  • protéger le boot manager avec un mot de passe*: on peut soit empêcher le démarrage du kernel en demandant un mot de passe, soit empêcher de passer des options au kernel en demandant un mot de passe (histoire d’empêcher un petit malin de de démarrer avec un init=/bin/sh si pratique quand on a perdu le mot de passe root);
  • empêcher root de se logguer directement sur la machine;
  • ne pas communiquer le mot de passe de root (quand on est plusieurs à se servir d’une machine) ;
  • on ne se loggue pas en root sans avoir une bonne raison ;
  • on ne laisse pas traîner des sessions root ouvertes (un peu de conf dans le serveur SSH, ou des petits outils comme autolog sont très pratiques) ;
  • si on active un serveur SSH sur la machine, c’est une très bonne idée de limiter les utilisateurs qui ont le droit de s’y connecter (cf AllowUsers dans sshd_config(5))
  • configurer correctement NetFilter (cf iptables/ip6tables), ça ne fait jamais de mal, surtout sur une machine nomade que l’on connecte un peu n’importe où.

*: un bon mot de passe fait au moins 8 caractères de longs, il contient des majuscules et des minuscules, un ou plusieurs chiffres et un ou plusieurs signes de ponctuations (personnellement, j’évite ceux qui peuvent avoir une signification dans un shell comme *,# ou \, j’ai déjà eu des surprises). On évite aussi les mots du dictionnaires (même écrit en l33t), les dates de naissances, sa plaque d’immatriculation ou son code de carte de crédit. Au passage, j’en profite pour refaire un peu de pub pour pwgen (package pwgen chez Debian) qui permet de pallier aux problèmes d’imagination quand on doit générer des mots de passe.

Crypter ses partitions:

À mon avis, il y a au moins deux partitions très critiques à protéger: /home qui contient ses données personnelles et de travail, et le swap (vu qu’il contient une image de la mémoire, surtout quand on sert pour mettre sa machine en veille prolongée). Si on le souhaite, on peut aussi crypter l’intégralité de son système (sauf peut-être la partition où l’on stocke le kernel et l’initrd qui va avec), il y a un paquet de tuto sur internet qui expliquent comment jouer avec cryptsetup/LUKS et LVM, je ne l’aborde pas ici.

Dans les exemples qui suivent, le swap sera sur /dev/sda7, et le /home sur /dev/sda8.

Prérequis:

  • installer le package cryptsetup ;
  • choisir un bon mot de passe (voir le laïus plus haut) ;
  • choisir des petits noms pour les partitions (personnellement je fait cNomPartition, c pour dire crypté, ce qui pour la suite donnera cswap pour le swap et chome pour /home) ;
  • les partitions à crypter ne doivent pas être montées, et il faut les backuper avant de faire quoi que ce soit: les opérations suivantes vont tout effacer.

Cryptage des partitions

cryptsetup luksFormat /dev/sda7
cryptsetup luksFormat /dev/sda8

Initialisation/utilisation des partitions

ouverture

cryptsetup luksOpen /dev/sda7 cswap
cryptsetup luksOpen /dev/sda8 chome

On se retrouve avec deux nouveaux périphériques:

  • /dev/mapper/cswap
  • /dev/mapper/chome

formattage et montage

Là, c’est assez standard, il suffit de manipuler les périphériques que l’on vient de créer:

# mkswap -L swap /dev/mapper/cswap
# swapon LABEL=swap
# mkfs.ext4 -L /home /dev/mapper/chome
# mount LABEL=/home /home

Un peu de conf système

mise à jour de l’initrd

# update-initramfs -u -k $(uname -r)

ou plus radical:

# update-initramfs -d -k $(uname -r)
# update-initramfs -c -k $(uname -r)

modif de /etc/crypttab et /etc/fstab

Histoire de pas tout perdre au reboot, on ajoute ces deux lignes dans le fichier /etc/crypttab:

cswap /dev/sda7 none luks
chome /dev/sda8 none luks

et celles-ci dans le fichier /etc/fstab:

LABEL=swap none swap sw 0 0
LABEL=/home /home ext relatime,nodev,nosuid 0 2

Maintenant, au reboot, le système vous demande un mot de passe pour chaque volume crypté qu’il active puis monte.

Si quelqu’un démonte le disque dur pour le mettre ailleurs, il devrait bien se casser les dents sur vos données 🙂