Skip to main content

Volle Festplattenverschlüsselung unter Debian Linux mit LUKS

Mitglied seit

5 months
Submitted by valery on

Winterferien waren eine gute Gelegenheit, Dinge zu erledigen, die viel zu lange aufgeschoben wurden. Eins davon war, die Festplattenverschlüsselung auf meinem Arbeitslaptop zu aktivieren.

Ich benutze Debian Linux, also war LUKS (Linux Unified Key Setup) eine offensichtliche Wahl.

Linux Unified Key Setup (linux.com)

Bild mit freundlicher Genehmigung von Linux.com

Der einfachste Weg, die Festplattenverschlüsselung zu aktivieren, ist (offensichtlich) während einer Systemneuinstallation, aber ich habe viel Zeit damit verbracht, eine komfortable Arbeitsumgebung einzurichten, also habe ich versucht (und es geschafft - Spoiler!), das bestehende System zu verschlüsseln.

Der Prozess basierte weitgehend auf dem ausgezeichneten Beitrag von William Desportes, aber da meine Erfahrung etwas anders war, habe ich mich entschieden, sie hier zu veröffentlichen.

Bevor es weitergeht

  • Verwenden Sie nicht luksipc (LUKS In-place Conversion) - es ist ein veraltetes Werkzeug, und sogar der Autor empfiehlt, cryptsetup (Teil des Pakets mit demselben Namen) auf die neueste Version des Pakethandbuchs zu verwenden.
  • Sichern Sie wichtige Dateien, bevor Sie fortfahren (Das ist offensichtlich, schadet aber nie, es zu wiederholen).

Die Zielmaschine vorbereiten

Notwendige Pakete installieren:

sudo apt install cryptsetup cryptsetup-initramfs

Fügen Sie die folgende Zeile zu /etc/default/grub hinzu:

GRUB_ENABLE_CRYPTODISK=y

Ein bootfähiges Gerät vorbereiten

Ich habe eine Xfce-Version aus dem Debian Live Repo genommen, aber Sie können jedes andere vernünftige moderne Live-CD-Image nehmen (Sie können eine Ubuntu Live-CD verwenden, um Debian zu verschlüsseln, oder umgekehrt, oder sogar ein RedHat-basiertes Image nehmen).

Das Verschlüsselungsskript vorbereiten

Speichern Sie das folgende Script als encryptdrive.sh auf einem anderen USB-Stick (Live-Images sind normalerweise schreibgeschützt), um das Tippen während der Nutzung von Debian Live zu vermeiden:

#!/bin/bash

set -euo pipefail

# Zum Debuggen/Überprüfen der Befehle auskommentieren
#set -x

# Eine bestehende Partition mit LUKS2 auf Debian 12 verschlüsseln

# HAFTUNGSAUSSCHLUSS: BENUTZEN AUF EIGENE GEFAHR UND MACHEN SIE BACKUPS
# Für meinen persönlichen Gebrauch gemacht und hat fast KEINE Fehlertests!!

# Basierend auf Anweisungen von:
# https://wiki.archlinux.org/index.php/dm-crypt/Device_encryption#Encrypt_an_existing_unencrypted_filesystem

DISK="${1:-}"

if [ -z "$DISK" ]; then
	echo "Verwendung: $ /dev/sdXY"
	exit 1
fi

# Führen Sie eine Überprüfung des Dateisystems durch
e2fsck -f "$DISK"

# Machen Sie das Dateisystem etwas kleiner, um Platz für den LUKS-Header zu schaffen
BLOCK_SIZE=`dumpe2fs -h $DISK | grep "Blockgröße" | cut -d ':' -f 2 | tr -d ' '`
BLOCK_COUNT=`dumpe2fs -h $DISK | grep "Blockanzahl" | cut -d ':' -f 2 | tr -d ' '`
SPACE_TO_FREE=$((1024 * 1024 * 32)) # 16MB sollten ausreichen, aber fügen Sie eine Sicherheitsmarge hinzu
NEW_BLOCK_COUNT=$(($BLOCK_COUNT - $SPACE_TO_FREE / $BLOCK_SIZE))
resize2fs -p "$DISK" "$NEW_BLOCK_COUNT"

# Führen Sie den Verschlüsselungsprozess durch
# MAN: https://man7.org/linux/man-pages/man8/cryptsetup-reencrypt.8.html
cryptsetup reencrypt --encrypt --reduce-device-size 16M "$DISK"

# Vergrößern Sie das Dateisystem, um den verbleibenden Platz auszufüllen (d.h. entfernen Sie die Sicherheitsmarge von früher)
cryptsetup open "$DISK" recrypt
resize2fs /dev/mapper/recrypt
cryptsetup close recrypt

# Vergessen Sie nicht, /etc/crypttab und /etc/fstab bei Bedarf zu aktualisieren!
#
# Beispiel:
/etc/crypttab
# crypt_root    UUID=xxx    none    luks
# /etc/fstab
# /dev/mapper/crypt_root    /        ext4    errors=remount-ro        1
#
# Denken Sie daran, "update-initramfs -u -k all" nach dem Aktualisieren des rootfs crypttab auszuführen

Jetzt mit dem vorbereiteten Gerät in das Live-Debian booten, um das Mounten Ihrer Hauptdateisysteme zu überspringen

Schritte, die beim Booten in Debian Live durchgeführt werden müssen

Finden Sie die Partition(en), die Sie verschlüsseln möchten:

sudo fdisk -l

Auf neueren Laptops mit SSDs lauten die Festplatt-Namen möglicherweise so etwas wie /dev/nvme, auf älteren /dev/sda, /dev/sdb etc.

Starten Sie die Verschlüsselung mit encrypdrive.sh, das zuvor gespeichert wurde

Bei mir war es /dev/nvmen1p2 (/dev/nvmen1p1 ist für die EFI-Partition reserviert). Ab jetzt nehmen wir an, dass dies auch bei Ihnen der Fall ist. Wenn Ihre Hauptpartition anders ist, ersetzen Sie einfach entsprechend den Gerätenamen)

sudo /bin/bash encryptdrive.sh /dev/nvmen1p2

Dies wird einige Zeit in Anspruch nehmen, abhängig von der Geschwindigkeit Ihres Systems und der Größe der Festplatte

Wichtig: Wandeln Sie das Laufwerk in das LUKS1-Format um

GRUB unterstützt das LUKS2-Format nicht gut genug, daher ist es besser, bei der sichereren Version zu bleiben.
Diese Vorgänge sind viel schneller als die Verschlüsselung selbst, da sie nur den Verschlüsselungsheader ändern.

sudo cryptsetup luksConvertKey --pbkdf pbkdf2 /dev/nvmen1p2
sudo cryptsetup convert --type luks1 /dev/nvmen1p2

Einstellungen zum Booten auf dem verschlüsselten Laufwerk anpassen:

export DEVICE_NAME="root_crypt"
cryptsetup open /dev/nvmen1p2 ${DEVICE_NAME}
mkdir /mnt/${DEVICE_NAME}
mount /dev/mapper/${DEVICE_NAME} /mnt/${DEVICE_NAME}
mount -t proc none /mnt/${DEVICE_NAME}/proc
mount -t sysfs none /mnt/${DEVIC-bind /dev /mnt/${DEVICE_NAME}/dev

Chroot zum verschlüsselten Laufwerk

chroot /mnt/${DEVICE_NAME}

Durchzuführende Schritte in der Chroot-Umgebung

  • Wenn Sie eine EFI-Partition haben (/boot/efi), mounten Sie diese: mount /dev/nvmen1p1 /boot/efi (prüfen Sie den Gerätenamen mit sudo fdisk -l)
  • Führen Sie blkid -o value -s UUID /dev/nvmen1p2 aus und behalten Sie den Wert
  • Bearbeiten Sie /etc/crypttab und fügen Sie die folgende Zeile hinzu: root_crypt UUID= none luks
    • Beispiel: root_crypt UUID=24bfb42b-007d-4777-9889-46d3e016e60b none luks
  • Re-installieren Sie grub sudo grub-install /dev/nvme (wie William, bin ich mir nicht sicher, ob dieser Schritt erforderlich ist)
  • Update initramfs: sudo update-initramfs -k all -u
  • Update des Bootloaders mit sudo update-grub
  • Verlassen Sie das Chroot mit exit

Abschließende Bereinigung

sudo umount /mnt/${DEVICE_NAME}/proc
sudo umount /mnt/${DEVICE_NAME}/sys
sudo umount /mnt/${DEVICE_NAME}/dev
sudo umount /mnt/${DEVICE_NAME}/boot/efi
sudo umount /mnt/${DEVICE_NAME}
sudo cryptsetup close ${DEVICE_NAME}
sudo rmdir -v /mnt/${DEVICE_NAME}

Das sollte es gewesen sein. Sie sollten bereit sein, in eine sicherere Umgebung zu starten.
Viel Spaß!