Containerdatei
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
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:
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 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].
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:
sudo 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_file
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¶
sudo umount /mnt
Container mit cryptsetup schließen.
sudo cryptsetup luksClose container
Loop-Device schließen.
sudo losetup -d /dev/loopX
bzw.
udisksctl unmount -b /dev/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.
Container vergrößern¶
Achtung!
Es sind Datenverluste möglich! Vorher sollte ein Backup erstellt werden Sicherheit (Abschnitt „Sicherungskopien“).
Zunächst muss der Container ausgehängt werden.
Danach vergrößert man die Container-Datei beliebig, in diesem Beispiel um 100 MB. [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 |
Links¶
cryptsetup - Wikipedia