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/nvme0n1p1
mounten 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.cfg
sollten zwei neue Zeilen stehen :
Alternativ kann man vor dasinsmod luks insmod cryptodisk
linux
-Kommando den Befehlcryptomount -u <UUID ohne Bindestriche der virtuellen LUKS-Partition>
einfügen - In der Datei
/boot/grub/x86_64-efi/load.cfg
soll 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
chroot
verlassen, alles rückwärts unmounten, die LUKS-Patition mitcryptsetup close root
schließ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.cfg
enthä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-efi
sollten unter anderem die Moduleluks.mod
undcryptodisk.mod
vorhanden 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.cfg
geladen wurde. Man sieht es im Dateisystem auch am Zeitstempel.