Mise à jour : Debian 10.8 - Buster
Sommaire
L'objectif de cette étape est de partitionner un media avec
Pour faciliter l'identification, on convient d'utiliser le même nom (respectivement ESP4, boot4, buster4, swap4, home4 pour respectivement les partitions ESP, boot, root, swap et home) pour
$ 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
$ 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
Ouvrir les conteneurs et leur donner pour nom ....boot4, buster4, swap4, home4
$ 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
Il faudra tenir compte que certains caractères sont composés différemment sur le clavier local (AZERTY) et sur le clavier QWERTY
$ 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
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
Pour déverrouiller les partitions chiffrées
$ 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
$ 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
$ sudo debootstrap buster /mnt
$ sudo rsync -aAxv debootstrap/ /mnt/ --progress; sync
Vérifier la présence d'un système de fichier
$ 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
$ sudo mkdir -p /etc/keys
$ sudo mv buster.key /mnt/etc/keys
A ce stade, le système n'est pas encore amorçable et la finalisation du système s'effectue depuis le système hôte au moyen d'un changement de racine (chroot)
$ sudo bash -c 'for i in {proc,sys,sys/firmware/efi/efivars,dev,dev/pts,run} ; \
do mount --bind /$i /mnt/$i;done'
Entrer dans le chroot
main $ sudo chroot /mnt
chroot #
Vérifier que le système de fichier est accessible et complet
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
.....
Lorsque la configuration est effectuée, vérifier que le système est correctement configuré (langue, clavier, locales, utilisateur, ...), en affichant par exemple, la date et en ouvrant une session utilisateur
chroot # date
mercredi 24 mars 2021, 11:41:57 (UTC+0100)
chroot # su -l <utilisateur>
$
$ 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
Le déchiffrage, montage, .... des systèmes de fichiers s'effectue par la configuration des fichiers fstab - crypttab - resume, ...
$ 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
$ echo "RESUME=/dev/mapper/swap4 |sudo tee /etc/initramfs-tools/conf.d/resume
$ 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
$ 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
Mettre à jour l'initramfs
$ sudo update-initramfs -u -k all
# lsinitramfs /boot/initrd.img-4.19.0-16-amd64 |grep buster.key
buster.key
Mettre en place un rognage semainier en utilisant systemd. Celui-ci s'effectuera sur tous les systèmes de fichier qui supportent la commande fstrim
$ sudo cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system $ sudo systemctl enable fstrim.timer
$ sudo fstrim -v /
$ 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
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é
Enter Passphrase for hd0,gpt2 (1679.........):
Voir Debootstrap et chroot Premier démarrage autonome