Fedora mit LUKS und TPM Entsperrung

Hallo zusammen,

Ich habe die Tage erfolgreich mit Hilfe von Dokus und GPT auf meinem neuen Laptop Fedora Installiert. Mit LUKS verschlüsseltes BTRFS Dateisystem und Bindung an TPM um mir die Passworteingabe zu ersparen.

Ich denke dass das vielleicht für den ein oder anderen Interessant ist und evtl haben die Linux Profis ja noch Anmerkungen was ich beim nächsten mal besser (ordentlicher) machen kann. :wink:
Ich möchte von Kommentaren zur Distrowahl absehen, da gibt es genug andere Threads.

Zuerst habe ich die SSD mit einem GPT Partitionstabelle partitioniert und dann folgende Partitionen angelegt:

  1. EFI in FAT32 mit 1GB
  2. Boot in ext4 mit 5GB
  3. BTRFS Volume Verschlüsselt mit folgenden Subvolumes
    1. @ als root
    2. @home als /home
    3. @var_log als /var/log
    4. @var_cache als /var/cache
  4. SWAP mit Luks Verschlüsselung 40GB (bei 3Gb RAM)

(die @Var Subvolumes waren Vorschläge bzgl der Datensicherung/Snapshots, vielleicht kann mir ja jemand genauer erklären warum das wichtig ist.
Den SWAP hingegen habe ich angelegt, weil ich Hibernation nutzen wollte, später stellte sich aber heraus dass das mit Secureboot nicht geht)

Dann nach der Installation erstmal das System geupdated mit „sudo dnf upgrade —refresh –y && sudo reboot now“

Jetzt kommt eine Sache die der ich nicht ganz folgen konnte da GPT hier wirr geworden ist:

um die LUKS verschlüsselung an TPM zu binden sollte ich zuerst die Gerätenamen genau identifizieren.
Für Root mit:

ROOT_MAP=$(findmnt –no SOURCE /) echo „ROOT_MAP“

und für den SWAP mit

SWAP_MAP=$(swapon —show=NAME —noheadings) echo „SWAP_MAP“

Dann mit “sudo cryptsetup status” die genauen Gerätenamen auslesen.
Ich gehe davon aus das der sinn hier hinter war mit den ersten befehlen ein Temporäres Alias zu erzeugen, da der vorschlag von GPT war hinter “cryptsetup status” dann “ROOT_MAP” oder eben “SWAP_MAP” zu setzen.
Das hat aber nicht funktioniert und ich habe mir dann geholfen indem ich /dev/mapper/ *und die UUID genommen habe.
Aber vielleicht kann mir ja jemand sagen was genau GPT hier von mir wollte und wie es funktioniert hätte, bzw besser gemacht werden könnte.

Dann habe ich Luks mit den Gerätenamen und folgendem Befehl an das TPM Modul gebunden:

sudo systemd-cryptenroll —tpm2-device=auto —tpm2-pcrs=7 /dev/*Gerätename

In /etc/fstab bei der SWAP Partition noch den Eintrag “Pri=10” hinzugefügt

Und in der /etc/crypttab beide einträge mit folgenden Parametern ergänzt:

Bei der Root: luks,discard,tpm2-device=auto,x-initrd.attach
Bei der SWAP: luks,discard,tpm2-device=auto,x-initrd.attach,nofail

Dann den Kernel geupdated mit:

sudo dracut --regenerate-all --force

Damit funktioniert nun alles reibungslos und die Platte entsperrt sich beim Boot automatisch. :partying_face:

Das einzige was mir aufgestoßen ist, bei jedem Firmwareupdate (liefert Fedora für Dell automatisch mit :smiling_face_with_sunglasses: ) muss ich danach die TPM bindung erneuern und ich sehe auch dass der Token jeweils in einem neuen Slot im TPM gespeichert wird.
Daher die Frage ob ich irgendwas hätte besser machen können oder es einen Workaround dafür gibt, da ich gerne die LUKS Passwörter entfernen möchte und durch Recovery Keys ersetzen möchte, wenn die TPM bindung dann zuverlässig Permanent läuft.

Mit Timeshift mache ich BTRFS Snapshots und wie ich die DASI Struktur bei mir sauber löse, bin ich gerade noch am überlegen.

PS. ich überlege gerade ob ich überhaupt einen SWAP brauche bei 32Gb, ich denke eher nicht. Weil angelegt habe ich den ja eh nur für Hibernation, aber die funktioniert mit Secureboot ja leider nicht. Und Suspend to RAM möchte ich mir sparen, da ich den Rechner eh meistens stationär an der Dock nutze.

Ich habe mich schon gefragt, warum du dich für BTRFS als Dateisystem entschieden hast. Ich habe beispielsweise meinen Webserver auf einem Backupserver mit BTRFS-Snapshots gesichert. Unten habe ich den entsprechenden Artikel verlinkt, damit du ein praktisches Beispiel für BTRFS-Snapshots hast. Du kannst das auch noch viel weiter spinnen, aber dann solltest du schon wissen, was du damit eigentlich anstellen kannst. Einen anderen sinnvollen Einsatzzweck für BTRFS habe ich für mich persönlich bislang jedoch nicht gesehen.

https://kb.prontosystems.de/knowledge-base/rsync-backup/

Im Zweifelsfall hat er sich da gar nicht entschieden - BTFRS ist seit Jahren Fedora-Standarddateisystem.

1 „Gefällt mir“

Ah, tatsächlich? Wusste ich nicht, danke für die Aufklärung…

Idealerweise sollte man für die tpm2-pcrs 0,2,4,7,8 (oder 0,2,4,7,8,9) wählen.
Wenn man einen USB-Stick anschließt und davon bootet, ändert das den Wert von PCR 1 und 4, aber eben nicht PCR 7. Mit deinem Setup kann man also von USB booten und theoretisch den LUKS-Key aus dem TPM auslesen.

Die PCRs 8 und 9 speichern dann auch Änderungen an der Kernel-Kommandozeile (z.B. Starten im Rescue-Modus oder von anderer Partition) bzw. Veränderung an der intialen Ramdisk.

Eine Übersicht der Register gibt es unter https://uapi-group.org/specifications/specs/linux_tpm_pcr_registry/

Bei meinem PC mit 2 NVMe ändert sich allerdings bei jedem Boot mit 50% Wahrscheinlichkeit der Wert von PCR 8, weil die NVMe-Speicher in zufälliger Reihenfolge erkannt werden. Schuld daran ist ein von Fedora genutztes Modul names “tuned”, welches die Kommandozeile dynamisch anpasst.

Um es abzuschalten:

In /etc/dracut.conf.d/99-disabled-tuned.conf:

omit_dracutmodules+=" tuned "

Anschließend die Ramdisk und Bootloaderkonfiguration neu erstellen:

sudo dracut -v $(uname -r) --force
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Und dann nach dem nächsten Neustart noch einmal systemd-cryptenroll laufen lassen.

OK…

Naive Frage: wie erfolgt denn dann dort die Authentifizierung? Ich habe bisher keinerlei Erfahrung mit TPM… Und bezüglich BTRFS selbst überlege ich noch: manche sagen „super“ — andere sagen „noch nicht ausgereift“ (ich hätte Angst vor Datenverlust gegenüber einem „abgehangenen“ Dateisystem).