Pełne szyfrowanie dysku Ubuntu z szyfrowaniem / bootowaniem

15

Próbuję skonfigurować pełny zaszyfrowany dysk z oddzielną /bootpartycją i mam pewne problemy.

Spiszę procedurę, którą śledziłem podczas sesji Live DVD Ubuntu 15.04.

  • Wypełnij dysk „losowymi danymi”

    sudo dd if=/dev/urandom of=/dev/sda1 bs=4096   #ok
    
  • Utwórz partycje (używając gparted)

    1. Utwórz tablicę partycji - 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
  • Szyfruj woluminy

    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
    
  • Otwórz kryptowaluty

    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
    
  • Zainstaluj (używając Ubiquity)

    • program ładujący na / dev / sda
    • / dev / sda1 - użyj jako ext2 - punkt podłączenia / boot
    • / dev / sda2 - użyj jako ext2 - punkt podłączenia / boot
    • / dev / sda3 - użyj jako ext2 - punkt podłączenia / boot
    • / dev / sda4 - użyj jako ext2 - punkt podłączenia / boot

    Na koniec instalator ostrzega, że ​​grub-install nie powiódł się (ponieważ wolumin rozruchowy jest zaszyfrowany), więc wybierz „kontynuuj bez bootloadera”.

  • Wyczyść wolumin rozruchowy

    mkfs.ext2 /dev/mapper/boot
    
  • Zamontuj głośność

    mkdir /mnt/root
    mount /dev/mapper/root /mnt/root
    mount /dev/mapper/boot /mnt/root/boot
    
  • Zaktualizuj fstab i 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
    
  • Zaktualizuj obraz 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
    
  • Skonfiguruj bootloader ( /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:"
    
  • utwórz plik konfiguracyjny

    $ grub-mkconfig -o /boot/grub/grub.cfg
    [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
    
  • spróbuj na zewnątrz

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

Czy popełniłem wcześniej jakiś błąd? Jak mogę nadal poprawnie konfigurować i instalować GRUB?

Nicholas Roveda
źródło
Czuję się źle, że po nakłonieniu cię do przeniesienia twojego Q na „poprawną” stronę, nikt nie pomógł. Nie wykonałem tego poziomu pracy w Ubuntu. Ale szukałem w Google grub+ twojego tytułu. Podejrzewam, że znalazłeś swoją procedurę szyfrowania na pavelkogan.com/2014/05/23/luks-full-disk-encryption (która jest pierwszą wyszukiwarką google na ten temat). jeśli nie, może to pomoże. Dobre pytanie! i powodzenia!
shellter
Kilka rzeczy: 1. Wymieniasz /bootjako punkt mocowania wszystkiego. Mam nadzieję, że to literówka. 2. Nie /devwspinałeś się podczas chrootowania, ale montowałeś oddanych. Oo
muru
Kolejnym błędem jest to, że używasz tych samych UUID w crypttab i fstab. fstab powinien używać UUID w / dev / mapper / napędy.
Aleksandr Dubinsky
1
zapoznaj się z tym przewodnikiem członka społeczności Ubuntu. Użyłem go i działa bardzo dobrze dla mnie.
kapad

Odpowiedzi:

13

Popełniłeś kilka błędów, ale głównym problemem jest wszechobecność i grub. Zasadniczo, gdy ustawisz /się na zaszyfrowaną partycję i nie utworzysz osobnej partycji /boot, grub wyświetli komunikat o błędzie:

Wiem, że /bootjest zaszyfrowany. Trzeba ustawić GRUB_ENABLE_CRYPTODISK=yw /etc/default/grub. Nie zrobię tego dla ciebie, więc się nie uda, a twoja instalacja się zatrzyma.

Przegląd procesu

  • Używamy trybu EFI.
  • Instalujemy na nieszyfrowanej /bootpartycji i zaszyfrowanym pliku btrfs /przy użyciu standardowego instalatora.
  • Po zakończeniu instalatora chrootdokonujemy ważnych zmian w konfiguracji i ponownie instalujemy grub na partycji systemowej EFI i ponownie tworzymy initrd.

Szczegółowe kroki

  • Rozruch z dysku instalacyjnego Ubuntu 16.04 (testowany z Xubuntu).
  • Połącz się z Internetem i uruchom, sudo apt update && sudo apt upgradeaby zaktualizować komponenty instalatora
  • Użyj fdisk, gpartedlub innego narzędzia, aby utworzyć 3 partycje:
    • Tabela partycji GPT
    • Partycja 200 MB, której użyjemy do partycji systemowej EFI
    • Wielogigabajtowa partycja, której ostatecznie będziemy używać jako naszej zaszyfrowanej partycji wymiany, ale która będzie działać jako nasza tymczasowa niezaszyfrowana /boot
    • Zaszyfrowana partycja, która wykorzystuje resztę miejsca
  • Przygotuj zaszyfrowaną partycję

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

    • Wybierz „Coś innego”, gdy zostaniesz zapytany o typ instalacji.
    • Skonfiguruj /dev/sda1jakoEFI System Partition
    • Skonfiguruj /dev/sda2jako ext2, sformatowany, z punktem podłączenia/boot
    • Skonfiguruj /dev/mapper/sda3_cryptjako btrfs z punktem montowania/
    • Kontynuuj instalację.
    • Po zakończeniu wybierz pozostanie w systemie na żywo (bez ponownego uruchamiania).
  • Skopiuj zawartość /booti wykonajchroot

    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
    
  • (Wszystko dzieje się teraz jak chrootw twoim nowym systemie).

  • Dodaj linię do /etc/default/grub

    GRUB_ENABLE_CRYPTODISK=y
    
  • Dodaj linię do /etc/crypttab. Musisz najpierw uruchomić, sudo blkidaby znaleźć identyfikator UUID /dev/sda3(NIE /dev/mapper/sda3_crypt).

    sda3_crypt UUID=<UUID of /dev/sda3> none luks,discard
    
  • Edytuj /etc/fstabi usuń wiersz dla /boot. Pozostałe wpisy są poprawne.

  • Zainstaluj grub na partycji systemowej EFI, wygeneruj nowy grub.cfg i przygotuj 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
    
  • Opcjonalne podwójne sprawdzenie: podwójne sprawdzenie, które /boot/efi/EFI/ubuntu/grub/grub.cfgzawiera wiersze zawierające insmod luks, cryptomount -u <UUID>poprawne wpisy rozruchu itp. I podwójne sprawdzenie, czy initrd zawiera cryptsetupplik binarny. Jeśli tych rzeczy brakuje, to dlatego, że grub-mkconfig i / lub update-initrd nie mogą dowiedzieć się, w jaki sposób woluminy, które zamontowałeś lub podałeś w fstab, odnoszą się do zaszyfrowanego woluminu w crypttab. (Jest w nich wiele magicznej autokonfiguracji.) Może się tak zdarzyć, jeśli odejdziesz od tego przewodnika, na przykład używając ZFS lub próbując podzielić sda3_crypt na partycje.

  • (Jeśli używasz ZFS zamiast btrfs) grub-mkconfig i update-initrd nie rozpoznają ZFS. Obejście obejmuje (podczas chroot, przed grub-mkconfig / update-initrd) edycję w /usr/sbin/grub-mkconfigcelu dodania || truedo linii 139 (która zaczyna się od GRUB_DEVICE=), dodawanie GRUB_DEVICE="/dev/mapper/sda3_crypt"do /etc/default/grub, tworzenie pliku /usr/share/initramfs-tools/conf-hooks.d/forcecryptsetupz zawartością export CRYPTSETUP=yi pliku /etc/initramfs-tools/conf.d/cryptrootz zawartością target=sda3_crypt,source=UUID=<UUID of sda3>,key=none,discard. Wszystko to jest dodatkiem do kroków, które należy wykonać, jeśli nie szyfrujesz partycji ZFS (np. Instalowanie narzędzi przestrzeni użytkownika zfs zarówno w systemie live, jak i podczas chroot i usuwanie linii montowanej /w fstab).

  • Wyjdź z chroota i uruchom ponownie w nowym systemie

    exit
    sudo umount /target/boot/efi
    sudo umount /target/dev
    sudo umount /target/proc
    sudo umount /target/sys
    sudo umount /target
    sudo reboot
    
  • Powinieneś zobaczyć gruba pytającego o twoje hasło. Następnie pojawi się menu rozruchu. Po wybraniu Ubuntu ponownie zostaniesz poproszony o podanie hasła. Wtedy będziesz w swoim systemie. Przeczytaj więcej o tym, jak Ubuntu używa BTRFS .

  • DO ZROBIENIA : Utwórz zaszyfrowaną wymianę (wskazówka: wymaga edycji crypttab, fstab i ponownego uruchomienia update-initrd).

  • DO ZROBIENIA : Zapisz swoje hasło, aby wystarczyło tylko raz wpisać je w grub. Jest to szczegółowo opisane tutaj .

Ulepszenia

  • Za każdym razem, gdy instalujesz nowe jądro, powinieneś uruchomić niestandardowe grub-mkconfigpolecenie.
  • Za każdym razem, gdy aktualizujesz gruba, powinieneś uruchomić niestandardowe grub-installpolecenie.

Inne notatki

  • Kuszące jest utworzenie jednego zaszyfrowanego woluminu i podzielenie go na partycje, aby utworzyć partycję wymiany (i ewentualnie inne), ale to nie działa. Zarówno grub-mkconfig, jak i update-initrd będą się źle zachowywać. Jednak nie próbowałem LVM.
  • Używanie pliku wymiany na btrfs może być kuszące , ale prawdopodobnie jest to zły pomysł ze względu na wydajność.
Aleksandr Dubinsky
źródło
Wyjaśniając to, co myślę, że już wiesz (na podstawie komentarza): fstabi crypttabfaktycznie nie są poprawne w pytaniu. crypttabpowinien wskazywać uuidna surowe /dev/sdxYurządzenia; fstabpowinien wskazywać otwarte urządzenia szyfrujące na /dev/mapper/label.
Hendy
Dziękuję za udzielenie tej odpowiedzi, pomogło mi to skonfigurować.
x13
Właściwie nie uważam żadnego z tego prawdziwego FDE, ponieważ wyciekły informacje o partycjach. Prawda FDE polega na tym, że wszystkie sektory mają zaszyfrowane dane (z wyjątkiem nagłówka LUKS na początku, choć technicznie nie jest to konieczne przy użyciu odłączonego nagłówka). Robię FDE przy użyciu LVM w LUKS, więc na pewno działa i może być ładniejszy, jeśli będziesz musiał później zmienić rozmiary partycji / woluminów. Oto stary post na blogu na ten temat w 12.04, ale powinien działać w późniejszych wersjach.
crass
Ponadto, stosując plik wymiany na Btrfs jest zdecydowanie zły pomysł ...
tępy
W twojej grub-installinstrukcji masz --bootloader=ubuntuparametr. Nie mogę znaleźć tego argumentu w podręcznikach Ubuntu ani GNU . Czy możesz wyjaśnić, co robi lub gdzie jest udokumentowane?
Samuel Harmer