Posts mit dem Label Encryption werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Encryption werden angezeigt. Alle Posts anzeigen

19. August 2013

Linux: Verschlüsselte LVM-Volumes automatisch entsperren

In diesem Post soll gezeigt werden, wie verschlüsselte LVM-Volumes beim Booten eines Linux-Systems automatisch entsperrt werden können. Dies ist beispielsweise sinnvoll, um eine externe Festplatte, deren Partitionen mittels LVM verschlüsselt wurden, automatisch zu entsperren, so dass sie ohne explizite Eingabe eines Passworts sofort zu Verfügung steht. Statt der manuellen Entschlüsselung durch eine Passwortabfrage wird hierfür eine Datei genutzt, die einen entsprechenden Schlüssel enthält. Um die Sicherheit zu bewahren muss diese Datei ebenfalls verschlüsselt auf der Root-Partition des Systems abgespeichert werden. Der Zugang zu einem System mit verschlüsselter Root-Partition wird in der Regel über eine Passwortabfrage abgesichert, weshalb die Sicherheit erhalten bleibt. Lediglich weitere manuelle Passworteingaben können auf diese Weise vermieden werden.

Erstellen des Schlüssels


Der Schlüssel, der das manuell einzugebende Passwort ersetzt wird in einer Datei auf der Root-Partition abgespeichert. Es bietet sich an, diesen Schlüssel durch zufällige Werte zu generieren. Der folgende Befehl erzeugt hierfür eine Datei mit einer Größe von 4 kB, die unter /root/keyfile abgelegt wird:
 $ sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4  
Um die Sicherheit weiter zu erhöhen, sollte diese Datei nur durch den Root-Benutzer lesbar sein. Um die Zugriffsrechte dementsprechend anzupassen kann der folgende Befehl genutzt werden:
 $ sudo chmod 0400 /root/keyfile  

Verwendung des Schlüssels


Um anschließend zu konfigurieren, dass das entsprechende LVM-Volume nicht nur durch das Passwort, sondern ebenfalls durch den, im vorherigen Schritt erzeugten, Schlüssel entschlüsselt werden kann, muss nun der folgende Befehl ausgeführt werden. Der Vorgang muss dabei durch Eingabe des Passworts des LVM-Volumes authorisiert werden.
 $ sudo cryptsetup luksAddKey /dev/sdb1 /root/keyfile  
Die Bezeichnung /dev/sdb1 entspricht dabei der Bezeichnung der Partition, die entschlüsselt werden soll. Auf diese Weise können bis zu 10 Schlüssel hinzugefügt werden.

Crypttab konfigurieren


Um das LVM-Volume automatisch beim Booten des Systems anhand des Schlüssels zu entsperren, ist es notwendig, eine entsprechende Konfiguration in der Datei /etc/crypttab vorzunehmen. Diese Datei kann über den folgenden Befehl in einem Editor geöffnet werden:
 $ sudo nano /etc/crypttab
Anschließend muss ein neuer Eintrag in die Datei hinzugefügt werden. Dieser könnte etwa folgendermaßen aussehen:
 name  /dev/sdb1  /root/keyfile  luks,nofail  
Die Spalte mit dem Wert "name" kann dabei durch einen beliebigen Namen ersetzt werden und der Wert /dev/sdb1 enthält wiederum die Bezeichnung zu entschlüsselnden Partition. In der dritten Spalte wird auf die zuvor erstellte Datei mit dem Schlüssel verwiesen und die letzte Spalte definiert, dass es sich um eine Verschlüsselung mittels Luks handelt und dass eventuelle Fehler ignoriert werden sollen. Dies bietet sich besonders für die automatische Entschlüsselung von externen Festplatten an, bei denen es vorkommen kann, dass sie während des Bootens auch manchmal nicht angeschlossen sind.

Statt einer Bezeichnung wie /dev/sdb1 für die zu entschlüsselnde Partition kann auch deren UUID verwendet werden. Dies hat den Vorteil, dass diese eindeutig ist und auch erhalten bleibt, wenn eine unterschiedliche Konstellation von Peripherie an dem System angeschlossen ist. Hierfür muss die Spalte "/dev/sdb1" durch den Wert "/dev/disk/by-uuid/<UUID>" ersetzt werden. Die jeweilige UUID der Partition erhält man beispielsweise über den folgenden Befehl, der alle UUIDs der vorhandenen Partitionen ausgibt.
 $ sudo blkid  

Eine beispielhafte Crypttab-Konfiguration (Klicken zum Vergrößern)

Beim nächsten Bootvorgang sollte die jeweilige Partition automatisch entschlüsselt werden, ohne dass eine Passworteingabe notwendig ist. Dies ist dadurch zu sehen, dass ein entsprechender Eintrag in dem Verzeichnis /dev/mapper vorhanden ist. Sie kann anschließend gemountet werden, um auf die darauf enthaltenen Dateien zuzugreifen. Wie die entschlüsselte Partition ebenfalls während des Bootvorgangs automatisch gemountet werden kann, wird in diesem Artikel erklärt.

Weiterführende Links:

3. Juni 2013

Nexus 10: CyanogenMod auf verschlüsseltem Gerät updaten

Das CustomROM "CyanogenMod" bietet seit Version 10 die Möglichkeit, vorhandene Updates automatisch herunterzuladen, so dass diese anschließend installiert werden können. Unter dem Nexus 10 oder ähnlichen Geräten, die über keine externe SD-Karte verfügen, kann das Einspielen der Updates  jedoch zu Problemen führen, falls das Gerät mittels der entsprechenden Android-Funktion verschlüsselt wurde. Im Folgenden soll diese Problematik erläutert und eine Möglichkeit zur Abhilfe gezeigt werden.

Die Update-Überprüfung von CyanogenMod 10 in den Android-Systemeinstellungen (Klicken zum Vergrößern)

Wenn ein Update zur Verfügung steht, wird das entsprechende zip-Archiv, dass die dafür notwendigen Dateien enthält, durch den Update-Mechanismus heruntergeladen und unter dem Verzeichnis /sdcard/cmupdater/ gespeichert. Wenn das Gerät über keine externe SD-Karte verfügt, handelt es sich bei diesem Verzeichnis lediglich um eine virtuelle Partition. Wenn das Update durch den Benutzer zur Installation ausgewählt wurde, wird das Gerät neu gestartet und in den Recovery-Modus (in diesem Post wird davon ausgegangen, das es sich hierbei um "ClockworkMod Recovery" handelt) gebootet um die Dateien des entsprechenden Archivs zu entpacken und zu installieren. Falls das Dateisystem des Geräts jedoch verschlüsselt wurde, steht die virtuelle SD-Karte, die das Archiv enthält, nicht zur Verfügung, da das zugehörige Verzeichnis auf dem verschlüsselten Dateisystem liegt und zu diesem Zeitpunkt keine Möglichkeit zu dessen Entschlüsselung besteht. Das Updaten des Geräts scheitert demzufolge, da die notwendige Datei nicht gefunden werden kann.

Die elegante Möglichkeit, die CyanogenMod-Installation von dem jeweiligen Gerät aus herunterzuladen und zu installieren, ist damit ausgeschlossen, falls das Gerät verschlüsselt werden soll. Das Einspielen von Updates muss dann über eine USB-Verbindung manuell gesteuert werden, wozu folgende Schritt nötig sind:
  1. Zunächst muss die zu installierende CyanogenMod-Version auf dem Rechner heruntergeladen werden.
  2. Anschließend muss das Android-Gerät durch Halten der Power-, sowie der beiden Lautstärke-Tasten in den Bootloader-Modus neu gestartet werden.
  3. Über die Lautstärke-Tasten navigiert man anschließend zum Menüpunkt "RECOVERY MODE", den man durch Drücken der Power-Taste auswählt.
  4. Der Recovery-Modus wird anschließend gestartet. In dessen Hauptmenü wählt man dann die Option "install zip from sideload".
  5. Das Gerät muss nun per Micro-USB mit dem Rechner verbunden werden.
  6. Über die Kommandozeile kann anschließend aus dem Verzeichnis, das das heruntergeladene zip-Archiv enthält an das Android-Gerät übertragen werden. Hierzu genügt folgender Befehl, wobei der Name der zip-Datei natürlich angepasst werden muss:
     adb sideload cm-10.1-20130603-NIGHTLY-manta.zip  
Das Update sollte darauf hin eingespielt werden und das Gerät kann anschließend neu gestartet werden.