Irgendwann habe ich herausgefunden, dass Grub auch mit verschlüsselten Platten umgehen und von diesen den Kernel und die Initrd laden kann. So habe ich dann nicht nur meine Datenpartition, sondern das komplette Linux-System verschlüsselt – die EFI-Partition bzw. der Grub-Loader müssen weiterhin unverschlüsselt bleiben.

Die Verschlüsselung der Festplatte hat für mich zwei Gründe: (1) mir sind schon mehrere Festplatten und USB-Sticks kaputt gegangen und ich stand vor dem Problem, dass ich sie ungern in dem Zustand entsorgen wollte, weil ein geneigter Bastler (sie beim Wertstoffhof abholt und) die Festplatte wieder zum Leben erweckt und SSH-, GPG-Schlüssel und Dokumente ausliest.

Der weitere Grund (2) ist für mich die Gefahr, dass ich meinen Laptop (oder USB-Stick) doch mal irgendwo verliere oder er mir gestohlen wird. Da schon seit einigen Jahren die Prozessoren selbst einige Kryptoalgorithmen unterstützen und damit die Verschlüsselung sehr schnell passiert, fällt die Verschlüsselung nicht mehr ins Gewicht, so wie es 2010 noch der Fall war.

Einrichten der Verschlüsselung

Da ich mein System auf der zweiten Festplatte habe, befindet sich die EFI-Partition auf der ersten Platte und ich kann mir eine Partitionierung der zweiten Platte sparen.

Viele hilfreiche Informationen sind in der Anleitung von Debian zu finden, an der ich mich auch orientiert habe.

  1. Verschlüsselung der Platte: cryptsetup luksFormat /dev/sdb
  2. Einbinden des entschlüsselten Geräts: cryptsetup open /dev/sdb sdb_crypt
  3. LVM einrichten: vgcreate neu /dev/mapper/sdb_crypt
  4. LVM-Volumn einrichten:
    • lvcreate -L 64G -n Linux_Root neu und
    • lvcreate -l 100%FREE -n Linux_Var neu
    • (prüfen der Volumns mit lvs)
  5. Übertragen der alten Daten und anpassen der Partitionen:

    for i in Root Var; do
        dd if=/dev/mapper/Linux_vg-Linux_$i of=/dev/mapper/neu-Linux_$i bs=20M status=progress \
          && e2fsck -fy /dev/mapper/neu-Linux_$i
          && resize2fs /dev/mapper/neu-Linux_$i
    done
    
  6. LVM-Volumns deaktivieren und umbenennen:

    % lvchange -a n neu Linux_vg
    % vgrename Linux_vg alt
    % vgrename neu Linux_vg
    
  7. Neustart und hoffen, dass es funktioniert: reboot

Große Schrift und deutsche Tastatur fürs Passwort

Anhand der Anleitung für Debian habe ich auch die deutsche Tastaturbelegung für die Passworteingabe eingerichtet und damit auch eine Lösung für die unleserlich kleine Schrift (4k-Monitor, HiRes) bei der Passworteingabe gefunden:

% cat /boot/grub/early.cfg
set gfxmode=auto
loadfont (memdisk)/DejaVuSansMono-highres.pf2
terminal_output gfxterm

terminal_input --append at_keyboard
keymap (memdisk)/keymap.gkb

cryptomount -u 378253ee9b3b4416ade5d2e01deba0fb

set root=(lvm/Linux_vg-Linux_Root)
set prefix=/boot/grub

% sudo grub-kbdcomp -o /boot/grub/keymap.gkb de nodeadkeys
% sudo grub-mkfont -s 42 -o /boot/grub/DejaVuSansMono-highres.pf2 /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf
% tar cf /tmp/img.tar -C /boot/grub DejaVuSansMono-highres.pf2 keymap.gkb

% sudo grub-mkimage --directory /usr/lib/grub/x86_64-efi --memdisk=/tmp/img.tar \
    --output /boot/efi/EFI/debian/font.efi --format x86_64-efi --compression auto \
    --config =(grep -v \# /boot/grub/early.cfg) ext2 lvm cryptodisk luks \
    gcry_rijndael gcry_rijndael gcry_sha256 memdisk tar font gfxterm efi_gop \
    terminal keylayouts at_keyboard

Die Liste der Module habe ich aus der Ausgabe von grub-install -v und der grub.cfg. Die ID bei cryptomount habe ich ebenfalls aus der grub.fg.

In der Anleitung ist auch beschrieben, wie man ein Passworteingabe nach dem Grub-Menü vermeiden kann. Allerdings musste ich bei mir die Angabe des Key-Slots in der crypttab weglassen, da sonst nicht die Festplatte automatisch entschlüsselt wird.

Befehle für grub rescue

Wenn man zum Beispiel durch die Eingabe des falschen Passworts an der Eingabeaufforderung von grub rescue landet, kann man mit folgenden Befehlen die Passworteingabe und anschließend das Bootmenü erreichen:

cryptomount hd1
insmod normal
normal

Gegebenenfalls muss man mit set noch die Variablen prefix und root anpassen.

Weitere Informationen