Zum Inhalt springen

Nachträgliche Verschlüsselung der gesamten Root-Partition via Grub und EFI in Debian GNU/Linux

18. Februar 2025 durch
Christian Lisec

In diesem Beitrag zeigen wir, wie du deine gesamte Root-Partition in Debian GNU/Linux nachträglich verschlüsseln kannst, indem du eine Live-CD wie SystemRescue einsetzt. Wir nutzen rsync, um das Root-Verzeichnis zu sichern und cryptsetup, um die Verschlüsselung einzurichten. Die separaten Partitionen /boot und /boot/efi bleiben dabei weiterhin unverschlüsselt. Wir passen die Konfiguration in /etc/fstab und /etc/crypttab sowie /etc/cryptsetup-initramfs/conf-hook an. Abschließend aktualisieren wir den Grub-Bootloader sowie Kernel via chroot, sodass automatisch eine Passwortabfrage für die Entschlüsselung der Root-Partition beim Starten von Debian erscheint.

ACHTUNG! Das Ausführen jeglicher Befehlszeilen in diesem Beitrag erfolgt auf eigene Gefahr und ist keine Garantie dafür, dass die Daten unbeschädigt bleiben!


Vorbereitungen

Überprüfe, ob die Anwendung "cryptsetup" installiert ist:
Die meisten neuen Distributionen haben cryptsetup und cryptsetup-initramfs bereits vorinstalliert. Bitte überprüfe dies mit deinem aktuellen Betriebssystem.

SystemRescue herunterladen und bootfähig machen:
Lade SystemRescue von der offiziellen Website herunter und erstelle ein bootfähiges Medium (USB-Stick oder CD).

Backup erstellen
Stelle sicher, dass du ein vollständiges Backup aller wichtigen Daten hast. Beispielsweise mit Clonezilla via SystemRescue.

Überprüfe, ob die Boot- und EFI-Verzeichnisse ihre eigenen Partitionen haben:
Wir gehen davon aus, dass du das Betriebssystem mit Grub via EFI startest.
Wenn die Verzeichnisse /boot und /boot/efi nicht bereits ihre eigenen unverschlüsselten Partitionen haben, sollte dies vorher mit GParted via SystemRescue eingerichtet werden. Kurzgesagt: Nach der Partitionierung mit GParted die Datei /etc/fstab anpassen und via grub-update den GRUB-Bootloader aktualisieren. Hierzu gibt es reichlich Anleitung im Web.


Anleitung

1. Booten von der SystemRescue-Live-CD

Starte deinen Computer von der SystemRescue-Live-CD.

2. Sichern des Root-Verzeichnisses

Verbinde ein externes Speichermedium, um dein Root-Verzeichnis zu sichern.

Finde heraus, welche Gerätebezeichnung das Root-Verzeichnis und das externe Speichermedium hat:

lsblk

sdX     259:5    0 500G  0 disk  

├─sdXX 259:6    0   50G  0 part # Root-Verzeichnis

├─sdX2 259:7    0     1G  0 part # EFI-Verzeichnis

├─sdX3 259:8    0     1G  0 part # Boot-Verzerchnis

└─sdXY 259:9    0   448G  0 part

sdX     259:5    0 500G  0 disk  

└─sdXZ 259:10   0 500G  0 part # Externes Speichermedium

Führe die folgenden Schritte im Terminal der Live-Umgebung aus:

mkdir /mnt/original_root
mount /dev/sdXX /mnt/original_root # Ersetze sdXY durch das Quellmedium
mkdir /mnt/backup_root
mount /dev/sdXZ /mnt/backup_root  # Ersetze sdXZ durch das Zielmedium
rsync -aX /mnt/original_root/ /mnt/backup_root/
umount /mnt/original_root

3. Einrichten der Verschlüsselung auf der Root-Partition

Aus Konformitätsgründen überschreiben wir direkt die Daten der originalen Root-Partition. Überprüfe, dass du eine wiederherstellbare Sicherung hast!

Ersetze /dev/sdXY mit dem korrekten Gerätenamen deiner Home-Partition.

  1. Verschlüsselung einrichten:
    cryptsetup luksFormat /dev/sdXX
    cryptsetup open /dev/sdXX encrypted_root
    
  2. Dateisystem erstellen:
    mkfs.ext4 /dev/mapper/encrypted_root

4. Rücksicherung des Root-Verzeichnisses

  1. Neue Partition einhängen:
    mkdir /mnt/new_root
    mount /dev/mapper/encrypted_root /mnt/new_root
    
  2. Daten zurückkopieren:
    rsync -aX /mnt/backup_root/ /mnt/new_root/
    umount /mnt/new_root
    cryptsetup close encrypted_root

5. Anpassen von /etc/crypttab und /etc/fstab

Beim Startvorgang wird /etc/crypttab zuerst gelesen und entsprechend die Entschlüsselung eingeleitet, danach wird die entschlüsselte Partition durch /etc/fstab mit dem Betriebssystem eingebunden.

  1. Root-Partition einhängen, worin die Konfigurationsdateien /etc/crypttab und /etc/fstab vorhanden sind:
    mkdir /mnt/root
    mount /dev/sdXX /mnt/root  # Ersetze sdXX durch die Root-Partition
    
  2. UUID der Root-Partition herausfinden:
    blkid /dev/sdXX
    /dev/sdXX: UUID="123e4567-e89b-12d3-a456-426614174000" TYPE="ext4"
  3. Eintrag in /etc/crypttab hinzufügen:
    Öffne die Datei mit einem Editor:
    nano /mnt/root/etc/crypttab
    
    Füge folgende Zeile hinzu:
    encrypted_root UUID=123e4567-e89b-12d3-a456-426614174000 none luks
    
  4. Eintrag in /etc/fstab hinzufügen:
    Öffne die Datei mit einem Editor:
    nano /mnt/root/etc/fstab
    
    Finde die Zeile, welche das Root-Verzeichnis erwähnt und ändere diese:
    /dev/mapper/encrypted_root / ext4 defaults 0 2

6. Grub-Bootloader und Kernel anpassen

  1. Boot-Partition einhängen:
    Erstelle das Boot-Verzeichnis im Root-Verzeichnis, falls nicht vorhanden und hänge die Boot-Partition ein:
    mkdir /mnt/root/boot
    mount /dev/sdX3 /mnt/root/boot  # Ersetze sdX3 mit der tatsächlichen Boot-Partition
    
  2. EFI-Partition einhängen:
    Erstelle das EFI-Verzeichnis innerhalb des Boot-Verzeichnisses, falls nicht vorhanden und hänge die EFI-Partition ein:
    mkdir /mnt/root/boot/efi
    mount /dev/sdX2 /mnt/root/boot/efi  # Ersetze sdX2 mit der tatsächlichen EFI-Partition
    
  3. Bearbeite die Kernel-Konfigurationsdatei, mit welcher die automatische Passwortabfrage beim initiieren des Kernels ermöglicht wird.
    nano /mnt/root/etc/cryptsetup-initramfs/conf-hook
    
    Suche nach der Zeile #ASKPASS=y und entferne den Kommentar (#), um sicherzustellen, dass sie wie folgt aussieht:
    ASKPASS=y
    
  4. Binde die notwendigen Systemverzeichnisse ein, um einen chroot-Zugriff zu ermöglichen:
    mount --bind /sys /mnt/root/sys
    mount --bind /proc /mnt/root/proc
    mount --bind /dev /mnt/root/dev
    
  5. In das Root-Dateisystem wechseln:
    chroot /mnt/root
    
  6. Kernel und Grub aktualisieren:
    update-initramfs -u -k all
    update-grub
    
  7. Gegebenenfalls den GRUB-Bootloader auf der Festplatte neuinstallieren:
    grub-install /dev/sdX  # Ersetze sdX mit der Gerätebezeichnung der gesamten Festplatte, nicht die Partition.
    
  8. Gegenprüfen der UUID in der GRUB-Konfiguration:
    Öffne die Datei /boot/efi/EFI/grub/grub.cfg und stelle sicher, dass die korrekte UUID der Root-Partition eingetragen ist. Anschließend die chroot-Umgebung schließen.
    exit
    

7. Erstellen eines Header-Backups mit cryptsetup

Im Falle von Problemen mit deiner verschlüsselten Partition solltest du ein Backup des Headers erstellen. Dies kann helfen, Datenverluste zu vermeiden.

Header-Backup mit cryptsetup anlegen:
Verwende den folgenden Befehl, um das Header-Backup zu erstellen. Ersetze /dev/sdXX durch deine tatsächliche verschlüsselte Partition und passe den Pfad der Backup-Datei entsprechend an:

cryptsetup luksHeaderBackup /dev/sdXX --header-backup-file luks-header-backup.bin

8. Neustart

Entferne die Live-CD und starte neu:

reboot

Wenn alles korrekt eingerichtet ist, sollte das System automatisch die verschlüsselte Partition mit einer Passwortabfrage öffnen und Root bereitstellen.

Christian Lisec 18. Februar 2025
Diesen Beitrag teilen