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ć.