[[Vorlage(Überarbeitung, 10.6.2017, LUKS, joe.schraube)]] {{{#!vorlage Warnung Ohne ein sicheres Kennwort nutzt die stärkste Verschlüsselung nichts! Wie man Passwörter am besten wählt, steht hier: [:Sicherheits_1x1:] }}} [[Vorlage(Getestet, trusty, xenial)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Partitionierung:] [:Formatieren: Formatieren eines Datenträgers] [:Editor: Einen Editor mit Root-Rechten öffnen] [:Skripte/Gerät_mit_Pseudozufallszahlen_überschreiben:Gerät mit Pseudozufallszahlen überschreiben] }}} [[Inhaltsverzeichnis(3)]] [[Bild(./logo.png, align=left)]] Diese Anleitung geht auf die Erstellung und Wartung von verschlüsselten Datenträgern mittels LUKS - [https://gitlab.com/cryptsetup/cryptsetup Linux Unified Key Setup] {en} - ein. Es handelt sich um das Standardverfahren zur Festplattenverschlüsselung unter Linux. Dabei werden alle nötigen Informationen zum Öffnen einer verschlüsselten Partition oder Container-Datei in dieser gespeichert. Das erlaubt es auch, beim Anschließen eines externen Datenträgers mit verschlüsselten Partitionen diese nach Passwortabfrage automatisch einzubinden. Es wird hier nur auf die Verwendung von LUKS eingegangen. Für eine Schritt-für-Schritt-Anleitung zum Verschlüsseln des Systems bitte die Artikel [:Daten_verschlüsseln:] und [:System_verschlüsseln:] hinzuziehen. {{{#!vorlage Hinweis Alle folgenden Befehle benötigen [:sudo:Root-Rechte]. Wenn man nicht `sudo` vor das betreffende Kommando setzen möchte, kann man temporär mit `sudo -s` eine Root-Shell öffnen. Diese wird nach Abschluss der Arbeiten mit dem Befehl `exit` wieder geschlossen. }}} = Vorbereitung = Zuerst wird dieses Paket installiert [1]: {{{#!vorlage Paketinstallation cryptsetup }}} Anschließend wird das benötigte Kernelmodul mittels des folgenden Befehls [2] geladen: {{{#!vorlage Befehl sudo modprobe dm-crypt }}} Damit sollte die Vorbereitung abgeschlossen sein. Zukünftig werden alle benötigen Module automatisch geladen. = Verwendung = Hier wird ein Auszug der wichtigsten LUKS-Funktionen dargestellt. Für weitere Informationen sei auf die entsprechenden Dokumentationen wie u.a. die [http://www.dsm.fordham.edu/cgi-bin/man-cgi.pl?topic=cryptsetup Manpage von cryptsetup] {en} verwiesen. == Erstellen == {{{#!vorlage Warnung Sollte nicht das [:System verschlüsseln:gesamte System verschlüsselt] werden, besteht die Gefahr, dass persönliche Daten in unverschlüsselten Bereichen gespeichert werden. Um dieses Risiko zu minimieren, sollte der Artikel [:Vorbereitung Teilverschlüsselung:Vorbereitung zur Teilverschlüsselung] durchgearbeitet werden. Ohne diese Maßnahmen ist die Verschlüsselung möglicherweise wirkungslos. Außerdem ist aus Sicherheitsgründen empfehlenswert, die Partition ein mal mit Zufallszahlen zu überschreiben, vor allen Dingen, wenn auf dieser vorher unverschlüsselte Daten gespeichert waren [6]. Ansonsten sind unter Umständen viele Dateien nach dem Verschlüsseln noch auslesbar. }}} Zum Erstellen eines LUKS-Geräts wird eine zu überschreibende Partition erzeugt oder ausgewählt [3]. Daraufhin werden diese Befehle ausgeführt, wobei `GERÄTEDATEI` durch den entsprechenden Namen ersetzt werden muss, z.B '''/dev/sde9''': {{{#!vorlage Hinweis Bereits bei der [:Installation:] kann auch bei der manuellen Partitionierung eine zu verschlüsselnde Datenpartition unter ''"Benutzen als:"'' mit dem Eintrag ''"physikalisches Volume für Verschlüsselung"'' zur Verschlüsselung ausgewählt werden. Danach kann man ein Passwort festlegen. In der Übersicht erscheint dann das neue Laufwerk, welches man z.B. als '''/cryptodaten''' wie ein unverschlüsseltes Laufwerk ins System einbinden und formatieren lassen kann. [:Verzeichnisstruktur#mnt:/mnt] sowie Unterordner sind für temporär eingehängte Partitionen freizuhalten und daher hier eher nicht zu benutzen. In der Regel möchte man jedoch einfach das [:System_verschlüsseln:System verschlüsseln] oder die [:Homeverzeichnis#Homeverzeichnis-verschluesseln:Homeverzeichnis-Verschlüsselung] im Installer (auch bei manueller Partitionierung) aktivieren und keine extra Datenpartition zur Verschlüsselung - für speziell gewünschte Fälle ist dies jedoch möglich. }}} {{{#!vorlage Warnung Alle bisherigen Daten auf dem betreffenden Gerät gehen verloren! Der Datenträger muss vorher [:mount#Dateisysteme-aushaengen: ausgehängt] werden, da ansonsten die Partition unbrauchbar wird! }}} 1. Zuerst den Anfang der zu verschlüsselnden Partition mit Zufallsbytes überschreiben: {{{#!vorlage Befehl sudo dd if=/dev/urandom bs=1M count=8 of=GERÄTEDATEI }}}\ {{{#!vorlage Hinweis `GERÄTEDATEI` kann statt etwa einer Partition auch eine gewöhnliche Datei sein, welche dann als Container (Image) ebenfalls in den weiteren Schritten verschlüsselt, mit einem Dateisystem formatiert wird und danach geöffnet und mit beliebigen Dateien befüllt werden kann. Dazu gibt man an dieser Stelle für `count` die gewünschte Größe in MiB an. {{{#!vorlage Experten Bei sehr großen Containerdateien können sehr große `bs`-Werte wie `200M` bei `count=1` je nach System die Erzeugung der Datei in der gewünschten Größe stark beschleunigen. In diesem Beispiel wäre die Datei 200 * 1 = 200 MiB groß. Alternativ beschleunigt auch die Verwendung von `if=/dev/zero` durch Nullen anstelle von Zufallszahlen wie bei `urandom`. Um einen Container von 1000 GiB anzulegen, welcher nicht erst mehrere Stunden überschrieben wird (dadurch unter Umständen unsicherer), sondern sofort verfügbar ist, eignet sich der Befehl `fallocate -l 1000G DATEI`. Soll dagegen die Datei zwar sofort 1000 GiB Platz bieten und als Platzverbrauch (mit [:ls:]) anzeigen, aber erst tatsächlich wachsen und Platz belegen (mit [:df:] überprüfbar), wenn der Container auch tatsächlich gefüllt wird, so eignet sich der Befehl `truncate -s 1000G DATEI`. \}}} }}} 1. Danach die Partition verschlüsseln: {{{#!vorlage Befehl sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y GERÄTEDATEI }}} Dieser Befehl erstellt eine verschlüsselte Partition im Gerät `GERÄTEDATEI`. Der Parameter `-c` bestimmt den Algorithmus, `-y` lässt cryptsetup das Passwort zweimal abfragen (was in Verbindung mit Key-Files sinnlos wäre) und `-s` bestimmt die Länge des Schlüssels. `luksFormat` legt fest, dass der Header nach dem LUKS-Standard erstellt wird. Zur Sicherheitsbestätigung wird die Eingabe von YES gefordert. Also wirklich YES in Großbuchstaben (engl. uppercase) und nicht y, Y oder yes. {{{#!vorlage Experten [wikipedia_en:XEX-TCB-CTS:XTS] unterstützt Verwaltungsschlüssel von 128 oder 256 Bit. 512 heißt in dem Fall, dass sowohl [wikipedia:Advanced_Encryption_Standard:AES] als auch XTS die maximale Schlüssellänge von 256 Bit verwenden. Um eine höhere Lese-/Schreibgeschwindigkeit zu erzielen, kann auch stattdessen 256 eingesetzt werden - das entspricht einer 128 Bit Verschlüsselung. Dies ist z.B. für langsamere Systeme empfehlenswert. Einen Anhaltspunkt über die Verschlüsselungsleistung des Systems liefert `cryptsetup benchmark`. Alternativ zu AES ist es möglich, den Verschlüsselungsalgorithmus [wikipedia:Twofish:Twofish] oder [wikipedia:Serpent_(Verschlüsselung):Serpent] zu verwenden. Dazu wird `aes-xts-plain64` durch `twofish-xts-plain64` bzw. `serpent-xts-plain64` ersetzt. }}} 1. Zuweisung der verschlüsselten Partition einem virtuellen Gerät (nach Passworteingabe wird eine Gerätedatei '''/dev/mapper/usb-crypt''' angelegt, über die der verschlüsselte Inhalt zugänglich ist): {{{#!vorlage Befehl sudo cryptsetup luksOpen GERÄTEDATEI usb-crypt }}} 1. Die Partition steht jetzt unter dem virtuellen Gerät /'''dev/mapper/usb-crypt''' zur Verfügung und kann mit einem Dateisystem beschrieben werden (z.B. ext4): {{{#!vorlage Befehl sudo mkfs.ext4 /dev/mapper/usb-crypt }}} Optional kann dem Dateisystem ein Label zugewiesen werden, das beim späteren Einhängen der Partition mithilfe der GUI des Systems automatisch als Name verwendet wird (`LABEL` durch eine eindeutige Bezeichnung ersetzen): {{{#!vorlage Befehl sudo tune2fs -L LABEL /dev/mapper/usb-crypt }}} oder: {{{#!vorlage Befehl sudo e2label /dev/mapper/usb-crypt LABEL }}} 1. Nun kann man sie ganz normal einhängen: {{{#!vorlage Befehl sudo mount /dev/mapper/usb-crypt /mnt }}} 1. Neu angelegte Linux-Dateisysteme gehören erst einmal ausschließlich root. Wenn es für den regulären Benutzer gedacht ist, sind die [:Rechte:] mit [:chown:] anzupassen: {{{#!vorlage Befehl sudo chown $USER:$USER /mnt }}} 1. Das Aushängen und Beenden der Verschlüsselung funktioniert dann in folgenden Schritten: {{{#!vorlage Befehl sudo umount /mnt }}} und Freigabe des virtuellen Gerätes: {{{#!vorlage Befehl sudo cryptsetup luksClose usb-crypt }}} __Informationen__ Möchte man Informationen über eine verschlüsselte Partition, kann folgender Befehl verwendet werden: {{{#!vorlage Befehl sudo cryptsetup luksDump /dev/sde9 }}} Eine ausführliche Info über ein Dateisystem läßt sich mit folgender Eingabe anzeigen: {{{#!vorlage Befehl sudo dumpe2fs -h /dev/mapper/usb-crypt }}} oder alternativ: {{{#!vorlage Befehl sudo tune2fs -l /dev/mapper/usb-crypt }}} Eine Auflistung aller Blockgeräten im Baumformat: {{{#!vorlage Befehl lsblk }}} == Öffnen von LUKS-Geräten mit Passwortabfrage == Nach der Anmeldung kann man LUKS-Geräte über die Kommandozeile einhängen und aushängen, wie es oben beschrieben ist (`luksOpen, mount, umount, luksClose`). Beispiel: Ein per {{{#!vorlage Befehl sudo cryptsetup luksOpen /dev/sdXY mnt }}} geöffnetes LUKS-Gerät '''/dev/sdXY''' (XY passend auswählen, z.B. '''/dev/sda2''') ist danach in '''/dev/mapper/mnt''' entschlüsselt und im Falle einer Partition (anstatt [:LVM:]) von dort aus direkt mountbar: {{{#!vorlage Befehl sudo mount /dev/mapper/mnt /mnt }}} Danach ist der Inhalt im Verzeichnis '''/mnt''' entschlüsselt. Leider ist es ziemlich umständlich und man braucht Root-Rechte dazu. LUKS-Geräte können aber in GUI komfortabel per Maus-Klick eingebunden werden. Das Passwort kann dabei im Falle von [:GNOME:] im [:GNOME_Schlüsselbund: Schlüsselbund], bei [:KDE:] in der [:KDE Brieftasche:] hinterlegt werden, sodass LUKS-Geräte ohne extra Abfrage eingehängt werden können. Unter GNOME kann man LUKS-Geräte mittels des [:gvfs-mount: GVFS] (Gnome Virtual File System) einbinden. Das Einbinden ins GVFS erfolgt entweder über einen Dateimanager (z. B. [#Transparente-Verwendung-in-Nautilus Nautilus], [:Thunar:] oder [:PCManFM:]), über das graphische Tool [:Gigolo:] oder über die Kommandozeile mit dem Befehl `gvfs-mount`. Hierzu sind keine [:sudo:Root-Rechte] und kein Eintrag in '''/etc/fstab''' erforderlich, und es muss auch nirgends ein SUID-Bit gesetzt werden. Die so eingebundenen LUKS-Geräte lassen sich auch ohne Root-Rechte wieder aushängen. Mehr dazu s. im Artikel [:gvfs-mount:] == Öffnen von LUKS-Geräten beim Start ohne Passwortabfrage == Es gibt drei mehr oder minder geeignete Varianten zum Öffnen von LUKS-Geräten beim Start ohne extra Passworteingabe. === LVM === Es ist möglich, eine große Partition mit LUKS zu verschlüsseln und in dieser ein [:Logical_Volume_Manager: LVM]-Gerät anzulegen. In diesem können beliebig viele logische Partitionen erstellt werden, die alle mittels einer Passworteingabe freigeschaltet werden. Der Einrichtungsvorgang bei einer Neuinstallation ist im Artikel [:System_verschlüsseln:] beschrieben. === Schlüsselableitung === Seit Ubuntu 8.04 gibt es das sogenannte Decrypted-Derived-Script, das den Schlüssel aus einem bereits geöffneten LUKS-Gerät berechnen kann. Mit diesem können nach der Freischaltung des Ursprungsgeräts beliebig viele geöffnet werden. Auf die generelle Verwendung geht der Artikel [:LUKS/Schlüsselableitung:] und auf den Einrichtungsvorgang bei einer Neuinstallation [:System_verschlüsseln/Schlüsselableitung:] ein. === Schlüsseldatei === Des Weiteren ist es möglich, LUKS-Geräte mit einer Schlüsseldatei zu öffnen. Da diese jedoch das Passwort im Klartext enthält, wird von dieser Variante abgeraten. Dabei kann man sich an der Ableitung von Schlüsseln in [:LUKS/Schlüsselableitung/#Bestehendes-LUKS-Geraet:Bestehendes LUKS-Gerät] sowie dem Öffnen im Abschnitt [:LUKS/Schlüsselableitung/#Manuell:Manuell] orientieren. Das Öffnen lässt sich z.B. in der Datei [:rc.local:] automatisiert aufrufen, allerdings sollte man dort nur ein externes [:/Shell/Bash-Skripting-Guide_für_Anfänger:Skript] mit [:Rechte:Leserechten] für ausschließlich den [:Benutzer_und_Gruppen:Benutzer] `root` eintragen ([:chmod:] `700`). ##Auf die Verwendung geht der Artikel [:LUKS/Schlüsseldatei:] ein. === Bei der Anmeldung === Außerdem ist es möglich, mittels eines extra [wikipedia:Pluggable_Authentication_Modules: PAM]-Plugins ein LUKS-Gerät automatisch beim Login einzuhängen, wenn einer der LUKS-Schlüssel identisch mit dem Anmeldepasswort ist. Die Anleitung dazu würde den Rahmen dieses Artikels sprengen, es ist aber am Beispiel der Home-Partition [:Daten_verschlüsseln#luks:hier] beschrieben. === Schließen === Sobald das enthaltene Dateisystem nicht mehr eingehängt ist oder anderweitig verwendet wird, kann das LUKS-Gerät wie folgt geschlossen werden: {{{#!vorlage Befehl sudo cryptsetup luksClose MapperDatei }}} == Passwörter verwalten == LUKS bietet insgesamt acht Speicherplätze (genannt "Slot" 0-7) für änderbare Passwörter, die jeweils den Zugriff auf die Daten erlauben. Die belegten Speicherplätze und Headerinformationen lassen sich mittels dieses Befehl überprüfen: {{{#!vorlage Befehl sudo cryptsetup luksDump GERÄTEDATEI }}} === Passwort hinzufügen === Zuerst das alte Passwort eingeben, dann das neue. {{{#!vorlage Befehl sudo cryptsetup luksAddKey GERÄTEDATEI }}} === Passwort löschen === Ein bekanntes Passwort kann mit folgendem Befehl entfernt werden: {{{#!vorlage Befehl sudo cryptsetup luksRemoveKey GERÄTEDATEI }}} Will man hingegen einen bestimmten Slot löschen, kann man dies mit folgendem Befehl tun: {{{#!vorlage Befehl sudo cryptsetup luksKillSlot GERÄTEDATEI SLOT }}} Alternativ kann ein Slot mit dem veralteten Befehl entfernt werden: {{{#!vorlage Befehl sudo cryptsetup luksDelKey GERÄTEDATEI SLOT }}} Für `SLOT` muss die Nummer des Keyslots eingegeben werden. Diesen findet man am einfachsten heraus, wenn mit `cryptsetup luksOpen -v` einen Container oder eine Partition einhängt. Dort ist dann auch der Slot angegeben, der, basierend auf dem Schlüssel, benutzt wurde. === Passwort ändern === Zum Ändern eines Passworts wird zuerst das neue Passwort hinzugefügt und anschließend das alte entfernt. == Header sichern == Um Informationen über die Partitionierung innerhalb des Containers und der Keyslots zu sichern, empfiehlt es sich, ein Backup vom LUKS-Header (außerhalb des verschlüsselten Containers) anzulegen. Wird dieses Backup entwendet, ist ein Zugriff auf den verschlüsselten Container trotzdem nur mit Schlüsselinformationen möglich. {{{#!vorlage Warnung Ein gesicherter Header hängt von den Passwörtern ab, die gerade zu dem Zeitpunkt der Sicherung aktiv sind. Das erfordert einerseits, dass man zur Nutzung der Sicherung diese noch kennen muss. Andererseits bedeutet es auch, dass bekannt gewordene Passwörter, selbst wenn sie am Gerät geändert wurden, mit der Sicherung noch für den Zugriff auf das Gerät verwendet werden können. Entsprechend ist es empfehlenswert, die Sicherung des Headers unter Verschluss zu halten und nach jeder Änderung am Gerät unmittelbar zu aktualisieren. }}} {{{#!vorlage Befehl sudo cryptsetup luksHeaderBackup GERÄTEDATEI --header-backup-file BACKUP-DATEI }}} Zur Wiederherstellung wird folgender Befehl verwendet: {{{#!vorlage Befehl sudo cryptsetup luksHeaderRestore GERÄTEDATEI --header-backup-file BACKUP-DATEI }}} ##aasche: noch relevant? ##== GUI == ##Mit dem Programm [http://gdecrypt.pentabarf.de/ GDecrypt] {en} können LUKS-Geräte erstellt werden. ##{{{#!vorlage Warnung ##Das Programm ist ab 12.04 nicht mehr startbar. ##}}} ##Dazu wird das folgende Paket installiert: ## ##{{{#!vorlage Paketinstallation ##gdecrypt, universe ##}}} == Automatisiertes Verschlüsseln mit Alternate-CD == Es kann auch mit Hilfe der [:Alternate-CD:] eine neue Partition im Nachhinein verschlüsselt werden. Siehe dazu [:System_verschlüsseln/Alternate_Installation#Datentraeger-verschluesseln: Alternate Installation - Datenträger verschlüsseln]. {{{#!vorlage Warnung Bei dieser Vorgehensweise sollte man sehr vorsichtig sein, um nicht irrtümlich eine Systempartition zu beschädigen! Eine Datensicherung ist sehr zu empfehlen. Insbesondere ''"Änderungen auf die Festplatte schreiben"''-Abfragen sind immer sehr genau zu lesen, damit keine unbeabsichtigten Änderungen am System vorgenommen werden! }}} {{{#!vorlage Hinweis Um die Änderungen der Partitionierung übernehmen zu können, ohne zu installieren, wählt man am Schluss z. B. ''"Logical Volume Manager konfigurieren"'', womit eine Abfrage erzwungen wird, ob man die anstehenden Änderungen übernehmen möchte. Anschließend kann die Installation abgebrochen werden. }}} = Links = * [:LUKS/Containerdatei:] {de} - LUKS mit einer Container-Datei verwenden * [https://gitlab.com/cryptsetup/cryptsetup LUKS-Homepage] {en} * [http://wiki.gentoo.org/wiki/DM-Crypt_LUKS DM-Crypt LUKS] - Gentoo Wiki {en} * [http://www.fedorawiki.de/index.php?title=Verschl%C3%BCsselte_Festplatten Verschlüsselte Festplatten] {de} - fedorawiki.de * [wikipedia:Linux_Unified_Key_Setup:Wikipedia über LUKS und dm-crypt] * [http://heise.de/-2072199 Erfolgreicher Angriff auf Linux-Verschlüsselung] {de} - heise Security, 12/2013 * [http://www.linux-magazin.de/Ausgaben/2005/08/Geheime-Niederschrift Festplattenverschlüsselung mit DM-Crypt und Cryptsetup-LUKS: Technik und Anwendung] {de} - Clemens Fruhwirth, Markus Schuster. Aus Linux-Magazin 08/2005 * [http://blog.andreas-haerter.com/2011/06/18/ubuntu-festplattenvollverschluesselung-lvm-luks Vollverschlüsseltes System mit Ubuntu, LVM und LUKS] {de} - blog.andreas-haerter.com #tag: System, Sicherheit, Installation, Verschlüsselung