J'essaie de configurer un disque entièrement chiffré avec une partition séparée /boot
et je rencontre des problèmes.
Je vais écrire la procédure que j'ai suivie lors d'une session Live DVD Ubuntu 15.04.
Remplissez le disque avec des 'données aléatoires'
Sudo dd if=/dev/urandom of=/dev/sda1 bs=4096 #ok
Créer les partitions (en utilisant gparted)
Crypter des volumes
cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
--hash sha512 --iter-time 3000 /dev/sda1
cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
--hash sha512 --iter-time 3000 /dev/sda2
cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
--hash sha512 --iter-time 3000 /dev/sda3
cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512
--hash sha512 --iter-time 5000 /dev/sda4
Cryptovolume ouvert
cryptsetup luksOpen /dev/sda1 boot
cryptsetup luksOpen /dev/sda2 swap
cryptsetup luksOpen /dev/sda3 root
cryptsetup luksOpen /dev/sda4 home
Format
mkfs.ext2 /dev/mapper/boot
mkswap /dev/mapper/swap
mkfs.ext4 /dev/mapper/root
mkfs.ext2 /dev/mapper/home
Installer (en utilisant Ubiquity)
À la fin, le programme d'installation signale que l'installation de grub a échoué (car le volume de démarrage est chiffré), choisissez donc "continuer sans chargeur de démarrage".
Volume de démarrage propre
mkfs.ext2 /dev/mapper/boot
Monter le volume
mkdir /mnt/root
mount /dev/mapper/root /mnt/root
mount /dev/mapper/boot /mnt/root/boot
Mise à jour de fstab et crypttab
Sudo blkid
[/dev/sr0: UUID="2015-10-21-16-17-40-00" LABEL="Ubuntu 15.10 AMD64"
TYPE="iso9660" PTUUID="429817b4" PTTYPE="dos"
/dev/sda1: UUID="...#1" TYPE="crypto_LUKS" PARTUUID="..."
/dev/sda2: UUID="...#2" TYPE="crypto_LUKS" PARTUUID="..."
/dev/sda3: UUID="...#3" TYPE="crypto_LUKS" PARTUUID="..."
/dev/sda4: UUID="...#4" TYPE="crypto_LUKS" PARTUUID="..."
/dev/mapper/boot: UUID="..." TYPE="ext2"
/dev/mapper/swap: UUID="..." TYPE="swap"
/dev/mapper/root: UUID="..." TYPE="ext4"
/dev/mapper/home: UUID="..." TYPE="ext4"]
fstab
#<file system> <mount point> <type> <options> <dump> <pass>
UUID=#1 /boot ext2 defaults 0 2
UUID=#2 none swap sw 0 0
UUID=#3 / ext4 errors=remount-ro 0 1
UUID=#4 /home ext4 defaults 0 2
crypttab
boot UUID=#1 luks,cipher=twofish-xts-plain64,size=512,
hash=whirlpool, time=3000
swap UUID=#2 luks,swap,cipher=twofish-xts-plain64,size=512,
hash=whirlpool,time=3000
root UUID=#3 luks,cipher=twofish-xts-plain64,size=512,
hash=whirlpool,time=3000
home UUID=#4 luks,cipher=twofish-xts-plain64,size=512,
hash=whirlpool,time=5000
Mise à jour de l'image initramfs
cd /mnt
Sudo chroot root
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devpts devpts /dev/pts
update-initramfs -u #ok
Configurer le chargeur de démarrage (/etc/default/grub
)
GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="luks cryptodisk"
GRUB_CMDLINE_LINUX="cryptdevice=UUID#3:root root=/dev/mapper/root resume=/dev/mapper/swap
crypto=whirlpool:twofish-xts-plain64:512:0:"
créer un fichier de configuration
$ grub-mkconfig -o /boot/grub/grub.cfg
[/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
essayer dehors
$ exit
$ grub-mkconfig -o /boot/grub/grub.cfg
[/usr/sbin/grub-probe: error: failed to get canonical path of `/cow'.]
Ai-je commis une erreur avant cela? Comment puis-je continuer à configurer et installer correctement grub?
Vous avez commis des erreurs, mais le problème principal réside dans l’ubiquité et la bouffe. En gros, lorsque vous définissez /
comme une partition chiffrée et que vous ne créez pas de partition séparée pour /boot
, grub affiche un message d'erreur du type:
Je sais que
/boot
est crypté. Vous devez définirGRUB_ENABLE_CRYPTODISK=y
dans/etc/default/grub
. Je ne le ferai pas pour vous, je vais donc échouer et votre installation va s'arrêter.
/boot
non chiffrée et un btrfs /
chiffré à l’aide du programme d’installation standard.chroot
, apportons d'importantes modifications à la configuration, réinstallez grub sur la partition système EFI et recréez ainsi initrd.Sudo apt update && Sudo apt upgrade
pour mettre à jour les composants du programme d'installation./boot
non crypté temporairePréparer la partition chiffrée
Sudo cryptsetup luksFormat /dev/sda3
Sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
Sudo mkfs.btrfs /dev/mapper/sda3_crypt
Installez Ubuntu
/dev/sda1
comme EFI System Partition
/dev/sda2
comme ext2, formaté, avec le point de montage de /boot
/dev/mapper/sda3_crypt
en tant que btrfs avec le point de montage de /
Copiez le contenu de /boot
et faites un chroot
Sudo mount -o subvol=@ /dev/mapper/sda3_crypt /target
Sudo mount /dev/sda2 /mnt
# (Watch those trailing slashes! rsync is very sensitive to them.)
Sudo rsync -aXAH /mnt/ /target/boot/
Sudo mount /dev/sda1 /target/boot/efi
Sudo mount --bind /dev /target/dev
Sudo mount --bind /proc /target/proc
Sudo mount --bind /sys /target/sys
Sudo chroot /target
(Tout se passe maintenant sous la forme chroot
dans votre nouveau système.)
Ajouter une ligne à /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
Ajouter une ligne à /etc/crypttab
. Vous devrez d'abord exécuter Sudo blkid
pour trouver l'UUID de /dev/sda3
(NOT /dev/mapper/sda3_crypt
).
sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
Éditez /etc/fstab
et supprimez la ligne pour /boot
. Les autres entrées sont correctes.
Installez grub sur la partition système EFI, générez un nouveau fichier grub.cfg et préparez initrd.
Sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck
Sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub/grub.cfg
Sudo update-initramfs -c -k all
(double vérification facultative) Vérifiez que /boot/efi/EFI/ubuntu/grub/grub.cfg contient des lignes comprenant insmod luks
, cryptomount -u <UUID>
, les entrées de démarrage correctes, etc. Et vérifiez que votre initrd contient le binaire cryptsetup
. Si ces éléments manquent, c'est que grub-mkconfig et/ou update-initrd ne peuvent pas comprendre le lien entre les volumes montés ou spécifiés dans fstab et le volume chiffré dans crypttab. Cela peut se produire si vous vous écartez de ce guide, par exemple en utilisant ZFS ou en essayant de partitionner sda3_crypt.
(Si vous utilisez ZFS au lieu de btrfs) grub-mkconfig et update-initrd ne reconnaîtront pas ZFS. La solution de contournement consiste (lors du chroot, avant grub-mkconfig/update-initrd) à modifier /usr/sbin/grub-mkconfig
pour ajouter || true
à la ligne 139 (qui commence par GRUB_DEVICE=
), à ajouter GRUB_DEVICE="/dev/mapper/sda3_crypt"
à /etc/default/grub
, à créer le fichier /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetup
avec le contenu export CRYPTSETUP=y
et le fichier /etc/initramfs-tools/conf.d/cryptroot
avec le contenu target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard
. Tout cela s'ajoute aux étapes à suivre si vous ne chiffriez pas la partition ZFS (comme installer des utilitaires zfs userspace dans le système live et pendant le chroot et supprimer la ligne qui monte /
dans fstab).
Quittez chroot et redémarrez dans votre nouveau système
exit
Sudo umount /target/boot/efi
Sudo umount /target/dev
Sudo umount /target/proc
Sudo umount /target/sys
Sudo umount /target
Sudo reboot
Vous devriez voir grub vous demander votre mot de passe. Ensuite, vous aurez le menu de démarrage. Ensuite, après avoir choisi Ubuntu, votre mot de passe vous sera demandé à nouveau. Ensuite, vous serez dans votre système. En savoir plus sur comment Ubuntu utilise BTRFS .
TODO: Créez un échange crypté (indice: cela implique la modification de la table de chiffrement, fstab et la réexécution de update-initrd).
grub-mkconfig
.grub-install
personnalisée.