Szyfrowanie całego systemu wraz z partycją home przy użycia hasła i klucza

Jakiś czas temu opisywałem szyfrowanie całego systemu przy pomocy luks’a oraz logicznych woluminów co miało tę zaletę, że całe urządzenie było szyfrowane przed tworzeniem woluminów przez co przy starcie systemu wystarczyło jedynie raz podawać hasło.

Dziś trochę bardziej skrócona forma oraz prostszy scenariusz. Zakładamy, że mamy tablicę partycji msdos oraz 3 partycje

sda1 boot

sda2 root

sda3 home

 

Boot będzie nieszyfrowaną partycją, root zostanie zaszyfrowany przez co przy starcie trzeba będzie podać hasło, home również zostanie zaszyfrowany i normalnie podczas startu powinniśmy być zapytani o osobne hasło dla tej partycji, ale w naszej konfiguracji będziemy używali klucza, który zostanie automatycznie użyty do odblokowanie home’a.

 

Przykład jest co prawda z Arch’a, ale większość komend jest wspólna dla wszystkich dystrybucji.

 

1) Formatujemy wcześniej utworzoną partycję boot oraz ją montujemy na potrzebę instalatora Archowego.

mkfs -t ext4 /dev/sda1
mkdir /mnt/boot
mount -t ext4 /dev/sda1 /mnt/boot

 

2) Szyfrujemy oraz formatujemy wcześniej utworzoną partycję root oraz ją montujemy na potrzebę instalatora Archowego. Oczywiście etykietę można sobie zmienić.

cryptsetup -y -v luksFormat /dev/sda2
cryptsetup open /dev/sda2 cryptroot
mkfs -t ext4 /dev/mapper/cryptroot
mount -t ext4 /dev/mapper/cryptroot /mnt

 

3)  Szyfrujemy oraz formatujemy wcześniej utworzoną partycję home oraz ją montujemy na potrzebę instalatora Archowego. Oczywiście etykietę można sobie zmienić.

cryptsetup -y -v luksFormat /dev/sda3
cryptsetup open /dev/sda3 crypthome
mkfs -t ext4 /dev/mapper/crypthome
mkdir /mnt/home
mount -t ext4 /dev/mapper/crypthome /mnt/home

 

4) Kolejne kroki to już standardowa instalacja systemu, ale zatrzymajmy się po instalacji bootloader’a (u mnie gruba) i przed pierwszym uruchomieniem systemu!

 

5) Aktualizujemy ustawienia initramdisku poprzez dodanie do sekcji HOOKS: encrypt

vi /etc/mkinitcpio.conf

HOOKS=”… encrypt … filesystems …”

mkinitcpio -p linux

 

6) Kolejny krok to wskazanie GRUB’owi partycji root, która ma zostać odblokowana przy starcie

vi /etc/default/grub

GRUB_CMDLINE_LINUX=”cryptdevice=/dev/sda2:cryptroot

Oczywiście lepiej to zrobić za pomocą UUID, który jest odporny na zmiany nazw urządzeń:

GRUB_CMDLINE_LINUX=”cryptdevice=UUID=<device-UUID>:cryptroot root=/dev/mapper/cryptroot

grub-mkconfig -o /boot/grub/grub.cfg

 

7) Skończyliśmy z partycją root, teraz czas na utworzenie klucza:

dd bs=512 count=4 if=/dev/urandom of=/root/mykeyfile iflag=fullblock

chmod 0400 /root/mykeyfile

 

8) Dodajemy klucz do zaszyfrowanej partycji home, dzięki temu partycja home będzie mogła zostać odszyfrowana i za pomocą hasła jak i klucza pod warunkiem, że wcześniej odszyfrowany zostanie root, na którym znajduje się klucz.

cryptsetup luksAddkey /dev/sda3 /root/keyfile

 

9) Na koniec aktualizujemy plik /etc/crypttab, w którym podajemy linijkę ze ścieżką do klucza oraz etykietę dysku. Oczywiście lepiej skorzystać z UUID zamiasty nazwy partycji:

crypthome           /dev/sda3            /root/keyfile/          luks

 

Przed finalnym restartem warto upewnić się, że mamy wpisany encrypt do initramdisku, skonfigurowanego gruba, utworzony klucz, zaktualizowany crypttab oraz fstab.

 

Poniższa notka nie opisuje użycia swap’a (jest kilka możliwości…). Polecam do przetestowania wcześniej na virtualboxie.

Warto również pamiętać o wykonaniu kopii zapasowej nagłówków szyfrowanych partycji. Uszkodzenia takiego nagłówka bez posiadania kopii zapasowej spowoduje, że danych nie będzie można odzyskać.

2 komentarze

    • Sławek, 17 grudnia 2016, 20:18

    Odpowiedz

    Bardzo ciekawy wpis. Dzięki. Zastanawiam się, jak postępować przy rozdzielonych partycjach. Kiedyś instalowałem bez szyfrowania z oddzielnym /home. Kiedy chciałem poćwiczyć inną dystrybucję wystarczało zainstalować bez formatowania /home i nie traciłem danych. Czy jest to możliwe przy szyfrowaniu partycji? Tzn. oddzielne, szyfrowane partycje /root i /home np. na ext4 (a może btrfs?). Czy w przypadku gdy będę instalował na nowo, np. inną dystrybucję, będę mógł podać przy instalacji wcześniejsze hasło i uzyskać dostęp do /home? Możesz podpowiedzieć, jak to zrobić? Teraz mam ubuntu bez wydzielonego /home, a chcę zainstalować fedorę (właściwie to kororę) właśnie z wydzielonym /home z możliwością nie tracenia dostępu przy przyszłych reinstalacjach systemu. Będę wdzięczny za sugestie.

    1. Nocny Pingwin

      Odpowiedz

      Powyższy wpis właśnie pokazuje szyfrowanie partycji root jak i home. Oddzielna partycja home jest zawsze zalecana również z powodów, o których napisałeś. Zakładając scenariusz, ze root zostanie sformatowany, a home pozostanie wciąż zaszyfrowany to nie powinno być żadnych problemów z jego ponownym odszyfrowaniu w nowym systemie.
      Jedyny problem jaki może ewentualnie się pojawić to, że nowy system/instalator nie wykryje zaszyfrowanej partycji w trakcie instalacji i będzie konieczna manualna interwencja, ale to już zależy od rodzaju distro. Polecam przetestowanie tego scenariusza w virtualboxie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.