LUKS/Containerdatei

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

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:

  1. Ein Terminal öffnen

  2. Root-Rechte

  3. Verschlüsselte Partitionen mit LUKS

Inhaltsverzeichnis
  1. Vorbereitung
  2. Container anlegen
  3. Container einhängen
    1. Kommandozeile
      1. Mit Superuser Rechten
      2. Im Userspace
    2. Nautilus
  4. Container aushängen
  5. Container vergrößern
  6. Skripte
    1. Einhängen
    2. Aushängen
  7. Links

In diesem Artikel wird beschrieben, wie man LUKS mit einer Container-Datei verwendet.

Vorbereitung

Die Vorbereitung ist identisch mit der des LUKS-Artikels. Dieser sollte zuerst einmal durchgearbeitet und verstanden werden.

Container anlegen

Der Container ist eine einfache Datei, die man mit Zufallsdaten füllt. Mit dem folgenden Befehl wird ein 250MB großer Container mit dem Namen container_file angelegt[1].

dd if=/dev/urandom of=container_file bs=1M count=250 

Hinweis:

Die nächsten vier Befehle kann man auch zusammenfassen:

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]

sudo losetup -f 

Jetzt hängt man den Container ein. Durch das Loop-Device kann man die Datei wie eine normale Partition/Festplatte ansprechen.

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:

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 .

sudo cryptsetup luksOpen /dev/loopX container 

Als nächstes muss ein Dateisystem angelegt werden (siehe Formatieren). Beispiel:

mkfs.ext4 /dev/mapper/container 

Mit

sudo mount -t ext4 /dev/mapper/container /mnt 

kann man den Container einhängen.

Mit

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

Hinweis:

Die nächsten drei Befehle kann man auch zusammenfassen:

sudo cryptsetup luksOpen container_file container 

Ein freies Loop-Device finden. [1][2]

sudo losetup -f 

Die Datei container_file an das Loop-Device binden.

sudo losetup /dev/loopX container_file 

Den Container mit cryptsetup öffnen:

sudo cryptsetup luksOpen /dev/loopX container 

Und zuletzt das Dateisystem mounten.

sudo mount -t ext4 /dev/mapper/container /mnt 

Hinweis:

Die letzten beiden Befehle (öffnen und mounten) können auch grafisch über den Dateimanager Nautilus erfolgen.

Im Userspace

Mit

udisksctl loop-setup -f container.iso 

das loopdevice erstellen, dann mit

udisksctl unlock -b /dev/loopX 

entsperren und schließlich via

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]

sudo umount /mnt 

Container mit cryptsetup schließen.

sudo cryptsetup luksClose container 

bzw.

udisksctl unmount -b /dev/mapper/dm-y
udisksctl lock -b /dev/loopX
udisksctl loop-delete -b /dev/loopX 

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.

Loop-Device schließen.

sudo losetup -d /dev/loopX 

Container vergrößern

Achtung!

Es sind Datenverluste möglich! Vorher sollte ein Backup erstellt werden Sicherheit (Abschnitt „Sicherungskopien“).

Zunächst muss der Container ausgehangen werden.

Danach vergrößert man die Container-Datei beliebig. In diesem Beispiel um 100MB. [1]

dd if=/dev/urandom bs=1M count=100 >> container_file 

Danach hängt man den Container ein, aber ohne das Dateisystem zu mounten.

Mit [2]

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.

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/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