Gemäß dem früheren Artikel zu diesem Thema hier eine deutschsprachige Anleitung zum erstellen eines USB-Sticks, der als Schlüssel für eine LUKS verschlüsselte Festplatte genutzt werden kann. Ziel: Beim Starten des Computers braucht nur der USB-Stick eingesteckt zu werden – eine Passworteingabe ist dann nicht mehr nötig.

Voraussetzungen

Benötigt wird das Hilfsprogramm uuencode. Bei Debian befindet es sich im Paket sharutils.

Los geht’s – Vorbereitung des USB-Sticks

Zuerst erstellen wir eine Schlüsseldatei:

> head -c 2880 /dev/urandom | uuencode -m - | head -n 65 | tail -n 64 > meinFestplattenSchluessel.key

Dann prüfen wir, um welche Partition es geht:

> cat /etc/crypttab
sda8_crypt UUID=a40e79d1-3c88-0df3-bf07-42144b9107a1 none luks

Offensichtlich ist sda8 verschlüsselt. Also fügen wir der Partition den soeben erstellten Schlüssel hinzu:

> cryptsetup luksAddKey /dev/sda8 meinFestplattenSchluessel.key

Dann nur noch die .key-Datei ins Root-Verzeichnis des USB-Sticks kopieren – fertig.

Schritt 2 – Boot-Prozess anpassen

Wenn wir davon ausgehen, dass der USB-Stick FAT32 formatiert ist, benötigen wir in der Datei /etc/initramfs-tools/modules folgende zusätzliche Zeilen, um sicherzustellen, dass der Stick auch schon in der Pre-Boot Phase gelesen werden kann:

# /etc/initramfs-tools/modules
vfat
fat
nls_cp437
nls_iso8859_1
nls_utf8

USB-Sticks automatisch nach Schlüsseln für Festplatten zu durchsuchen ist leider noch kein Standard-Bestandteil von Linux. – Kein Problem, wir können einfach gemäß http://wejn.org/how-to-make-passwordless-cryptsetup.html ein eigenes Skript erstellen. Dieses speichern wir unter /usr/local/sbin/crypto-usb-key.sh und geben ihm Ausführungsrechte.

#!/bin/sh

# Part of passwordless cryptofs setup in Debian Etch.
# See: http://wejn.org/how-to-make-passwordless-cryptsetup.html
# Author: Wejn <wejn at box dot cz>

if [ "x$1" = "x" -o "x$1" = "xnone" ]; then
	KEYF=meinFestplattenSchluessel.key
else
	KEYF=$1
fi
MD=/tmp-usb-mount

echo "Lesen des Festplattenpasswortes von den angeschlossenen USB Sticks ..." >&2
mkdir -p $MD
modprobe usb-storage >/dev/null 2>&1
modprobe vfat >/dev/null 2>&1
sleep 7
OPENED=0
for SFS in /sys/block/sd*; do
	DEV=`basename $SFS`
	F=$SFS/${DEV}1/dev
	if [ 0`cat $SFS/removable` -eq 1 -a -f $F ]; then
		echo "> Trying device: $DEV ..." >&2
		mount /dev/${DEV}1 $MD -t vfat -o ro 2>/dev/null
		if [ -f $MD/$KEYF ]; then
			cat $MD/$KEYF
			umount $MD 2>/dev/null
			OPENED=1
			break
		fi
		umount $MD 2>/dev/null
	fi
done

if [ $OPENED -eq 0 ]; then
	echo "FEHLER: Kein USB Schluessel gefunden ..." >&2
	echo -n "Bitte geben Sie das Festplattenpasswort von Hand ein: " >&2
	read -s -r A
	echo -n "$A"
else
	echo "Das Festplattenpasswort wurde erfolgreich vom USB-Stick geladen!" >&2
fi

Dieses Skript sucht auf allen angeschlossenen USB-Sticks nach der Schlüssel-Datei – und sollte beim Start des Rechners aufgerufen werden – dafür sorgen wir mit /etc/crypttab. Diese kann beispielsweise so aussehen:

sda8_crypt UUID=a40e79d1-3c88-0df3-bf07-42144b9107a1 meinFestplattenSchluessel.key luks,keyscript=/usr/local/sbin/crypto-usb-key.sh

Zu guter Letzt muss noch das Startskript aktualisiert werden; im Falle von Grub2 mit:

> update-grub2
> update-initramfs -u

USB Stick einstecken, neu starten und ausprobieren!

Neben dem oben erwähnten Quelle besten Dank an http://www.oxygenimpaired.com/ubuntu-with-grub2-luks-encrypted-lvm-root-hidden-usb-keyfile.