Szyfrowany rootfs na greenOS
Jeśli naszym głównym komputerem, z którego korzystamy na codzień jest laptop, to zapewne dla własnej wygody mamy na nim wiele cennych danych, których być może zniszczenie niebyło by aż tak bolesne jak dostanie się tych informacji w niepowłone ręce. Temu właśnie ma służyć szyfrowanie dysków. W tym przypadku będziemy szyfrować partycję zawierającą główny system plików z wyłączeniem katalogu /boot. Z racji tego iż greenOS nie korzysta z klasycznego debianowskiego programu debian-installer i instaluje się go ręcznie tak samo jak Arch Linux. To instalacje z szyfrowaniem partycji z głównego katalogu również musimy wykonać z ręki. Instalacje rozpoczynamy od uruchomienia komputera z LiveCD. Możebyć to dowolny Debian lub greenOS.
- Aktualizacja list pakietów dystrybucji.
# apt update
- Instalacja pakietu cryptsetup w środowisku LiveCD
# apt install cryptsetup
-
Partycjonowanie dysku. Tutaj jest to raczej sprawa indywidualna, ale najbardziej klasyczny schemat partycjonowania została przestawiowy w tabelce poniżej. Do partycjonowania dysku może służyć wbudowane polecenie fdisk:
# fdisk /dev/sda
Urządzenie Rozmiar Punkt montowania /dev/sda1 300M /boot /dev/sda2 -1G / /dev/sda5 1G swap -
Tworzymy system plików dla partycji przeznaczonej na katalog /boot.
# mkfs.ext4 /dev/sda1
-
Tworzymy szyfrowany wolumin na partycji przeznaczonej na główny system plików. Program poprosi o potwierdzenie działania poprzez wpisane DUŻYMI literami słowa: YES. Następnie poprosi o podanie klucza (hasła) do odszyfrowania woluminu.
# cryptsetup -y -v luksFormat /dev/sda2
-
Otwieramy szyfrowany wolumin. Program zapyta o klucz.
# cryptsetup open /dev/sda2 cryptroot
Ostatni argument jest nazwą, pod którą będzie odwoływać się do odszyfrowanego woluminu. Mapowanie (nazwa) znajduje się w katalogu /dev/mapper.
-
Tworzymy system plików na odszyfrowanym woluminie.
# mkfs.ext4 /dev/mapper/cryptroot
-
Montujemy system plików woluminu w katalogu /mnt.
# mount /dev/mapper/cryptroot /mnt
-
Tworzymy katalog /mnt/boot, dla oddzielnej partycji /boot.
# mkdir /mnt/boot
-
Montujemy partycje przeznaczoną na katalog /boot we wcześniej utworzonym katalogu.
# mount /dev/sda1 /mnt/boot
-
Przechodzimy do katalogu /mnt i pobieramy paczkę z plikami bazowymi dystrybucji.
# cd /mnt # wget http://ftp.morketsmerke.net/greenOS/rootfs.tgz
-
Rozpakowujemy pliki bazowe.
# tar -xzvf rootfs.tgz
-
Tworzymy system plików dla partycji ze swap-em.
# cd # mkswap /dev/sda5
-
Przekierowujemy wyjście polecenia blkid do pliku /mnt/etc/fstab. Musimy wyedytować zawartość tego pliku, aby wyglądał mniej więcej tak:
# blkid > /mnt/etc/fstab # vim /mnt/etc/fstab UUID="..." /boot ext4 defaults 0 2 UUID="..." none swap sw 0 0 /dev/mapper/cryptroot / ext4 defaults 0 1
-
Montujemy katalogi systemowe do podkatalogów w /mnt aby widoczne były urządzenia komputera w środowisku chroot.
for i in /dev /dev/pts /proc /run /sys; do mount -B $i /mnt$i; done
-
Zmieniamy katalog główny na /mnt.
# chroot /mnt
-
Wykonujemy kilka czynności instalacyjnych, takich jak ustawienie hasła dla użytkownika root, utworzenie nowego użytkownika oraz nadanie mu uprawnień administratora.
# passwd # adduser user # vim /etc/sudoers user ALL=(ALL) NOPASSWD:ALL
-
W środowisku zmienionego katalogu podstawowego, odświerzamy listy pakietów dystrybucji oraz instalujemy pakiet cryptsetup. Podczas instalacji pakietu możemy zignorować błędy związane z mkinitramfs oraz cryptroot. Polecenie oświerzenia list może się zawieść, w tym przypadku należy przerwać to polecenie i pobrać konfigurację sieci z serwera dhcp.
# dhclient # apt update # apt install cryptsetup
-
Utworzenie wpisu w pliku /etc/crypttab. Plik zawiera wystąpienia szyfrowanych woluminów w systemie. Definiuje odzorowania nazw w katalogu /dev/mapper, plik klucza oraz opcje cryptsetup. Wpis użyty tym przykładzie będzie opierać, się na totalnym minimum konfiguracji. Jest on niezbędny do wygenerowania odpowiednich procedur w initramfs. W skrócie jest potrzebny aby w ogóle dało się odszyfrować wolumin. Pierwsze polecenie służy zapisaniu UUID urządzania blokowego z szyfrowanym woluminem w pliku (oczywiście w tylko i wyłacznie w tym przykładzie).
# blkid | grep "LUKS" | awk '{printf $2}' >> /etc/crypttab # vim /etc/crypttab cryptroot UUID="..." none luks
Gdzie:
cryptroot
jest to nazwa odwzrowania,UUID
wskazuje na urządzenie blokowe przechowywujące zaszyfrowany wolumin,none
jest to wskazanie pliku klucz w przypadku tej opcji, zostaniemy poproszeni o wprowadzenie klucza podczas uruchamiania systemu, ostatnia opcjaluks
spowoduje wymuszenie użycia trybu LUKS, który jest standardem wśród szyfrowanych woluminów na dystrybucjach Linux-a. Ten standard został użyty także przez nas. -
Wygenerowanie nowego dysku początkowego. Zwróćmy uwagę na to, iż po zapisaniu wpisu w pliku /etc/crypttab nie pojawiają pojawiają się żadne błędy podczas jego generowania. Tak jak miało to miejsce podczas instalacji cryptsetup przy zmienionym katalogu głównym.
# mkinitramfs -o /boot/initrd.img-4.19.0-18-amd64
-
Instalacja rekordu rozruchowego na dysku
# grub-install /dev/sda
-
Wygenerowanie pliku konfiguracyjnego dla programu rozruchowego.
# update-grub
-
Opuszczenie środowiska zmienionego katalogu głównego.
# exit
-
Odmontowanie wszystkich wcześniej montowanych systemów plików.
# umount -R /mnt
-
Zamknięcie szyfrowanego woluminu.
# cryptsetup close cryptroot
-
Zakończenie instalacji, restart systemu.
# reboot
~xf0r3m