Installation debian luks via debootstrap

De Wiki doc

Voici comment installer une Debian Stretch sur un support interne ou externe chiffré avec cryptsetup.

ATTENTION

faire une doc sur la création d'un ESP.

Préparation du disque

Installation de l'outil de chiffrement de disque

apt install cryptsetup

Chiffrement de la partition

cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdb2

Ouverture de la partition

cryptsetup luksOpen /dev/sdb2 debsecu

Formatage de la sous partition (testé également avec btrfs)

mkfs.ext4 /dev/mapper/debsecu

Installation du système Debian

Installation du système

Montage de la partition formaté dans l'étape précédente

mount /dev/mapper/debsecu /mnt

Installation du système de base

debootstrap --arch amd64 stretch /mnt http://ftp.fr.debian.org/debian

Configuration du système

Entrer dans le système

chroot /mnt

[chroot] Monter les ressources nécessaires pour les installations

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts

[chroot] Définition du répertoire utilisateur root

export HOME=/root

[chroot] Changement temporaire du prompt (un accident est vite arrivé en confondant le prompt du chroot avec celui du root de l'hôte, le changer évite les sueurs froides)

export PS1="\e[01;31m(live):\W \$ \e[00m"

[chroot] Mise à jour des paquets

apt update
apt install dialog dbus
dbus-uuidgen > /var/lib/dbus/machine-id

[chroot] Installation du noyau

apt install linux-image-amd64

[chroot] Définition du mot de passe root

passwd

[chroot] Ajout d'un utilisateur

adduser toto

[chroot] Changement du fuseau horaire

dpkg-reconfigure tzdata

[chroot] Installer le système en Français

apt install locales
dpkg-reconfigure locales

INFORMATION

Cocher fr_FR.UTF-8 UTF-8 et séléctionner fr_FR.UTF-8 sur l'écran suivant.
apt install console-data

INFORMATION

Dans Choisir un codage clavier dans la liste complète, sélectionner pc / azerty / French / Same as X11 (latin9) / Standard.
apt install keyboard-configuration console-setup

INFORMATION

Pour keyboard-configuration, séléctionner Français - Français (variante obsolète).

Le contenu de /etc/default/keyboard doit être le suivant :

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT="latin9"
XKBOPTIONS=""

BACKSPACE="guess"

Le contenu de /etc/default/console-setup doit être le suivant :

# CONFIGURATION FILE FOR SETUPCON

# Consult the console-setup(5) manual page.

ACTIVE_CONSOLES="/dev/tty[1-6]"

CHARMAP="UTF-8"

CODESET="Lat15"
FONTFACE="Fixed"
FONTSIZE="8x16"

VIDEOMODE=

# The following is an example how to use a braille font
# FONT='lat9w-08.psf.gz brl-8x8.psf'

[chroot] Attribuer un mot de passe à root

passwd root

Configuration de l'initrd

[chroot] Installation de l'outil de chiffrement de disque

apt install cryptsetup

[chroot] Supprimer le fichier de montage des partitions chiffré (il gène la compilation de l'initrd)

rm /etc/crypttab

[chroot] Créer le fichier suivant contenant les information de votre partition chiffré :

echo 'CRYPTOPTS=target=debsecu,source=/dev/disk/by-uuid/<UUID de la partition chiffrée>' > /etc/initramfs-tools/conf.d/cryptroot

INFORMATION

On comprend avec cette ligne que la référence du disque / est codé en dur dans l'initrd, ce n'est pas le cas de Archlinux qui récupère cette information du chargeur d'amorçage. On comprend donc que Debian est moins portable que ce dernier car l'initrd doit être recompilé à chaque changement de disque chiffré.

[chroot] Activation du module

echo -e 'aes-x86_64\nsha512-ssse3\nxts\ndm-mod\ndm-crypt' >> etc/initramfs-tools/modules

[chroot] Forcer l'utilisation de cryptsetup au démarrage

echo 'CRYPTSETUP=y' >> /etc/cryptsetup-initramfs/conf-hook

[chroot] Mise à jour de l'inird

update-initramfs -u

[chroot] Nettoyage du système

apt-get clean
rm -rf /tmp/*
rm /var/lib/dbus/machine-id

[chroot] Démontage des systèmes de fichier spéciaux montés

umount /proc /sys /dev/pts

[chroot] Suppression de l'historique bash

history -c

Quitter le système

<ctrl+d>

Copie des fichiers de démarrage dans l'ESP

Copie de l'initrd et du noyau dans l'ESP

mount /dev/sdb1 /media
cp /mnt/boot/initrd.img-4.9.0-2-amd64 /media/initrd-debsecu
cp /mnt/boot/vmlinuz-4.9.0-2-amd64 /media/vmlinuz-debsecu

Installation du chargeur d'amorçage

Pour le moment cette section est vide. Une rustine pour ne pas être bloqué en attendant sa rédaction est de se référer au même passage sur l'installation d'Archlinux sur UEFI 64bits.

Systemd-boot

Note pour documentation ultérieure : options <UUID de la partition ext4>

Syslinux

EFI STUB

Finalisation

Démontage de la partition

umount /mnt

Fermeture de la partition chiffrée

cryptsetup luksClose debsecu

Problèmes

Il y a plein de raisons de rencontrer des problèmes lors de la configuration de l'initrd. Lorsque une erreur survient au moment de la phase de démarrage, le système s'arrête et rend la main par l'intermédiaire d'un prompt directement dans l'initramfs. À ce stade, on peut récupérer des informations sur les disques ainsi que sur les arguments passés au noyau afin de résoudre les difficultés rencontrées.

Afficher les arguments passés au noyau

cat /proc/cmdline

Afficher les modules compilés dans l'initrd

cat /proc/modules

La commande lsblk est disponible pour identifier l'UUID des disques et partitions.

Les liens symboliques sous forme d'UUID sont présents dans /dev/disk/by-uuid et pointes vers les périphériques de type bloque correspondants (/dev/sda; /dev/sdb2...).

INFORMATION

Il est important de rappeler que l'UUID de la partition luks est codé en dur dans l'initrd (contrairement à Archlinux), aussi, l'UUID renseigné dans le fichier /etc/initramfs-tools/conf.d/cryptroot doit être exacte et correspondre à l'UUID de la partition chiffrée. Bien observer les messages d'erreurs, un indice important y est souvant mentionné.

Il est également possible de renseigné le périphérique de type bloque au lieu de l'UUID de la partition luks dans le fichier /etc/initramfs-tools/conf.d/cryptroot, cependant il est important de garder en tête que la nomenclature sda; sdb... change au petit bonheur la chance en fonction de l'orientation de la lune (un coup le disque n°2 s'appel sdb, un autre il est sda...). Donc ça peut avoir pour conséquence que le système, ne trouve pas la partition ext4 contenant le système puisque il ne peut pas trouver le disque chiffré (et donc vous demander la clé de déchiffrement). Un cryptsetup luksOpen /dev/sdb2 debsecu à la main dans le prompt initramfs suivi d'un exit suffira à démarrer le système.

L'UUID renseigné dans le chargeur d'amorçage est très important car il permet au noyau de savoir sur quelle partition se trouve le /. Si l'initrd demande la clé de déchiffrement, que vous avez entré la bonne et que malgré tout le système vous renvoi sur le prompt initramfs c'est que vous vous êtes trompé sur cet UUID.

Sources