FeD:HowTo/Root-Verschlüsselung mit USB-Schlüssel
Aus Förderverein euregionale Digitalkultur e.V.
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)