[[Vorlage(Archiviert, )]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Formatieren:] [:Terminal: Ein Terminal öffnen] [:Kernelmodule: Umgang mit Kernelmodulen (Treibern)] [:sudo:Root-Rechte] [:Dateisystem:] [:Editor: Einen Editor öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] [:Pakete installieren: Installation von Programmen] }}} [[Inhaltsverzeichnis()]] 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. {{{#!vorlage 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 {{{#!vorlage Befehl 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`. {{{#!vorlage Hinweis Wird die Karte nicht richtig erkannt, muss dies zu allererst behoben werden, u.U. mit Hilfe der [http://forum.ubuntuusers.de/ Forengemeinschaft] oder dem [http://wiki.ubuntuusers.de/ Wiki]. }}} Für den nächsten Befehl muss zuerst folgendes Paket installiert[8] werden: {{{#!vorlage Paketinstallation hwinfo, universe, bis einschließlich [:Raring:Ubuntu 13.04] }}} Nun können alle erkannten Speicher-Medien aufgelistet werden: {{{#!vorlage Befehl 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 {{{#!vorlage Befehl sudo blkid }}} liefert dann noch die [:UUID:] der SD-Karte. Damit sind alle Information verfügbar, um an die eigentliche Arbeit zu gehen. = Installation = {{{#!vorlage Hinweis Viele der folgenden Kommandos müssen mit System-Rechten[4] eingegeben werden. }}} {{{#!vorlage Befehl 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. {{{#!vorlage Warnung Alle Daten auf der SD-Karte werden durch das Formatieren gelöscht! }}} Die SD-Karte wird {{{#!vorlage Befehl umount /media/disk # Dies ist ein Beispiel. Einhängepunkt muss ggf. angepasst werden. }}} ausgehängt und dann mit {{{#!vorlage Befehl mkfs.ext3 /dev/mmcblk0 # Dies ist ein Beispiel. Gerätename muss ggf. angepasst werden. }}} formatiert. Dann wird sie mit {{{#!vorlage Befehl mkdir /media/disk mount /dev/mmcblk0 /media/disk # Dies ist ein Beispiel. Gerätename muss ggf. angepasst werden. }}} erneut ins System gehängt. Mit {{{#!vorlage Befehl 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. #Dazu muss der Schlüssel nun [:LUKS/Schlüsseldatei: cryptsetup] mitgeteilt werden. == Systemanpassung == Mit {{{#!vorlage Befehl 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 {{{#!vorlage Befehl 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: {{{#!vorlage Befehl cp /etc/crypttab /etc/crypttab.backup }}} Dann wird die Datei '''/etc/crypttab''' in einem Editor geöffnet und die Zeile {{{ lukslvm UUID= none luks }}} ersetzt mit {{{ lukslvm UUID= none luks,keyscript=/sbin/keyscript }}} `` 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''' {{{#!code bash #!/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 &2 read tmpin &2 stty echo &2 fi echo -n $tmpin fi }}} '''Plymouth''' {{{#!code bash #!/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 {{{#!vorlage Befehl 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 {{{#!vorlage Befehl 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!). {{{#!vorlage Befehl 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: * [http://www.andreas-janssen.de/cryptodisk.html Festplattenverschlüsselung mit Debian GNU/Linux] {de} * [topic:lsung-fuer-komfortables-veritschluesseln-mit-:Lösung für komfortables Verschlüsseln mit USB-Stick als Key] #tag: Ubuntu, System, Sicherheit, Shell