L'installateur Debian n'autorise le chiffrage du système que
dans le cadre de l'utilisation de volumes logiques. Ce qui suit
propose une installation chiffrée sans utilisation de volumes
logiques :
l'installation s'effectuera sur une clé usb, munie de deux
partitions : une partition en clair pour le boot, une
partition chiffrée pour le système (hors boot, swap
éventuel)
l'installation s'effectuera à partir d'une installation existante, créée par debootstrap, puis mise à jour par chroot
Sommaire
$ lsscsi [0:0:0:0] disk ATA KINGSTON SHSS37A 00.Y /dev/sda
[2:0:0:0] cd/dvd HL-DT-ST DVDRAM GT51N AS00 /dev/sr0
[6:0:0:0] disk Lexar USB Flash Drive 1100 /dev/sdb
Dans le cas présent, la clé est attachée en /dev/sdb.
Partitionner la clé (toutes les données seront perdues) : une partition de boot (200 MB) et une partition système (racine) (le reste de la clé) :
$ sudo parted -s /dev/sdb mklabel msdos mkpart primary ext2 4M 200M set 1 boot on mkpart primary ext2 200M 100%
Vérification ;
$ parted -s /dev/sdb print
Model: Lexar USB Flash Drive (scsi)
Disk /dev/sdb: 16,0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 4194kB 200MB 196MB primary boot
2 200MB 16,0GB 15,8GB primary
Formater la partition de boot :
$ sudo mkfs.ext4 -L boot /dev/sdb1
Créer le conteneur de la partition chiffrée :
$ sudo cryptsetup luksFormat /dev/sdb2
WARNING!
========
Cette action écrasera définitivement les données sur /dev/sdb2.
Are you sure? (Type uppercase yes): YES
Saisissez la phrase secrète :
Vérifiez la phrase secrète :
Ouvrir le conteneur (nom arbitraire, ici root) et formater son contenu en ext4
$ sudo cryptsetup luksOpen /dev/sdb2 root
Saisissez la phrase secrète pour /dev/sdb2 :
$ sudo mkfs.ext4 -L root /dev/mapper/root
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 3857920 4k blocs et 964768 i-noeuds.
UUID de système de fichiers=00565f80-8405-48b3-b7fb-60b623118aa2
Superblocs de secours stockés sur les blocs :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Création du journal (16384 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété
Vérification
$lsblk -f /dev/sdb2
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb2 crypto_LUKS 3ba4f7e2-b455-4a3f-84ed-da87306eb09c
└─root ext4 root 00565f80-8405-48b3-b7fb-60b623118aa2
Monter la partition root de la clé, par exemple en /mnt et la partition de boot de la clé :
$ sudo mount /dev/mapper/root /mnt
$ sudo mkdir /mnt/boot
la version à installer (stretch dans le cas présent)
le point de montage sur lequel créer le nouveau système,
dans le cas présent /mnt
les paquets à installer (ci-dessous la liste pour obtenir un système minimum opérationnel)
$ sudo deboostrap --include=grub2,linux-image-amd64,console-setup,locales,cryptsetup /mnt
Note : il sera toujours possible d'ajouter des paquets dans la
phase de chroot
Lorsque le système est créé, vérifier la présence de
l'arborescence
$ ls /mnt
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Par défaut, le fichier sources.list contient seulement :
$ cat etc/apt/sources.list
deb http://deb.debian.org/debian stretch main contrib non-free
Ajouter à minima, debian-security
# debian security
deb https://deb.debian.org/debian-security stretch/updates main contrib non-free
Par défaut, le nom d'hôte /etc/hostname est le même que
celui du système ayant servi à la construction. Mettre à
jour le fichier hosts. Par défaut :
$ cat etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Ajouter :
127.0.0.1 "nom_hote_identique_à_etc/hostname"
# cat etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
Ajouter les partitions de boot et de root :
LABEL=boot /boot ext4 defaults 0 2
/dev/mapper/root / ext4 errors=remount-ro 0 1
Créer le fichier crypttab :
Relever l'UUID de la partition chiffrée :
# blkid /dev/sdb2 -s UUID -o value
3ba4f7e2-b455-4a3f-84ed-da87306eb09c
Et l'introduire dans crypttab :
# <target name> <source device> <key file> <options>
kroot UUID=3ba4f7e2-b455-4a3f-84ed-da87306eb09c none luks
Monter le chroot :
$ sudo -- sh -c 'for i in proc sys dev dev/pts;do mount --bind /$i /mnt/$i;done'
$ sudo chroot /mnt
# aptitude update
Vérifier que les paquets console-setup, locales sont
installés. Vérifier les valeurs des "locales",
"console-setup", "tzdata" et "keyboard-configuration"
:
# sudo debconf-show locales # etc ....
et si les valeurs ne conviennent pas, reconfigurer les paquets correspondants :
# dpkg-reconfigure locales
# dpkg-reconfigure console-setup
# dpkg-redonfigure keyboard-configuration
# dpkg-reconfigure tzdata
Créer les utilisateurs, créer le mot de passe super-administrateur (root) ou / et les "sudoers"
# adduser pengouin
# passwd
# adduser pengouin sudo
Installer grub dans le secteur de démarrage de la clé usb
et configurer le menu de démarrage
# grub-install /dev/sdb
# update-grub
Mettre à jour initramfs :
# update-initramfs -u -k all
Ajouter des paquets oubliés ou supplémentaires ...
# apt install linuxlogo
Sortir du chroot
# exit
exit
$ cd /mnt
$ sudo --sh -c 'for i in dev/pts dev sys proc;do umount $i; done'
$ cd /
# umount /mnt
# eject /dev/sdb