Szyfrowanie prawie całego dysku na Ubuntu

Szyfrować, czy nie szyfrować? Oto jest pytanie!

Dla niektórych odpowiedź jest prosta. Dla innych wręcz przeciwnie. Szyfrowanie dysku to zdecydowanie większe bezpieczeństwo danych i wyższy poziom prywatności. Ceną, jaką za to płacimy, jest obniżona wydajność dysku i niekiedy utrudniona instalacja systemu.

Szyfrować zatem dysk, czy nie? Wszystko zależy od priorytetów, choć osobiście uważam, że warto poświęcić część wydajności na rzecz wyższego bezpieczeństwa informacji. W końcu nigdy nie wiadomo, co z danymi na naszym komputerze zrobi np. złodziej, gdyby, nie daj Boże, udało mu się nas złupić.

Ubuntu a szyfrowanie

Graficzny instalator Ubuntu pozwala jedynie zaszyfrować katalog domowy użytkownika. Cały dysk można zaszyfrować za pomocą instalatora opartego o ncurses, ale ani jeden, ani drugi nie pozwala łatwo zainstalować Ubuntu na już zaszyfrowanym dysku. Niniejszy samouczek pomaga poradzić sobie z tym problemem.

Samouczek

Samouczek jest przede wszystkim wynikiem lektury Wiki Ubuntu oraz wpisów innych ludzi (niestety nie mogę sobie przypomnieć, których).

Ostrzeżenie

Przed przystąpieniem do pracy koniecznie zrób kopię zapasową swoich danych!

Dołożyłem wszelkich starań, żeby ten poradnik był pomocny, jednak nie biorę odpowiedzialności za efekty zastosowania się do zawartych w nim porad. Robisz to na własną odpowiedzialność!

Gotowy/gotowa? To do dzieła!

Do szyfrowania dysku wykorzystamy Linux Unified Key System (LUKS), na Linuksie zaimplementowany w postaci programu cryptsetup. Przestrzeń dysku podzielimy przy użyciu narzędzia Logical Volume Manager w wersji 2 (LVM2). Po wykonaniu wszystkich operacji, dysk będzie wyglądał następująco (czytamy kolumnami):

Przypis

dysk
partycja /dev/sda1 partycja /dev/sda2
zaszyfrowana warstwa dm-crypt sda2
grupa woluminów LVM system
wolumin root wolumin swap wolumin home
zamontowana jako /boot zamontowany jako / zamontowany jako swap zamontowany jako /home
  1. Uruchamiasz płytę Live w trybie Wypróbuj Ubuntu.

  2. Logujesz się do Wi-Fi.

  3. Uruchaniasz terminal i logujesz się w nim jako użytkownik root:

    sudo su
    
  4. Instalujesz programy do obsługi szyfrowania i zarządzania dyskami logicznymi:

    apt install cryptsetup lvm2
    
  5. Szyfrujesz od nowa partycję:

    cryptsetup -c aes-xts-plain64:sha512 -y -s 512 luksFormat /dev/sda2
    
  6. Otwierasz świeżo zaszyfrowaną partycję:

    cryptsetup luksOpen /dev/sda2 sda2
    
  7. Tworzysz logiczne woluminy na otwartej partycji:

    pvcreate /dev/mapper/sda2                            # tworzymy wolumin fizyczny
    vgcreate system /dev/mapper/sda2                     # tworzymy grupę woluminów
    lvcreate -n root -L 50G system                       # tworzymy wolumin dla systemu
    lvcreate -n swap -L 8G system                        # tworzymy wolumin dla przestrzeni wymiany
    lvcreate -n home -L 300G system                      # to zwróci błąd, bo nie masz dysku 300 GB, ale dowiesz się dzięki temu ile zostało jeszcze miejsca do wykorzystania w extentach; najpierw ile chciałaś extentów, a potem ile ich pozostało
    lvcreate -n home -l <liczba_wolnych_extentów> system # zwróć uwagę na małe l tym razem, po nim wpisz pozostałą liczbę extentów, którą zobaczyłaś dzięki linijce powyżej
    
  8. Aktywujesz świeżo stworzone woluminy logiczne:

    vgchange -ay
    
  9. Formatujesz woluminy:

    mkfs.ext4 /dev/mapper/system-root
    mkfs.ext4 /dev/mapper/system-home
    mkswap /dev/mapper/system-swap
    
  10. Odpalasz instalator Ubuntu i jedziesz z normalną instalacją, wybierając następujące partycje:

    • /dev/sda1 jako /boot i do sformatowania systemem EXT4
    • /dev/mapper/system-root jako / i do sformatowania systemem EXT4
    • /dev/mapper/system-home jako /home i do sformatowania systemem EXT4
    • /dev/mapper/system-swap jako przestrzeń wymiany swap
  11. Po zainstalowaniu Ubuntu nie restartuj jeszcze komputera! Instalator możesz zamknąć. Teraz trzeba będzie świeżo zainstalowany system przygotować do pracy z LUKS-em.

  12. Tworzysz punkt montowania dla systemu na dysku:

    mkdir /mnt/sys
    
  13. Montujesz partycje pod ten punkt:

    mount /dev/mapper/system-root /mnt/sys
    mount /dev/mapper/system-home /mnt/sys/home
    mount /dev/sda1 /mnt/sys/boot
    mount --bind /dev /mnt/sys/dev
    
  14. Logujesz się na świeżo zamontowany system:

    chroot /mnt/sys
    
  15. Aktywujesz potrzebne systemy plików:

    mount -t proc proc /proc
    mount -t sysfs sys /sys
    mount -t devpts devpts /dev/pts
    
  16. Dodajesz DNS do /etc/resolv.conf.

  17. Instalujesz w nowym systemie lvm2 i cryptsetup:

    apt-get install lvm2 cryptsetup
    
  18. Edytujesz plik /etc/crypttab, żeby kernel wiedział gdzie szukać zaszyfrowanego systemu:

    nano -w /etc/crypttab
    
  19. Dopisujesz taką linijkę:

    sda2    /dev/sda2       none    luks,retry=1
    
  20. Zamykasz edytor przez ctrl+x i akceptujesz zmiany.

  21. Generujesz nowy initramfs:

    update-initramfs -k all -c
    
  22. Tworzysz katalog foo na przetestowanie poprawności wygenerowanego initramfs:

    mkdir /tmp/foo
    
  23. Przechodzisz do foo i rozpakowujesz w nim initramfs:

    cd /tmp/foo
    zcat /boot/initrd.img-$(uname -r) | cpio -iv
    
  24. Sprawdzasz czy plik conf/conf.d/cryptroot zawiera poprawne informacje o szyfrowaniu:

    cat conf/conf.d/cryptroot
    
  25. Jeśli jest tam informacja o lvm i crypto, to przechodzisz dalej. :)

  26. Deaktywujesz wszystkie systemy plików:

    umount /dev/pts
    umount /sys
    umount /proc
    
  27. Wylogowujesz się z zainstalowanego systemu:

    exit
    
  28. Odmontowujesz partycje:

    umount /mnt/sys/dev
    umount /mnt/sys/boot
    umount /mnt/sys/home
    umount /mnt/sys
    
  29. Deaktywujesz swap:

    swapoff /dev/mapper/system-swap
    
  30. Deaktywujesz woluminy logiczne:

    vgchange -an
    
  31. Zamykasz zaszyfrowaną partycję:

    cryptsetup luksClose sda2
    
  32. Wychodzisz z systemu w terminalu wpisując exit i wciskając enter dopóki terminal nie zniknie.