Szyfrowanie LUKS niezaszyfrowanego LVM w Ubuntu 22 Server bez reinstalacji systemu

Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał

Chroń swoje dane. Skutki utraty urządzenia lub nieautoryzowanego dostępu można ograniczyć, szyfrując dysk w serwerze i stacji roboczej.

Być może masz instalację Ubuntu Linux na bare metal lub maszynie wirtualnej. Czy ma zaszyfrowany dysk? Jeśli nie, możesz mieć kłopoty, gdy urządzenie zostanie skradzione lub zgubione albo ktoś po prostu uzyska nieautoryzowany dostęp do Twojego sprzętu. W tym krótkim artykule krok po kroku zobaczysz, co zrobić, aby zaszyfrować niezaszyfrowane dyski bez konieczności reinstalacji systemu.

W przypadku stacji roboczej reinstalacja systemu jest znacznie mniejszym problemem. Wystarczy w dogodnym momencie przenieść dane i konfigurację, a potem przeprowadzić czystą instalację systemu, tym razem z poprawnie skonfigurowanym szyfrowaniem dysku. Ale chwileczkę. Skoro istnieje możliwość zaszyfrowania bez reinstalacji systemu, to dlaczego by nie spróbować?

Jest to szczególnie ważne w przypadku instalacji serwerowych z oprogramowaniem produkcyjnym przetwarzającym dane klientów. Możesz zdecydować się na wymianę systemu w oknie serwisowym i wykonać całą pracę od nowa. Czasem jednak nie wchodzi to w grę. Właściwie nie ma znaczenia, jakie nieutrzymywane i przestarzałe oprogramowanie działa na Twoich niezaszyfrowanych serwerach. Myślę, że większość z nas zna przynajmniej jeden taki przykład. Przy tak problematycznym oprogramowaniu lepiej po prostu zrobić to na istniejącym systemie, bez dodatkowych kroków.

Jak zmigrować dane? #

Tutaj dowiesz się, jak zaszyfrować istniejące dane na dyskach opartych o LVM w maszynie wirtualnej z Ubuntu 22 Server. Na początek musisz dodać do systemu dodatkowy dysk o pojemności równej lub większej niż dysk niezaszyfrowany. Załóżmy, że źródło to /dev/sda, a zapasowy dysk to /dev/sdb. Zakładam, że to domyślna konfiguracja z 3 partycjami. Pierwsza to odstęp dla GRUB-a, druga to boot, a trzecia to główny system plików.

Uruchom VM z ISO GRML. W Proxmoxie podczas startu VM naciśnij Esc i wybierz napęd z zamontowanym ISO.

Po uruchomieniu GRML…

Utwórz PV i rozszerz istniejącą VG o nowy dysk:

Text
pvcreate /dev/sdb
vgextend ubuntu-vg /dev/sdb

Przenieś dane na nowy dysk:

Text
pvmove /dev/sda3 /dev/sdb

Usuń istniejący, niezaszyfrowany dysk źródłowy z VG i usuń PV:

Text
vgreduce ubuntu-vg /dev/sda3
pvremove /dev/sda3

Teraz czas wyczyścić istniejący niezaszyfrowany dysk:

Text
crypt setup open --type plain -d /dev/urandom /dev/sda3 to_be_wiped
dd if=/dev/zero of=/dev/mapper/to_be_wiped bs=1M status=progress
cryptsetup close to_be_wiped

Teraz najważniejszy element procedury. Utwórz punkt montowania dla boot i zapisz tam nagłówek LUKS. Zapisanie tego nagłówka na trwałym nośniku jest krytyczne. Jeśli nagłówek z kluczami zostanie utracony, utracisz również dane. Pamiętaj o tym:“`

Bash
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot

Zaszyfruj i otwórz kontener dysku:

Text
cryptsetup -y luksFormat /dev/sda3 --header /mnt/boot/luksheader.img
cryptsetup luksOpen /dev/sda3 lvmcrypt --header /mnt/boot/luksheader.img

Utwórz nowy PV i dołącz go do istniejącej VG.

Text
pvcreate /dev/mapper/lvmcrypt
vgextend ubuntu-vg /dev/mapper/lvmcrypt

Przenieś dane z dodatkowego, zapasowego dysku do nowo utworzonego kontenera lvmcrypt:

Text
pvmove /dev/sdb /dev/mapper/lvmcrypt

I na koniec usuń ten nowy dysk z VG oraz sam PV:

Text
vgreduce ubuntu-vg /dev/sdb
pvremove /dev/sdb

Jak zaktualizować initramfs z odłączonym nagłówkiem LUKS2 #

O co więc chodzi z tym odłączonym nagłówkiem LUKS2? W tym formacie pierwsze 16MB przestrzeni zajmuje nagłówek. Gdyby oryginalny dysk zawierał tę przestrzeń, nie miałby wystarczająco dużo miejsca na dane, które trzeba z powrotem przenieść. Drugim powodem odłączenia nagłówka jest w pewnym stopniu podniesienie poziomu bezpieczeństwa. Pamiętaj jednak, że w razie utraty urządzenia lub systemu plików, na którym się znajduje, bezpowrotnie tracisz również dane. Tak więc…

Jeśli ponownie uruchamiasz GRML:

Bash
mkdir /mnt/luks
cryptsetup luksOpen /dev/sdb3 lvmcrypt --header /mnt/boot/luksheader.img
vgchange -ay
mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt/luks

Jeśli kontynuujesz bez restartu, wystarczy utworzyć katalog punktu montowania i zamontować:

Bash
mkdir /mnt/luks
mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt/luks

Zamontuj i podepnij (bind) potrzebne katalogi specjalne, a następnie wykonaj chroot do systemu:

Bash
mount -t proc proc /mnt/luks/proc
mount -t sysfs sys /mnt/luks/sys
mount -o bind /dev /mnt/luks/dev
mount --bind /run /mnt/luks/run
mount /dev/sda2 /mnt/luks/boot
chroot /mnt/luks /bin/bash

Jesteś z powrotem w swoim Ubuntu, na zaszyfrowanym dysku. Czy to koniec? Nie. Musimy wskazać, gdzie podczas uruchamiania znajduje się nagłówek LUKS2. Skopiuj nagłówek na dowolny dodatkowy dysk. W przypadku VM może to być dysk 0.1GB. W przypadku stacji roboczej może to być pendrive USB:

Text
dd if=/boot/luksheader.img of=/dev/sdb

Zmodyfikuj plik /etc/crypttab w następujący sposób:

Text
lvmcrypt PARTUUID=A none luks,header=/dev/disk/by-uuid/B

gdzie A to wynik blkid /dev/sda3, a B to wynik blkid /dev/sdb.

Na koniec wygeneruj ponownie initramfs:

Text
update-initramfs -c -k all
exit
reboot

Gotowe. Twój dysk jest teraz zaszyfrowany i przy każdym uruchomieniu systemu zostaniesz poproszony o ustawione wcześniej hasło. Dla jasności: musisz bezpiecznie przechowywać dodatkowy dysk z nagłówkiem LUKS2. Po uruchomieniu systemu dysk lub pendrive można wyjąć, ale trzeba go ponownie podłączać przy każdym kolejnym restarcie.

Dalsza lektura #

https://unix.stackexchange.com/questions/444931/is-there-a-way-to-encrypt-disk-without-formatting-it
https://www.michelebologna.net/2020/encrypt-an-existing-linux-installation-with-zero-downtime-luks-on-lvm/
https://dev.to/goober99/encrypt-an-existing-linux-installation-online-with-the-magic-of-lvm-1mjc
https://linuxconfig.org/how-to-use-luks-with-a-detached-header
https://medium.com/@privb0x23/lose-your-head-attempting-to-boot-from-luks-without-a-header-2d61174df360
https://askubuntu.com/questions/1351911/what-does-regenerate-your-initramfs-mean
https://superuser.com/questions/111152/whats-the-proper-way-to-prepare-chroot-to-recover-a-broken-linux-installation
https://unix.stackexchange.com/questions/720202/detached-luks-header-on-debian-based-gnu-linux

Wersja Markdown

Wszystkie treści na tej stronie są udostępniane na licencji Uznanie autorstwa – Użycie niekomercyjne – Bez utworów zależnych 4.0 Międzynarodowe (CC BY-NC-ND 4.0). Cytuj jako: Michał Sobczak, „Szyfrowanie LUKS niezaszyfrowanego LVM w Ubuntu 22 Server bez reinstalacji systemu”, 14 maja 2024, https://michalasobczak.pl/pl/posts/encrypt-with-luks-an-unencrypted-lvm-ubuntu-22-server-without-system-reinstallation.html