Ubuntu Full Disk Encryption mit verschlüsseltem / Boot

15

Ich versuche, eine vollständig verschlüsselte Festplatte mit einer separaten /bootPartition einzurichten, und habe einige Probleme.

Ich schreibe die Prozedur auf, die ich bei einer Ubuntu 15.04 Live DVD-Sitzung befolgt habe.

  • Fülle die Diskette mit 'zufälligen Daten'

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Erstellen Sie die Partitionen (mit gparted)

    1. Partitionstabelle erstellen - gpt 2.
      • / dev / sda1 ext2 1.5GB #boot
      • / dev / sda2 linux-swap 4GB #swap
      • / dev / sda3 ext4 15 GB #root
      • / dev / sda4 ext4 FREESPACE #home
  • Verschlüsseln Sie 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
    
  • Öffnen Sie das Cryptovolume

    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
    
  • Installieren (mit Ubiquity)

    • Bootloader auf / dev / sda
    • / dev / sda1 - Verwendung als ext2 - Mountpunkt / boot
    • / dev / sda2 - Verwendung als ext2 - Mountpunkt / boot
    • / dev / sda3 - Verwendung als ext2 - Mountpunkt / boot
    • / dev / sda4 - Verwendung als ext2 - Mountpunkt / boot

    Am Ende warnt das Installationsprogramm, dass die Installation von grub fehlgeschlagen ist (da das Boot-Volume verschlüsselt ist). Wählen Sie daher "ohne Bootloader fortfahren".

  • Reinigen Sie das Startvolume

    mkfs.ext2 /dev/mapper/boot
    
  • Mount Volume

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Aktualisieren Sie fstab und 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
    
  • Aktualisieren Sie das initramfs-Image

    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
    
  • Bootloader konfigurieren ( /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:"
    
  • Konfigurationsdatei erstellen

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
    
  • draußen versuchen

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

Habe ich vorher einen Fehler gemacht? Wie kann ich grub weiterhin richtig konfigurieren und installieren?

Nicholas Roveda
quelle
Es tut mir leid, dass niemand geholfen hat, nachdem ich Sie dazu gebracht habe, Ihr Q auf die "richtige" Website zu verschieben. Ich habe in Ubuntu noch nicht so gut gearbeitet. Aber ich habe auf Google nach grubIhrem Titel gesucht . Ich nehme an, Sie haben Ihr Verschlüsselungsverfahren unter pavelkogan.com/2014/05/23/luks-full-disk-encryption gefunden (dies ist die erste Google-Suche zu diesem Thema). wenn nicht, hilft das vielleicht. Gute Frage! und viel Glück!
Shellter
Einige Dinge: 1. Sie erwähnen /bootals Ausgangspunkt für alles. Ich hoffe, das ist ein Tippfehler. 2. Sie haben /devbeim Chrooten nicht gemountet , aber Devpts gemountet. Oo
muru
Ein weiterer Fehler ist, dass Sie anscheinend dieselben UUIDs in crypttab und fstab verwenden. fstab sollte eigentlich die UUIDs von / dev / mapper / drives verwenden.
Aleksandr Dubinsky
1
Schauen Sie sich dieses Handbuch von einem Ubuntu-Community-Mitglied an. Ich habe es benutzt und es funktioniert sehr gut für mich.
Kapad

Antworten:

13

Sie haben einige Fehler gemacht, aber das Hauptproblem liegt in der Allgegenwart und im Grub. Wenn Sie festlegen /, dass es sich um eine verschlüsselte Partition handelt, und keine separate Partition für diese Partition erstellen /boot, gibt grub im Grunde eine Fehlermeldung aus, die wie folgt lautet:

Ich weiß, /bootist verschlüsselt. Sie müssen festgelegt GRUB_ENABLE_CRYPTODISK=yin /etc/default/grub. Ich werde es nicht für Sie tun, also werde ich scheitern und Ihre Installation wird gestoppt.

Ein Überblick über den Prozess

  • Wir verwenden den EFI-Modus.
  • Wir installieren auf einer unverschlüsselten /bootPartition und einem verschlüsselten BTRFS /mit dem Standard-Installationsprogramm.
  • Nach Abschluss des Installationsprogramms nehmen wir chrooteinige wichtige Konfigurationsänderungen vor und installieren grub erneut auf der EFI-Systempartition und erstellen initrd neu.

Die detaillierten Schritte

  • Booten Sie von der Ubuntu 16.04-Installationsdiskette (getestet mit Xubuntu).
  • Stellen Sie eine Verbindung zum Internet her und führen Sie sudo apt update && sudo apt upgradeden Befehl aus, um die Installationskomponenten zu aktualisieren
  • Verwenden Sie fdisk, gpartedoder ein anderes Tool, um 3 Partitionen zu erstellen:
    • Eine GPT-Partitionstabelle
    • Eine 200-MB-Partition, die wir für die EFI-Systempartition verwenden
    • Eine Multi-Gigabyte-Partition, die wir irgendwann als verschlüsselte Swap-Partition verwenden werden, die jedoch als temporäre unverschlüsselte Partition fungiert /boot
    • Eine verschlüsselte Partition, die den Rest des Speicherplatzes nutzt
  • Bereiten Sie die verschlüsselte Partition vor

    sudo cryptsetup luksFormat /dev/sda3
    sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt
    sudo mkfs.btrfs /dev/mapper/sda3_crypt
    
  • Installieren Sie Ubuntu

    • Wählen Sie "Etwas anderes", wenn Sie nach dem Installationstyp gefragt werden.
    • Konfigurieren /dev/sda1alsEFI System Partition
    • Konfigurieren Sie /dev/sda2als ext2, formatiert, mit Mount-Punkt von/boot
    • Konfigurieren Sie /dev/mapper/sda3_cryptals BTRFS mit Mount-Punkt von/
    • Fahren Sie mit der Installation fort.
    • Wählen Sie nach Abschluss des Vorgangs, ob Sie im Live-System bleiben möchten (kein Neustart).
  • Kopieren Sie den Inhalt von /bootund machen Sie achroot

    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
    
  • (Alles geschieht jetzt wie chrootin Ihrem neuen System.)

  • Zeile hinzufügen zu /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Zeile hinzufügen zu /etc/crypttab. Sie müssen zuerst ausgeführt werden sudo blkid, um die UUID von /dev/sda3(NOT /dev/mapper/sda3_crypt) zu ermitteln.

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Bearbeiten /etc/fstabund löschen Sie die Zeile für /boot. Die anderen Einträge sind korrekt.

  • Installieren Sie grub auf der EFI-Systempartition, generieren Sie eine neue Datei grub.cfg und bereiten Sie initrd vor.

    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
    
  • Optionale Überprüfung: Überprüfen Sie, ob /boot/efi/EFI/ubuntu/grub/grub.cfgZeilen enthalten insmod lukssind cryptomount -u <UUID>, die korrekten Starteinträge usw., und überprüfen Sie, ob Ihre initrd die cryptsetupBinärdatei enthält . Wenn diese Dinge fehlen, liegt es daran, dass grub-mkconfig und / oder update-initrd nicht herausfinden konnten, wie sich die Volumes, die Sie in fstab bereitgestellt oder angegeben haben, auf das verschlüsselte Volume in crypttab beziehen. (Es gibt eine Menge magischer Autokonfigurationen.) Dies kann passieren, wenn Sie von diesem Handbuch abweichen, indem Sie beispielsweise ZFS verwenden oder versuchen, sda3_crypt zu partitionieren.

  • (Wenn Sie ZFS anstelle von btrfs verwenden) grub-mkconfig und update-initrd erkennen ZFS nicht. Die Problemumgehung umfasst (während chroot vor grub-mkconfig / update-initrd) das Bearbeiten /usr/sbin/grub-mkconfig, um || truezu Zeile 139 (die mit beginnt GRUB_DEVICE=), Hinzufügen GRUB_DEVICE="/dev/mapper/sda3_crypt"zu /etc/default/grub, Erstellen von Dateien /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupmit Inhalten export CRYPTSETUP=yund Dateien /etc/initramfs-tools/conf.d/cryptrootmit Inhalten hinzuzufügen target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Dies alles zusätzlich zu den Schritten, die Sie ausführen würden, wenn Sie die ZFS-Partition nicht verschlüsseln würden (z. B. das Installieren von zfs-Userspace-Utils sowohl im Live-System als auch während chroot und das Löschen der /in fstab bereitgestellten Zeile ).

  • Beenden Sie chroot und starten Sie Ihr neues System neu

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • Sie sollten sehen, wie grub Sie nach Ihrem Passwort fragt. Dann erhalten Sie das Boot-Menü. Nachdem Sie Ubuntu gewählt haben, werden Sie erneut nach Ihrem Passwort gefragt. Dann sind Sie in Ihrem System. Lesen Sie mehr darüber, wie Ubuntu BTRFS verwendet .

  • TODO : Erstellen Sie einen verschlüsselten Swap (Hinweis: Bearbeiten von Crypttab, Fstab und erneutes Ausführen update-initrd).

  • TODO : Speichern Sie Ihr Passwort, damit Sie es nur einmal in grub eingeben müssen. Dies wird hier detailliert beschrieben .

Upgrades

  • Jedes Mal, wenn Sie einen neuen Kernel installieren, sollten Sie den benutzerdefinierten grub-mkconfigBefehl ausführen .
  • Jedes Mal, wenn Sie grub aktualisieren, sollten Sie den benutzerdefinierten grub-installBefehl ausführen .

Weitere Hinweise

  • Es ist verlockend, ein einzelnes verschlüsseltes Volume zu erstellen und es zu partitionieren, um die Swap-Partition (und möglicherweise andere) zu erstellen, aber dies funktioniert nicht. Sowohl grub-mkconfig als auch update-initrd verhalten sich fehlerhaft. Ich habe LVM jedoch nicht ausprobiert.
  • Es mag verlockend sein, ein Swapfile auf btrfs zu setzen , aber es ist wahrscheinlich eine schlechte Idee wegen der Leistung.
Aleksandr Dubinsky
quelle
Nur klarstellen, was ich denke, dass Sie bereits wissen (laut Ihrem Kommentar): fstabund in der Frage crypttabeigentlich nicht richtig sind. crypttabsollte auf die uuidder rohen /dev/sdxYGeräte zeigen; fstabsollte auf die geöffneten Verschlüsselungsgeräte zeigen /dev/mapper/label.
Hendy
Vielen Dank für diese Antwort, es hat mir geholfen, dies einzurichten.
13.
Ich halte eigentlich nichts von dieser wahren FDE, da Partitionsinformationen durchgesickert sind. Bei True FDE müssen alle Sektoren mit Daten verschlüsselt sein (mit Ausnahme des LUKS-Headers am Anfang, obwohl dies technisch nicht erforderlich ist, wenn ein losgelöster Header verwendet wird). Ich mache FDE mit LVM in LUKS, also funktioniert es definitiv und kann netter sein, wenn Sie später die Partitions- / Volume-Größen ändern müssen. Hier ist ein alter Blog-Beitrag dazu in 12.04, der aber in späteren Versionen funktionieren sollte.
krasse
Auch die Verwendung einer Swap-Datei für BTRFS ist definitiv eine schlechte Idee ...
krasse
In Ihrer grub-installAnweisung haben Sie einen --bootloader=ubuntuParameter. Ich kann dieses Argument weder in Ubuntus noch in GNUs Handbüchern finden. Können Sie klarstellen, was es tut oder wo es dokumentiert ist?
Samuel Harmer