System-Entschlüsselung mit SD-Karte oder Passwort
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Im Artikel System verschlüsseln ist beschrieben, wie ein Ubuntu-System vollständig (bis auf /boot) verschlüsselt und mit einem LUKS-Passwort während des Bootens entschlüsselt wird. Für z.B. manche Laptop-Nutzer reicht es aber eventuell aus, diesen Rechner nur unterwegs mittels Passwort zu entsperren. In einer "sichereren" Umgebung (z.B. zu Hause) würde man eher eine bequeme Lösung bevorzugen, bei der sich der Rechner mittels einem eingesteckten Speichermedium selbst entsperrt.
Diese Anleitung beschreibt Schritt für Schritt die Einrichtung eines Systems mit SD-Karte, die diese Funktion übernimmt. Sollte diese spezielle SD-Karte nicht eingesteckt sein, wird wie gehabt nach dem Passwort gefragt. Diese Anleitung kann selbstverständlich an andere Speichermedien (USB-Stick, MMPro-Karten etc.) angepasst werden.
Hinweis:
Diese Anleitung baut vollständig auf dem Artikel System verschlüsseln auf und ist als eine Erweiterung zu verstehen. Insbesondere wird seine Syntax übernommen, z.B. /dev/sdX2 für das LVM-Volume.
Vorbereitungen¶
In diesem Beispiel wird eine beliebige SD-Karte verwendet. Beim Kauf einer Digitalkamera liegen die z.B. in viel zu kleinen Größen bei, so eine kann man dann exklusiv zum Entschlüsseln verwenden. Alternativ zwackt man sich etwas Platz von einer großen Karte ab. Für dieses Beispiel wird eine (kleine) Karte vollständig formatiert[1] werden, also keine eigene Mini-Partition erstellt.
Zuerst muss festgestellt werden, ob die SD-Karte vom System erkannt wird und welche Treiber dafür nötig sind. Ubuntu wird ohne Karte gestartet. In einem Terminal-Fenster[2] werden mit
watch --i=3 lsmod
alle 3 Sekunden die momentan geladenen Kernelmodule[3] angezeigt. Jetzt wird die SD-Karte eingesteckt. Wurde die Karte richtig vom System erkannt, sollte nach kurzer Zeit neu geladene Module auftauchen, in diesem Fall:
Every 3,0s: lsmod Mon Aug 3 12:14:36 2009 Module Size Used by mmc_block 19464 0 binfmt_misc 18572 1 ppdev 16904 0 bridge 63904 0 stp 11140 1 bridge bnep 22912 2 input_polldev 12688 0 ...
ist es eines, nämlich mmc_block
.
Hinweis:
Wird die Karte nicht richtig erkannt, muss dies zu allererst behoben werden, u.U. mit Hilfe der Forengemeinschaft oder dem Wiki.
Für den nächsten Befehl muss zuerst folgendes Paket installiert[8] werden:
hwinfo (universe, bis einschließlich Ubuntu 13.04)
Befehl zum Installieren der Pakete:
sudo apt-get install hwinfo
Oder mit apturl installieren, Link: apt://hwinfo
Nun können alle erkannten Speicher-Medien aufgelistet werden:
sudo hwinfo --disk
Ein Eintrag wie z.B.
29: None 00.0: 10600 Disk [Created at block.243] UDI: /org/freedesktop/Hal/devices/storage_serial_0xa9f72db2 Unique ID: HAKk.Fxp0d3BezAE Parent ID: tT1U.VJKpUAQeTjB SysFS ID: /class/block/mmcblk0 SysFS BusID: mmc0:2db2 SysFS Device Link: /devices/pci0000:00/0000:00:1e.0/0000:09:01.1/mmc_host/mmc0/mmc0:2db2 Hardware Class: disk Model: "Disk" Driver: "sdhci-pci", "mmcblk" Driver Modules: "sdhci_pci" Device File: /dev/mmcblk0 Device Number: block 179:0-179:7 Features: Hotpluggable Geometry (Logical): CHS 455/4/16 Size: 29120 sectors a 512 bytes Config Status: cfg=new, avail=yes, need=no, active=unknown Attached to: #4 (SD Host controller)
bedeutet, dass
die SD-Karte erkannt wurde,
als Gerät /dev/mmcblk0 eingebunden ist, und
das Treibermodul dafür
sdhci_pci
ist.
Ein
sudo blkid
liefert dann noch die UUID der SD-Karte. Damit sind alle Information verfügbar, um an die eigentliche Arbeit zu gehen.
Installation¶
Hinweis:
Viele der folgenden Kommandos müssen mit System-Rechten[4] eingegeben werden.
sudo -i
startet eine root-Sitzung.
Schlüsselkarte erzeugen¶
Für den höchstwahrscheinlichen Fall, dass die SD-Karte bereits ein handelsübliches Dateisystem[5] besitzt, wird sie vermutlich auf dem Desktop erschienen sein, was dafür spricht, dass sie z.B. als /media/disk eingehängt wurde. Die Karte soll jetzt mit dem ext3-Dateisystem formatiert werden. ext3 hat den Vorteil, dass keine zusätzlichen Kernelmodule für dieses Dateisystem geladen werden müssen.
Achtung!
Alle Daten auf der SD-Karte werden durch das Formatieren gelöscht!
Die SD-Karte wird
umount /media/disk # Dies ist ein Beispiel. Einhängepunkt muss ggf. angepasst werden.
ausgehängt und dann mit
mkfs.ext3 /dev/mmcblk0 # Dies ist ein Beispiel. Gerätename muss ggf. angepasst werden.
formatiert. Dann wird sie mit
mkdir /media/disk mount /dev/mmcblk0 /media/disk # Dies ist ein Beispiel. Gerätename muss ggf. angepasst werden.
erneut ins System gehängt. Mit
dd if=/dev/urandom of=/media/disk/keyfile bs=4k count=1
wird dann ein 4kB großer Zufallsdatenstrom als Schlüsseldatei keyfile auf der Karte erzeugt. Mit der Schlüsseldatei soll das zukünftige System alternativ zur Passworteingabe entschlüsselt werden können.
Systemanpassung¶
Mit
cryptsetup luksAddKey /dev/sdX2 /media/disk/keyfile # Dies ist ein Beispiel. Gerätename muss ggf. angepasst werden.
wird die Schlüsseldatei als neuer Schlüssel für das LVM-Volume /dev/sdX2 hinzugefügt. sdX2 muss selbstverständlich durch einen gültigen Gerätenamen ersetzt werden. Der Schlüssel wird hinzugefügt, nachdem das bisherige Passwort eingegeben wurde.
Bevor weitere Änderungen vorgenommen werden, sollte die aktuelle initrd-Datei gesichert werden. Für z.B. initrd.img-2.6.28-15-generic erledigt dies
cp /boot/initrd.img-2.6.28-15-generic /boot/initrd.img-2.6.28-15-generic.backup # Dies ist ein Beispiel. Versionsnamen müssen ggf. angepasst werden.
Mit dieser Kopie kann zur Not aus Archiv/GRUB heraus das momentane (sicher funktionierende) System gestartet werden, falls es zu Problemen kommen sollte (s.u.). Jetzt werden die oben ermittelten Kernel-Module in die Liste der zu ladenden Module angefügt. Dazu wird /etc/initramfs-tools/modules (in diesem Beispiel) in einem Editor[6] mit Root-Rechten um die Zeilen
sdhci_pci mmc_block
erweitert. Dies ermöglicht es, dass die SD-Karte bereits im frühen boot-Stadium der initram richtig erkannt werden kann. Die Datei /etc/crypttab legt fest, welche verschlüsselten Datenträger wie entschlüsselt werden. crypttab wird jetzt dahingehend geändert, dass statt einer Passworteingabe ein Skript /sbin/keyscript läuft, dessen Standardausgabe einer der (in diesem Beispiel zwei) Schlüssel ist, und zwar entweder das Passwort (wie gehabt) oder das keyfile auf der SD-Karte. Zuvor wird wieder eine Sicherungskopie gemacht:
cp /etc/crypttab /etc/crypttab.backup
Dann wird die Datei /etc/crypttab in einem Editor geöffnet und die Zeile
lukslvm UUID=<VOLUME_ID> none luks
ersetzt mit
lukslvm UUID=<VOLUME_ID> none luks,keyscript=/sbin/keyscript
<VOLUME_ID>
sollte eine UUID sein und hier nicht geändert werden. Nach dem Speichern kann der Editor wieder geschlossen werden. Jetzt wird das eigentliche Skript als Datei /sbin/keyscript erstellt.
Hierbei gilt es zwischen Plymouth und USplash zu unterscheiden, da beide Bootsplash-Systeme anders angesprochen werden.
USplash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/bin/sh modprobe usb-storage 1>&2 # Zur Sicherheit, evtl. nicht notwendig sleep 10 # Kann u.U. verkürzt werden if [ -b /dev/disk/by-uuid/68560947-b5e5-494d-87e9-0d293d436cea ] # UUID muss angepasst werden then mkdir /keytmp 1>&2 mount /dev/disk/by-uuid/68560947-b5e5-494d-87e9-0d293d436cea /keytmp 1>&2 # UUID muss angepasst werden cat /keytmp/keyfile # Ausgabe der oben mit dd erzeugten Schlüsseldatei "keyfile" umount /keytmp 1>&2 else if [ -p /dev/.initramfs/usplash_outfifo ] && [ -x /sbin/usplash_write ] then /sbin/usplash_write "INPUTQUIET Enter password: " tmpin="$(/bin/cat /dev/.initramfs/usplash_outfifo)" else sleep 5 echo -n "Enter password: " 1>/dev/tty1 stty -echo </dev/console 1>&2 read tmpin </dev/console 1>&2 stty echo </dev/console 1>&2 fi echo -n $tmpin fi |
Plymouth
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/sh # keyscript.sh if [ -b /dev/disk/by-uuid/68560947-b5e5-494d-87e9-0d293d436cea ];then # UUID der Partition des Sticks mkdir /keytmp 1>&2 mount /dev/disk/by-uuid/68560947-b5e5-494d-87e9-0d293d436cea /keytmp 1>&2 # UUID der Partition des Sticks cat /keytmp/keyfile # Ausgabe der erzeugten Schluesseldatei "keyfile" umount /keytmp 1>&2 else if [ -x /bin/plymouth ] && plymouth --ping;then plymouth ask-for-password --prompt="LUKS-Passphrase for /dev/mapper/root:" else echo -n "LUKS-Passphrase for /dev/mapper/root" stty -echo read passphrase echo -n $passphrase stty echo; fi fi |
Die UUIDs müssen mit der der SD-Karte ersetzt werden. Das Skript versucht, die SD-Karte zu erkennen. Wenn dies gelingt, wird sie als Verzeichnis /keytmp der initial ram disk eingehängt. Das keyfile wird ausgelesen und an cryptsetup
übergeben. Wird keine SD-Karte gefunden (weil diese z.B. nicht eingesteckt wurde), wird ein Passwort mittels des entsprechenden Bootsplash-Systems (USplash
/Plymouth
) oder über die Console (read
) angenommen und dieses dann an cryptsetup
übergeben.
Nach dem Speichern von keyscript kann der Editor geschlossen werden. Das Skript wird dann ausführbar gemacht[7]. Schließlich werden alle Änderungen in die neue initial ram disk mit
update-initramfs -u
überführt. Das System erkennt automatisch, dass aus der /etc/crpyttab das /sbin/keyscript ausgeführt wird und lädt diese Datei in die neue aktualisierte initial ram disk.
Abschluss und Rettung¶
Um die "Schlüsselkarte" nicht ständig auf dem Desktop angezeigt zu bekommen, könnte z.B. mit
echo "UUID=68560947-b5e5-494d-87e9-0d293d436cea /mnt/disk ext3 users,defaults,noauto 0 0" >> /etc/fstab
dafür gesorgt werden, dass sie nur auf Anforderung eingebunden wird (UUID muss angepasst werden!).
exit
setzt den Administratoren-Rechten ein Ende. Nach einem Neustart des Systems sollte es sich mit eingesteckter SD-Karte eigenständig entschlüsseln. Bei fehlender Karte sollte nach einem Passwort gefragt werden. Sollte etwas nicht funktionieren, kann aus GRUB heraus jederzeit auf /boot/initrd.img-2.6.28-15-generic.backup (u.ä.) zugriffen werden.
Links¶
Diese Anleitung basiert auf Informationen der folgende Seiten: