Chiffrement complet du disque Ubuntu avec chiffré / démarrage

15

J'essaie de configurer un disque crypté complet avec une /bootpartition séparée et j'ai des problèmes.

J'écrirai la procédure que j'ai suivie lors d'une session Ubuntu 15.04 Live DVD.

  • 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,5 Go #boot
      • / dev / sda2 linux-swap 4GB #swap
      • / dev / sda3 ext4 15 Go #root
      • / dev / sda4 ext4 FREESPACE #home
  • Chiffrer les 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 - utiliser comme ext2 - point de montage / démarrage
    • / dev / sda2 - utiliser comme ext2 - point de montage / démarrage
    • / dev / sda3 - utiliser comme ext2 - point de montage / démarrage
    • / dev / sda4 - utiliser comme ext2 - point de montage / démarrage

    À la fin, le programme d'installation avertit que l'installation de grub a échoué (car le volume de démarrage est crypté), choisissez donc «continuer sans chargeur de démarrage».

  • Nettoyer le volume de démarrage

    mkfs.ext2 /dev/mapper/boot
    
  • Monter le volume

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Mettre à jour 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
    
  • Mettre à jour 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'.]
    
  • essayez dehors

    $ exit
    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/cow'.]
    

Ai-je fait une erreur avant ça? Comment continuer à configurer et installer correctement grub?

Nicholas Roveda
la source
Je me sens mal qu'après vous avoir fait déplacer votre Q vers le site "correct", personne n'a aidé. Je n'ai pas fait ce niveau de travail dans Ubuntu. Mais j'ai cherché sur google pourgrub + votre titre. Je suppose que vous avez trouvé votre procédure de cryptage sur pavelkogan.com/2014/05/23/luks-full-disk-encryption (qui est la première recherche google sur ce sujet). sinon, cela peut aider. Bonne question! et bonne chance!
shellter
Quelques choses: 1. Vous mentionnez /boot comme point de montage pour tout. J'espère que c'est une faute de frappe. 2. Vous n'avez pas monté /deven chrootant, mais vous avez monté des devpts. Oo
muru
Une autre erreur est que vous semblez utiliser les mêmes UUID dans crypttab et fstab. fstab devrait en fait utiliser les UUID des lecteurs / dev / mapper /.
Aleksandr Dubinsky
1
check-out ce guide par un membre de la communauté Ubuntu. Je l'ai utilisé et cela fonctionne très bien pour moi.
kapad

Réponses:

13

Vous avez fait des erreurs, mais le principal problème est l'ubiquité et la bouffe. Fondamentalement, lorsque vous définissez /une partition chiffrée et que vous ne créez pas de partition distincte pour /boot, grub affiche un message d'erreur comme:

Je sais /bootest crypté. Vous devez définir GRUB_ENABLE_CRYPTODISK=ydans /etc/default/grub. Je ne le ferai pas pour vous, donc je vais échouer et votre installation s'arrêtera.

Un aperçu du processus

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

Les étapes détaillées

  • Démarrez à partir du disque d'installation d'Ubuntu 16.04 (testé avec Xubuntu).
  • Connectez-vous à Internet et exécutez sudo apt update && sudo apt upgradepour mettre à jour les composants du programme d'installation
  • Utiliser 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 éventuellement comme partition d'échange cryptée, mais qui fonctionnera comme notre partition temporaire non chiffrée /boot
    • Une partition chiffrée qui utilise le reste de l'espace
  • Préparez 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 "Autre chose" lorsqu'on lui demande le type d'installation.
    • Configurer en /dev/sda1tant queEFI System Partition
    • Configurer /dev/sda2en ext2, formaté, avec point de montage de/boot
    • Configurer en /dev/mapper/sda3_crypttant que btrfs avec point de montage de/
    • Continuez l'installation.
    • Une fois terminé, choisissez de rester dans le système en direct (pas de redémarrage).
  • Copiez le contenu de /bootet faites unchroot

    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 comme chrootdans votre nouveau système.)

  • Ajouter une ligne à /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Ajoutez une ligne à /etc/crypttab. Vous devrez d'abord exécuter sudo blkidpour trouver l'UUID de /dev/sda3(NOT /dev/mapper/sda3_crypt).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Modifiez /etc/fstabet supprimez la ligne pour /boot. Les autres entrées sont correctes.

  • Installez grub sur la partition système EFI, générez un nouveau 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: double vérification qui /boot/efi/EFI/ubuntu/grub/grub.cfgcontient les lignes qui incluent insmod luks, cryptomount -u <UUID>les entrées de démarrage correctes, etc. Et double vérification que votre initrd contient le cryptsetupbinaire. Si ces éléments manquent, c'est parce que grub-mkconfig et / ou update-initrd n'ont pas pu comprendre comment les volumes que vous avez montés ou spécifiés dans fstab sont liés au volume chiffré dans crypttab. (Il y a beaucoup de configuration automatique magique qu'ils font.) Cela peut se produire si vous divergez de ce guide en utilisant, par exemple, 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 implique (pendant chroot, avant grub-mkconfig / update-initrd) édition /usr/sbin/grub-mkconfigajouter || trueà la ligne 139 (qui commence par GRUB_DEVICE=), en ajoutant GRUB_DEVICE="/dev/mapper/sda3_crypt"à /etc/default/grub, la création du fichier /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupavec le contenu export CRYPTSETUP=yet le fichier /etc/initramfs-tools/conf.d/cryptrootavec le contenu target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Tout cela s'ajoute aux étapes que vous suivriez si vous ne chiffriez pas la partition ZFS (comme l'installation des utilitaires de l'espace utilisateur zfs dans le système en direct et pendant le chroot et la suppression de 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 obtiendrez le menu de démarrage. Après avoir choisi Ubuntu, il vous sera demandé à nouveau votre mot de passe. Ensuite, vous serez dans votre système. En savoir plus sur la façon dont Ubuntu utilise BTRFS .

  • TODO : Créez un échange crypté (indice: cela implique la modification de crypttab, fstab et la réexécution update-initrd).

  • TODO : Enregistrer votre mot de passe afin que vous ne devez entrer une fois dans grub. Ceci est détaillé ici .

Mises à jour

  • Chaque fois que vous installez un nouveau noyau, vous devez exécuter la personnalisation grub-mkconfig commande.
  • Chaque fois que vous mettez à jour grub, vous devez exécuter la grub-installcommande 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 comporteront 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.
Aleksandr Dubinsky
la source
Simplement clarifier ce que je pense que vous savez déjà (par votre commentaire): fstabet ne crypttabsont pas corrects dans la question. crypttabdevrait pointer vers les périphériques uuidbruts /dev/sdxY; fstabdevrait pointer vers les périphériques de cryptage ouverts à /dev/mapper/label.
Hendy
Merci d'avoir fait cette réponse, cela m'a aidé à mettre cela en place.
x13
En fait, je ne considère aucun de ces vrais FDE, car des informations de partition ont été divulguées. True FDE fait en sorte que tous les secteurs soient des données chiffrées (à l'exception de l'en-tête LUKS au début, bien que cela ne soit techniquement pas nécessaire en utilisant un en-tête détaché). Je fais FDE en utilisant LVM à l'intérieur de LUKS, donc cela fonctionne certainement et peut être plus agréable si vous devez changer les tailles de partition / volume plus tard. Voici un ancien article de blog sur cette opération en 12.04, mais devrait fonctionner dans les versions ultérieures.
crass
De plus, l'utilisation d'un fichier d'échange sur BTRFS est certainement une mauvaise idée ...
crass
Dans votre grub-installinstruction, vous avez un --bootloader=ubuntuparamètre. Je n'arrive pas à trouver cet argument dans les manuels d' Ubuntu ou de GNU . Pourriez-vous clarifier ce qu'il fait ou où il est documenté?
Samuel Harmer