Installation par debootstrap et chroot - Partitions boot, root, home, swap chiffrées

Mise à jour : Debian 10.8 - Buster

Sommaire

1 - Préparation du média

L'objectif de cette étape est de partitionner un media avec

1.1 - Préalable

1.2 - Partitionnement

$ sudo parted /dev/sdb -s mktable gpt
$ sudo parted /dev/sdb mkpart ESP4 fat32 2MiB 1GiB set 1 esp on name 1 ESP4
$ sudo mkfs.vfat -F 32 -n ESP4 /dev/sdb1
$ sudo parted /dev/sdb mkpart boot4 ext2 1GiB 6GiB name 2 boot4
$ sudo parted /dev/sdb mkpart buster4 ext2 6GiB 50GiB name 3 buster4
$ sudo parted /dev/sdb mkpart swap4 linux-swap 50GiB 66GiB name 4 swap4
$ sudo parted /dev/sdb mkpart home4 ext2 66GiB 100% name 5 home4
$ sudo parted /dev/sdb unit GiB print
.....

Number Start End Size File system Name Flags
1 0,00GiB 1,00GiB 1,00GiB fat32 ESP4 boot, esp
2 1,00GiB 6,00GiB 5,00GiB boot4
3 6,00GiB 50,0GiB 44,0GiB buster4
4 50,0GiB 66,0GiB 16,0GiB swap4
5 66,0GiB 115GiB 48,6GiB home4

1.3 - Chiffrage des partitions boot, root, swap, home

$ sudo dd if=/dev/urandom of=buster.key bs=512 count=4
$ sudo chmod 600 buster.key

$ ls -ln buster.key
-rw------- 1 root root 2048 mars 23 16:35 buster.key
$ sudo bash -c ' for i in {2..5}; \
do cryptsetup luksFormat --batch-mode --type luks1 /dev/sdb$i buster.key; done'
$ lsblk -o name,partlabel,fstype /dev/sdb
NAME PARTLABEL FSTYPE
sdb
├─sdb1 ESP4 vfat
├─sdb2 boot4 crypto_LUKS
├─sdb3 buster4 crypto_LUKS
├─sdb4 swap4 crypto_LUKS
└─sdb5 home4 crypto_LUKS

1.4 - Création des systèmes de fichier

$ sudo cryptsetup open /dev/sdb2 boot4 --key-file buster.key && \
sudo cryptsetup open /dev/sdb3 buster4 --key-file buster.key && \
sudo cryptsetup open /dev/sdb4 swap4 --key-file buster.key && \
sudo cryptsetup open /dev/sdb5 home4 --key-file buster.key
$ sudo mkfs.ext4 -L boot4 /dev/mapper/boot4
$ sudo mkfs.ext4 -L home4 /dev/mapper/home4
$ sudo mkfs.ext4 -L buster4 /dev/mapper/buster4
$ sudo mkswap -L swap4 /dev/mapper/swap4
$ lsblk -o path,label,fstype /dev/sdb |grep -v crypto_LUKS
PATH LABEL FSTYPE
/dev/sdb
/dev/sdb1 ESP4 vfat
/dev/mapper/boot4 boot4 ext4
/dev/mapper/buster4 buster4 ext4
/dev/mapper/swap4 swap4 swap
/dev/mapper/home4 home4 ext4

1.5 - Phrase de passe utilisateur

$ sudo cryptsetup luksAddKey /dev/sdb2 --key-file buster.key
Entrez une nouvelle phrase secrète pour l'emplacement de clé :
Vérifiez la phrase secrète :
$ echo -n "Mon mot de passe" >ascii.key
$ sudo bash -c 'for i in {2..5}; do \
cryptsetup luksAddKey /dev/sdb$i --key-file buster.key ascii.key; done'
$ rm ascii.fr

1.6 - Récapitulatif

lsblk -o name,label,size,fstype /dev/sdb1
NAME LABEL SIZE FSTYPE
sdb1 ESP4 1022M vfat
$ lsblk -o path,label,size,fstype /dev/sdb |egrep "PATH|/dev/mapper"
PATH LABEL SIZE FSTYPE
/dev/mapper/boot4 boot4 5G ext4
/dev/mapper/buster4 buster4 44G ext4
/dev/mapper/swap4 swap4 16G swap
/dev/mapper/home4 home4 48,6G ext4
$ sudo cryptsetup open /dev/sdb2 boot4 --key-file buster.key && \
sudo cryptsetup open /dev/sdb3 buster4 --key-file buster.key && \
sudo cryptsetup open /dev/sdb4 swap4 --key-file buster.key && \
sudo cryptsetup open /dev/sdb5 home4 --key-file buster.key
$ for i in {boot4,buster4,swap4,home4}; do sudo cryptsetup close $i; done

2 - Debootstrap

2.1 - Montage du média

$ sudo mount /dev/mapper/buster4 /mnt
$ sudo mkdir -p /mnt/boot/efi /mnt/home
$ sudo mount /dev/mapper/boot4 /mnt/boot && \
sudo mount /dev/sdb1 /mnt/boot/efi && \
sudo mount /dev/mapper/home4 /mnt/home
$ lsblk -o path,label,mountpoint /dev/sdb |egrep "PATH|ESP4|boot4|buster4|swap4|home4"
PATH LABEL MOUNTPOINT
/dev/sdb1 ESP4 /mnt/boot/efi
/dev/mapper/boot4 boot4 /mnt/boot
/dev/mapper/buster4 buster4 /mnt
/dev/mapper/swap4 swap4
/dev/mapper/home4 home4 /mnt/home

2.2 - Installation du système de fichiers

$ sudo debootstrap buster /mnt
$ sudo rsync -aAxv debootstrap/ /mnt/ --progress; sync
$ ls /mnt
bin dev home lib32 libx32 media opt root sbin sys usr
boot etc lib lib64 lost+found mnt proc run srv tmp var

2.3 - Déplacement du fichier de phrase de passe

$ sudo mkdir -p /etc/keys
$ sudo mv buster.key /mnt/etc/keys

2.4 - Prochaine étape

3 - Chroot

$ sudo bash -c 'for i in {proc,sys,sys/firmware/efi/efivars,dev,dev/pts,run} ; \
do mount --bind /$i /mnt/$i;done'
main $ sudo chroot /mnt
chroot #
chroot # findmnt -o target,source,fstype
TARGET SOURCE FSTYPE
/ /dev/mapper/buster4 ext4
├─/boot /dev/mapper/boot4 ext4
│ └─/boot/efi /dev/sdb1 vfat
├─/home /dev/mapper/home4 ext4
├─/proc proc proc
├─/sys sysfs sysfs
│ └─/sys/firmware/efi/efivars efivarfs efivarfs
├─/dev udev devtmpfs
│ └─/dev/pts devpts devpts
└─/run tmpfs tmpfs
chroot # ping google.com
.....

4 - Configuration logicielle

chroot # date
mercredi 24 mars 2021, 11:41:57 (UTC+0100)

chroot # su -l <utilisateur>
$

5 - Configuration matérielle

$ ls /boot/
config-4.19.0-16-amd64 initrd.img-4.19.0-16-amd64 vmlinuz-4.19.0-16-amd64
efi lost+found
grub System.map-4.19.0-16-amd64

$ ls /boot/grub
fonts grub.cfg grubenv grub.png locale unicode.pf2 x86_64-efi

$ sudo tree /boot/efi
/boot/efi
├── EFI
│ ├── BOOT
│ │ ├── bootx64.efi
│ │ └── fbx64.efi
│ └── DEBIAN
│ ├── BOOTX64.CSV
│ ├── fbx64.efi
│ ├── grub.cfg
│ ├── grubx64.efi
│ ├── mmx64.efi
│ └── shimx64.efi
└── NvVars

6 - Prise en compte des systèmes de fichiers

Le déchiffrage, montage, .... des systèmes de fichiers s'effectue par la configuration des fichiers fstab - crypttab - resume, ...

6.1 - fstab

$ lsblk -f /dev/sdb1 -n -o uuid,mountpoint,fstype
9D91-B2C0 /boot/efi vfat
$ lsblk -o path,mountpoint,fstype /dev/sdb |grep /dev/mapper
/dev/mapper/boot4 /boot ext4
/dev/mapper/buster4 / ext4
/dev/mapper/swap4 swap
/dev/mapper/home4 /home ext4
$ cat <<EOF |sudo tee /etc/fstab
# /etc/fstab: static file system information.

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

# Partition ESP
UUID=9D91-B2C0 /boot/efi vfat umask=0077 0 2

# Boot chiffré
/dev/mapper/boot4 /boot ext4 defaults 0 2

# Racine chiffrée
/dev/mapper/buster4 / ext4 errors=remount-ro 0 1

# Swap chiffrée
/dev/mapper/swap4 none swap sw 0 0

# Home chiffré
/dev/mapper/home4 /home ext4 defaults 0 2

EOF

6.2 - Resume

$ echo "RESUME=/dev/mapper/swap4 |sudo tee /etc/initramfs-tools/conf.d/resume

6.3 - Crypttab

$ lsblk -o name,fstype,partlabel,partuuid /dev/sdb |grep crypto_LUKS
├─sdb2 crypto_LUKS boot4 79ac5616-64a2-4253-99e3-11b8d54922c1
├─sdb3 crypto_LUKS buster4 8e64595c-42ac-47f7-bb43-0f726c22cdc8
├─sdb4 crypto_LUKS swap4 4400b8c4-7d42-4145-93db-d2b0f0be097a
└─sdb5 crypto_LUKS home4 7b4f46f9-d181-4821-83e0-e9a2633c7f8c
$ cat <<EOF |sudo tee /etc/crypttab

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

# Partition boot - Phase grub
boot4 PARTUUID=79ac5616-64a2-4253-99e3-11b8d54922c1 none luks
# Partition root - Phase initramfs
buster4 PARTUUID=8e64595c-42ac-47f7-bb43-0f726c22cdc8 /buster.key luks,keyscript=/bin/cat
# Partition swap - Phase init linux
swap4 PARTUUID=4400b8c4-7d42-4145-93db-d2b0f0be097a /etc/keys/buster.key luks
# Partition home - Phase init linux
home4 PARTUUID=7b4f46f9-d181-4821-83e0-e9a2633c7f8c /etc/keys/buster.key luks
EOF

6.4 - Recopie de la phrase de passe dans l'initramfs

$ cat <<EOF |sudo tee /etc/initramfs-tools/hooks/copy_script
#!/bin/sh
cp /etc/keys/buster.key "\${DESTDIR}"

EOF

$ sudo chmod +x /etc/initramfs-tools/hooks/pass_script
$ echo "UMASK=026" | sudo tee -a /etc/initramfs-tools/initramfs.conf
$ sudo update-initramfs -u -k all
# lsinitramfs /boot/initrd.img-4.19.0-16-amd64 |grep buster.key
buster.key

6.5 - Périphériques de stockage ssd

$ sudo cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system
$ sudo systemctl enable fstrim.timer
$ sudo fstrim -v /

6.6 - Mise à jour de Grub

$ echo "GRUB_ENABLE_CRYPTODISK=y" |sudo tee -a /etc/default/grub
$ sudo cp /usr/share/desktop-base/active-theme/grub/grub-4x3.png  /boot/grub/grub.png
ou bien
$ sudo cp /usr/share/desktop-base/active-theme/grub/grub-16x9.png /boot/grub/grub.png
$ sudo update-grub

7 - Fin du chroot

Le système une fois finalisé

chroot $ exit
déconnexion
chroot # exit
exit
main $
$ sudo -- bash -c 'for i in {run,dev/pts,dev,sys/firmware/efi/efivars,sys,proc}; do umount /mnt/$i;done'
$ sudo umount /mnt/boot/efi /mnt/boot /mnt/home /mnt
$ lsof /mnt
$ for i in {boot4,buster4,swap4,home4}; do sudo cryptsetup close $i; done

Le media est disponible et peut-être retiré

8 - Premier démarrage autonome

8.1 - Amorçage EFI

8.2 - Grub

 Enter Passphrase for hd0,gpt2 (1679.........):

8.3 - Configuration finale

Voir Debootstrap et chroot Premier démarrage autonome