Nachträgliche LUKS-Verschlüsselung für Ubuntu 22.04
- Vorbedingungen
- Festplatte verschlüsseln
- Verschlüsselte Festplatte öffnen
- Boot-Partition für LUKS Boot modifizieren
- Anmerkungen
Vorbedingungen
- Backup der Festplatte (optional)
- Es müssen noch min. 100 MB auf der unverschlüsselten Platte frei sein
- Rescue-Stick oder Live-CD
Festplatte verschlüsseln
- Cryptsetup installieren mit
sudo apt install cryptsetup - Vom Rescue-Stick oder der Live-CD booten
- Platte im Dateisystem ermitteln mit
df /(z.B./dev/nvme0n1p2) - Die zugehörige UUID der Platte ermitteln mit
blkid - für ext4-Partitionen muss vor der Kompression eine Konsiszenzprüfung gelaufen sein mit
e2fsck -f /dev/nvme0n1p2 - Das Dateisystem muss nun min. 32MB kleiner gemacht werden mit
resize2fs /dev/nvme0n1p2 <neue Größe> - Nun kann die LUKS-Verschlüsselung vorgenommen werden mit :
cryptsetup reencrypt --encrypt /dev/nvme0n1p2 --reduce-device-size 32M
Verschlüsselte Festplatte öffnen
- Superuser werden mit
sudo su - Die verschlüsselte Partition öffnen mit
cryptsetup open /dev/nvme0n1p2 root - EINMALIG: Das Dateisystem auf sein Maximum erhöhen werden mit
resize2fs /dev/mapper/root - Geöffnete LUKS-Partition mounten mit
mount /dev/mapper/root /mnt - Die Pseudo-Dateisysteme monuten :
cd /mnt && mount --bind /dev dev && mount --bind /proc proc && mount --bind /sys sys
Boot-Partition für LUKS Boot modifizieren
- Die boot-Partition (z.B.
/dev/nvme0n1p1mounten mitmount /dev/nvme0n1p1 /mnt/boot) - Die gemountete Partition als root übernehmen mit
chroot /mnt - Die EFI-Partition mounten mit
mount -t efivarfs none /sys/firmware/efi/vars - LUKS-Schlüsseldatei erzeugen mit
mkdir /etc/luks && dd if=/dev/urandom of=/etc/luks/boot_os.keyfile bs=4096 count=1 - Rechte der LUKS-Schlüsseldatei anpassen mit
chmod u=r,go-rwx /etc/luks/boot_os.keyfile - Den LUKS-Schlüssel in die LUKS-Schlüsseldatei schreiben mit :
cryptsetup luksAddKey /dev/nvme0n1p2 /etc/luks/boot_os.keyfile - GRUB re-installieren mit
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck - An den Anfang der Datei
/boot/grub/grub.cfgsollten zwei neue Zeilen stehen :
Alternativ kann man vor dasinsmod luks insmod cryptodisklinux-Kommando den Befehlcryptomount -u <UUID ohne Bindestriche der virtuellen LUKS-Partition>einfügen - In der Datei
/boot/grub/x86_64-efi/load.cfgsoll stehen :search.fs_uuid <UUID der boot-Partition> root cryptouuid/<UUID ohne Bindestriche der virtuellen LUKS-Partition> set prefix=($root)'/grub' - initramfs-Konfiguration aktualisieren mit
echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >>/etc/cryptsetup-initramfs/conf-hook && echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf --debug - initramfs aktualisieren mit
update-initramfs -u -k all - GRUB aktualisieren mit
update-grub chrootverlassen, alles rückwärts unmounten, die LUKS-Patition mitcryptsetup close rootschließen und Festplatte booten
Anmerkungen
- Die Anweisungen im Netz waren nicht komplett zielführend, erst nach dem manuellen Zufügen der
insmod-Befehle und descryptomount-Befehls vor demlinux-Befehl hat das System gebootet. Nach einem Kernel-Update durch apt wurden die Dateien zwar umgeschrieben, blieben aber weiter funktionsfähig. - Nach dem Einschalten wird das EFI-Bios geladen. Die Datei
/boot/grub/x86_64-efi/load.cfgenthält die Anweisung zur Suche aller Partitionen (inclusive LUKS) und den Verweis zur eigentlichen GRUB-Konfiguration/etc/grub/grub.cfg. Diese enthält die Bootmenü-Implementierung mit GRUB-Befehlen. In jedem GRUB-Eintrag wird GRUB versuchen, mit demlinux-Befehl eine Kernel-Datei unter /boot/vmlinux... zu booten. - Im EFI-Verzeichnis vom reinstallierten GRUB unter
/boot/grub/x86_64-efisollten unter anderem die Moduleluks.modundcryptodisk.modvorhanden sein - Sollte Verwirrung herrschen über mehrere grub.cfg-Dateien, kann man die Einträge der Anzeigen so modifizieren, daß, wenn zumindest ein Bootmenü angezeigt wird, sichtbar wird, welche
grub.cfggeladen wurde. Man sieht es im Dateisystem auch am Zeitstempel.