FeD:HowTo/Root-Verschlüsselung mit USB-Schlüssel

Aus Förderverein euregionale Digitalkultur e.V.

Wechseln zu: Navigation, Suche

Das Root-Dateisystem verschlüsseln und einen USB-Stick so einrichten, dass davon mit dem passenden Schlüssel gebootet wird. Der USB-Stick kann sehr früh wieder ausgesteckt werden.

Dieses HowTo ist eher eine Niederschrift von dem, an das ich mich bei meiner eigenen Root-Verschlüsselung erinnern kann. Es kann deshalb sein, dass ich ein paar Sachen vergessen habe. Gerätedateien und Verzeichnisse müssen an das eigene System angepasst werden. Für Schäden ist jeder selbst vearantwortlich.

Ich habe mich an http://forum.ubuntuusers.de/topic/how-to:-komplett-verschluesselung-mit-cryptse/ orientiert.

Inhaltsverzeichnis

Vorteile und Nachteile

Vergleich mit der klassischen Verschlüsselung mit Boot-Partition und Passwort.

  • Man braucht keine weitere Partition auf der Festplatte, dafür aber eine auf einem USB-Stick. Hier reichen aber 32MB völlig aus.
  • Man braucht sich zwar kein Passwort zu merken, aber darf dafür den USB-Stick nicht verschlampen.
  • Es kann nicht passieren, dass man beim Eintippen des Passworts beobachtet wird, oder das Passwort auf dem Bildschrim sichtbar eingibt.

System installieren

Ich habe Ubuntu karmic koala erst mal auf eine andere Partition installiert. Mit Live-CD und chroot-Tricks sollte es zwar auch möglich sein es direkt auf die Zielpartition zu installieren, aber mich hats nicht gestört.

Benötigte Packete nachinstallieren:

sudo apt-get install cryptsetup initramfs-tools

Crypto-Root einrichten

erstmal den Schlüssel erzeugen. ich hab 1024B benutzt um auch sicher die volle Hash-Größe auszunutzen:

sudo dd if=/dev/random of=/root/sda2-key bs=1 count=1024

Dabei ein bisschen surfen, bis sich genug Entropie angesammelt hat. Die Datei dann vorsichtshalber schützen:

sudo chmod u-w,g-r,o-r /root/sda2-key

Den LUKS-Container anlegen und öffnen:

sudo cryptsetup luksFormat --key-size=256 /dev/sda2 /root/sda2-key
sudo cryptsetup luksOpen --key-file /root/sda2-key /dev/sda2 root

Dann auf dem entschlüsselten Block-Gerät das Lieblings-Dateisystem installieren und irgendwo hin mounten:

sudo mkfs.ext4 -m2 -L cryptoroot -v /dev/mapper/root
sudo mount /dev/mapper/root /mnt

Die Einträge in /etc/crypttab und /etc/fstab kann man sich anscheinend sparen. Aber vielleicht schadet es auch nicht, wenn da was passendes hinschreibt.

Wenn man die Einträge in /etc/cryptab und in /etc/fstab vornimmt, dann kann man den nächsten Schritt des manuellen anlegen des init-premounts und hooks auslassen. Dafür muss dann aber das aktuelle initramfs nach einem update auf den USB-stick kopiert werden.


/etc/cryptab:

root /dev/sda2 /boot/sda2-key luks,retry=1

Danach muss einmal das initramfs geupdatet werden:

update-initramfs -u

Kopieren durch:

sudo cp -avx /boot /media/cryptoboot/boot

Danach einfach beim Eintrag unten /media/cryptoboot/boot/grub/device.map weitermachen

USB-Stick einrichten

init-premount

In /etc/initramfs-tools/scripts/init-premount eine Datei (decrypt) anlegen, mit folgendem Inhalt:

#!/bin/sh
PREREQ=""
prereqs()
{
   echo "$PREREQ"
}

case $1 in
prereqs)
   prereqs
   exit 0
   ;;
esac
#bishier hin nötiger overhead

cryptsetup --key-file /sda2-key  luksOpen /dev/sda2 root

hooks

In /etc/initramfs-tools/hooks eine Datei (copy_key) anlegen, mit folgendem Inhalt:

#!/bin/sh
PREREQ=""
prereqs()
{
   echo "$PREREQ"
}

case $1 in
prereqs)
   prereqs
   exit 0
   ;;
esac

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
cp /root/sda2-key ${DESTDIR}

Jetzt beiden Dateien noch die Ausführrechte geben:

sudo chmod +x /etc/initramfs-tools-crypto/hooks/copy_key
sudo chmod +x /etc/initramfs-tools/scripts/init-premount/decrypt

Das neue initramfs erzeugen und direkt schützen, weil es den Key enthält:

sudo mkinitramfs -d /etc/initramfs-tools-crypto/ -o /tmp/initrd-crypto-$(uname -r) -v
sudo chmod u-w,g-r,o-r /tmp/initrd-crypto-$(uname -r)

Dann das neue initramfs und alles, was der Kernel so beim Booten braucht auf den USB-Stick kopieren:

sudo cp -avx /boot /media/cryptoboot/boot
sudo cp -avx /tmp/initrd-crypto-$(uname -r) /media/cryptoboot/boot

/media/cryptoboot/boot/grub/device.map noch durch die folgende Zeile ergänzen:

(hd1)	/dev/sdb

Grub auf dem USB-Stick installieren:

sudo grub-install --root-directory=/media/cryptoboot/ /dev/sdb

der nötige Menü-Eintrag in /media/cryptoboot/boot/grub/grub.cfg sieht so aus:

menuentry "Verschuesselt Booten" {
	insmod ext2
	# keine Ahnung, ob die Zeile hierüber nötig ist;
	#  muss an das FS des USB-Sticks angepasst werden
	linux	/boot/vmlinuz-wieauchimmer root=/dev/mapper/root ro
	initrd	/boot/initrd-crypto-wieauchimmer
}

Swap verschlüsseln(optional)

Mit dieser Anleitung wird das swap verschlüsselt.

Benötigt wird eine Partition die man als swap benutzen will. Falls diese Partition gemountet ist kann man diese mit

sudo swapoff /dev/sda$SWAPPARTITION 

unmounten

sudo cryptsetup luksFormat --key-size=256 /dev/sda$SWAPPARTITION  -y
sudo cryptsetup luksOpen /dev/sda$SWAPPARTITION swap
sudo mkswap /dev/mapper/swap 

in /etc/fstab

/dev/mapper/swap  none      swap    sw              0       0

in /etc/crypttab

swap /dev/hda6 /dev/urandom swap

initramfs updaten

update-initramfs -u

und auf den usb stick kopieren und fertig


Fast fertig

Das installierte System jetzt auf das entschlüsselte Dateisystem kopieren:

sudo cp -avx / /mnt

Jetzt ist die Zeit für einen Test-Boot gekommen. Wenn alles stimmt nicht vergessen die unverschlüsselte Partition komplett zu überschreiben, weil sie noch den Schlüssel enthält.

Viel Spaß --MRQ 18:03, 30. Sep. 2009 (UTC)