[[Vorlage(Getestet, bionic, focal, jammy)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:LUKS:Verschlüsselte Partitionen mit LUKS] }}} [[Inhaltsverzeichnis()]] In diesem Artikel wird beschrieben, wie man [:LUKS:] mit einer Container-Datei verwendet. = Vorbereitung = Die Vorbereitung ist identisch mit der des [:LUKS:LUKS-Artikels]. Dieser sollte zuerst durchgearbeitet und verstanden werden. = Container anlegen = Der Container ist eine einfache Datei, die man mit Zufallsdaten füllt. Mit dem folgenden Befehl wird ein 250 MB großer Container mit dem Namen '''container_file''' angelegt[1]. {{{#!vorlage Befehl dd if=/dev/urandom of=container_file bs=1M count=250 }}} {{{#!vorlage Hinweis Die nächsten vier Befehle kann man auch zusammenfassen: {{{#!vorlage Befehl sudo cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -y luksFormat container_file sudo cryptsetup luksOpen container_file container \}}} }}} Diese Container hängt man jetzt über ein Loop-Device ein. Dieser Befehl gibt zunächst ein freies Loop-Device zurück, z.B.: '''/dev/loop20''' [2] {{{#!vorlage Befehl sudo losetup -f }}} Jetzt hängt man den Container ein. Durch das Loop-Device kann man die Datei wie eine normale Partition/Festplatte ansprechen. {{{#!vorlage Befehl sudo losetup /dev/loopX container_file }}} '''/dev/loopX ''' muss durch das freie Loop-Device ersetzt werden. Als nächstes muss man den Container mit `cryptsetup` initialisieren und den Algorithmus (siehe Manpage von cryptsetup) festlegen. Hier wird auch das Passwort abgefragt. [3] Beispiel: {{{#!vorlage Befehl sudo cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -y luksFormat /dev/loopX }}} Jetzt kann man den Container mit `cryptsetup` öffnen. Das Argument `container` steht für den Namen, unter dem das Gerät unter '''/dev/mapper/''' erstellt werden soll. Wenn man mehrere verschlüsselte Container verwendet, muss man darauf achten, dass kein Name doppelt verwendet wird. {{{#!vorlage Befehl sudo cryptsetup luksOpen /dev/loopX container }}} Als nächstes muss ein Dateisystem angelegt werden (siehe [:Formatieren:]). Beispiel: {{{#!vorlage Befehl sudo mkfs.ext4 /dev/mapper/container }}} Mit {{{#!vorlage Befehl sudo mount -t ext4 /dev/mapper/container /mnt }}} kann man den Container einhängen. Mit {{{#!vorlage Befehl sudo chown -R username /mnt }}} kann man den Nutzer `username` zum Besitzer des eingehängten Containers machen, sodass der Container im Dateimanager wie üblich genutzt werden kann. Nachdem man sich seinen Container erstellt hat, kann er über folgenden Ablauf eingehangen und wieder ausgehangen werden. = Container einhängen = == Kommandozeile == === Mit Superuser Rechten === {{{#!vorlage Hinweis Die nächsten drei Befehle kann man auch zusammenfassen: {{{#!vorlage Befehl sudo cryptsetup luksOpen container_file container \}}} }}} Ein freies Loop-Device finden. [1][2] {{{#!vorlage Befehl sudo losetup -f }}} Die Datei '''container_file''' an das Loop-Device binden. {{{#!vorlage Befehl sudo losetup /dev/loopX container_file }}} Den Container mit `cryptsetup` öffnen: {{{#!vorlage Befehl sudo cryptsetup luksOpen /dev/loopX container }}} Und zuletzt das Dateisystem mounten. {{{#!vorlage Befehl sudo mount -t ext4 /dev/mapper/container /mnt }}} {{{#!vorlage Hinweis Die letzten beiden Befehle (Öffnen und Mounten) können auch grafisch über den Dateimanager [:Nautilus:] erfolgen. }}} === Im Userspace === Mit {{{#!vorlage Befehl udisksctl loop-setup -f container_file }}} das loopdevice erstellen, dann mit {{{#!vorlage Befehl udisksctl unlock -b /dev/loopX }}} entsperren und schließlich via {{{#!vorlage Befehl udisksctl mount -b /dev/dm-Y }}} das entsperrte loopdevice mounten. == Nautilus == Wenn der Container die Endung '''.iso''' hat, kann man diesen in Nautilus per rechtem Mausklick auf die Datei und Auswahl von "Laufwerksabbilder einhängen" im Nur-Lese-Modus mounten. = Container aushängen = Dateisystem aushängen. [1][2] {{{#!vorlage Befehl sudo umount /mnt }}} Container mit cryptsetup schließen. {{{#!vorlage Befehl sudo cryptsetup luksClose container }}} Loop-Device schließen. {{{#!vorlage Befehl sudo losetup -d /dev/loopX }}} bzw. {{{#!vorlage Befehl udisksctl unmount -b /dev/dm-y udisksctl lock -b /dev/loopX udisksctl loop-delete -b /dev/loopX }}} {{{#!vorlage Hinweis Wer den Container zuvor mit [:Nautilus:] eingehängt hat, der sollte ihn auch darüber wieder aushängen. Dadurch müssen die beiden oberen Befehle nicht angewandt werden. }}} = Container vergrößern = {{{#!vorlage Warnung Es sind Datenverluste möglich! Vorher sollte ein Backup erstellt werden [:Sicherheit#Sicherungskopien:]. }}} Zunächst muss der Container [#Container-aushaengen ausgehängt] werden. Danach vergrößert man die Container-Datei beliebig, in diesem Beispiel um 100 MB. [1] {{{#!vorlage Befehl dd if=/dev/urandom bs=1M count=100 >> container_file }}} Danach [#Container-einhaengen hängt] man den Container ein, aber ohne das Dateisystem zu mounten. Mit [2] {{{#!vorlage Befehl sudo cryptsetup resize container }}} verwendet `cryptsetup` den gesamten verfügbaren Platz in der Container-Datei. Um das Dateisystem an die neue Größe anzupassen, kann man folgenden Befehl verwenden. Man sollte vor und nach dem Befehl eine Dateisystemprüfung durchführen. {{{#!vorlage Befehl resize2fs /dev/mapper/container }}} = Skripte = Mit den folgenden Skripten kann man beliebige Container automatisch ein- und aushängen. Die Skripte müssen mit Root-Rechten ausgeführt werden. [2] == Einhängen == {{{#!code bash #!/bin/sh SAFE=/Pfad/zum/Container_File CRYPTNAME=container MNT=/Pfad/zum/Mointpoint FS=ext4 LOOPDEV=`losetup -f` if [ "`losetup -a | grep -c "$SAFE"`" != "0" ]; then echo "bereits eingehängt" exit fi /sbin/losetup $LOOPDEV $SAFE /sbin/cryptsetup luksOpen $LOOPDEV $CRYPTNAME /bin/mount -t $FS /dev/mapper/$CRYPTNAME $MNT }}} == Aushängen == {{{#!code bash #!/bin/sh SAFE=/Pfad/zum/Container_File CRYPTNAME=container MNT=/Pfad/zum/Mointpoint LOOPDEV=`losetup -a | grep "$SAFE" | sed "s/: .*//"` if [ "`losetup -a | grep -c "$SAFE"`" != "1" ]; then echo "nicht eingehängt" exit fi /bin/umount $MNT /sbin/cryptsetup luksClose $CRYPTNAME /sbin/losetup -d $LOOPDEV }}} = Links = * [wikipedia:dm-crypt:cryptsetup] - Wikipedia #tag: Sicherheit, Shell, Verschlüsselung