web-dev-qa-db-fra.com

Chiffrement intégral du disque Ubuntu avec / boot chiffré

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)

    1. Créer une table de partition - gpt 2.
      • / dev/sda1 ext2 1.5Go #boot
      • / dev/sda2 linux-swap 4 Go #swap
      • / dev/sda3 ext4 15 Go # racine
      • / dev/sda4 ext4 FREESPACE #home
  • 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)

    • chargeur de démarrage sur/dev/sda
    • / dev/sda1 - utilise comme ext2 - point de montage/boot
    • / dev/sda2 - utilise comme ext2 - point de montage/boot
    • / dev/sda3 - utilise comme ext2 - point de montage/boot
    • / dev/sda4 - utilise comme ext2 - point de montage/boot

    À 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?

14
Nicholas Roveda

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éfinir GRUB_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.

Un aperçu du processus:

  • Nous utilisons le mode EFI.
  • Nous installons sur une partition /boot non chiffrée et un btrfs / chiffré à l’aide du programme d’installation standard.
  • Une fois le programme d'installation terminé, chroot, apportons d'importantes modifications à la configuration, réinstallez grub sur la partition système EFI et recréez ainsi initrd.

Les étapes détaillées:

  • Démarrez à partir du disque d'installation Ubuntu 16.04 (testé avec Xubuntu).
  • Connectez-vous à Internet et exécutez Sudo apt update && Sudo apt upgrade pour mettre à jour les composants du programme d'installation.
  • Utilisez fdisk, gparted ou un autre outil pour créer 3 partitions:
    • Une table de partition GPT
    • Une partition de 200 Mo que nous utiliserons pour la partition système EFI
    • Une partition de plusieurs gigaoctets que nous utiliserons par la suite comme notre partition d'échange cryptée, mais qui fonctionnera comme notre /boot non crypté temporaire
    • Une partition chiffrée qui utilise le reste de l'espace
  • Pré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

    • Choisissez "Quelque chose d'autre" lorsque vous êtes interrogé sur le type d'installation.
    • Configurez /dev/sda1 comme EFI System Partition
    • Configurez /dev/sda2 comme ext2, formaté, avec le point de montage de /boot
    • Configurez /dev/mapper/sda3_crypt en tant que btrfs avec le point de montage de /
    • Continuez avec l'installation.
    • Une fois l’opération terminée, choisissez de rester dans le système actif (pas de redémarrage).
  • 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).

  • TODO: Sauvegardez votre mot de passe afin que vous ne deviez le saisir qu'une seule fois dans grub. Ceci est détaillé dans: http://webcache.googleusercontent.com/search?q=cache:z2MwHuPWTakJ:missinglink.xyz/security/tutorial-debianubuntu-full-disk-encryption-luks-fde-including-encrypted -boot/cryptage-disque-complet-amélioré-add-luks-clé-fichier-initrdinitramfs/+ & cd = 1 & hl = fr & ct = clnk & gl = us

Mises à niveau

  • Chaque fois que vous installez un nouveau noyau, vous devez exécuter la commande personnalisée grub-mkconfig.
  • Chaque fois que vous mettez à jour grub, vous devez exécuter la commande grub-install personnalisée.

Autres notes

  • Il est tentant de créer un seul volume chiffré et de le partitionner pour créer la partition de swap (et éventuellement d'autres), mais cela ne fonctionne pas. Grub-mkconfig et update-initrd se conduiront mal. Cependant, je n'ai pas essayé LVM.
  • Il peut être tentant d'utiliser un fichier d'échange au-dessus de btrfs, mais c'est probablement une mauvaise idée en raison des performances.
12
Aleksandr Dubinsky