Wie montiere ich einen Cryptsetup-Container nur mit `mount`?


9

Ich habe einen verschlüsselten Container über erstellt

#!/bin/bash
dd if=/dev/zero of=$1 bs=1 count=0 seek=$2
MAPPER=$(mktemp -up /dev/mapper)
LOOPDEV=$(losetup --find --show $1)
cryptsetup luksFormat $LOOPDEV
cryptsetup luksOpen $LOOPDEV $(basename $MAPPER)
mkfs.ext3 $MAPPER
cryptsetup luksClose $MAPPER
losetup -d $LOOPDEV

Das heißt, eine Datei, die z. B. containerin diesem Skript angegeben ist, enthält ein ext3-Dateisystem, das über verschlüsselt ist cryptsetup luksFormat.

Zum Mounten verwende ich derzeit ein anderes Skript, z. B dm.mount container /mnt/decrypted.:

#!/bin/bash
set -e
MAPPER=$(mktemp -up /dev/mapper)
LOOPDEV=$(losetup --find --show $1)
cryptsetup luksOpen $LOOPDEV $(basename $MAPPER) || losetup -d $LOOPDEV
mount $MAPPER $2 || (
  cryptsetup luksClose $MAPPER
  losetup -d $LOOPDEV
)

und um es abzunehmen dm.umount /mnt/decrypted:

#!/bin/bash
set -e
MAPPER=$(basename $(mount | grep $1 | gawk ' { print $1 } '))
LOOPDEV=$(cryptsetup status $MAPPER | grep device | gawk ' { print $2 } ')
umount $1
cryptsetup luksClose $MAPPER
losetup -d $LOOPDEV

Es gibt viel Redundanz und das manuelle Abrufen eines Loop-Geräts und eines Mappers, die beide anonym bleiben könnten. Gibt es eine Möglichkeit, einfach so etwas zu tun mount -o luks ~/container /mnt/decrypted(Aufforderung zur Eingabe der Passphrase) und umount /mnt/decryptedstattdessen die einfache Möglichkeit?


edit Grundsätzlich bin ich mit meinen Skripten oben zufrieden (obwohl die Fehlerprüfung verbessert werden könnte ...), also

Wie kann eine Mount-Option -o luks=~/containerähnlich wie -o loop ~/loopfilebei den von mir geschriebenen Skripten implementiert werden ?

Kann dies ohne Umschreiben erreicht werden mount? Oder könnte alternativ -t luks -o loop ~/containerimplementiert werden?



@ jw013 Ich habe nicht und es könnte die Dinge ein wenig vereinfacht haben, aber es unterstützt auch nicht nativ direkt mitmount
Tobias Kienzler

Antworten:


6

In der Tat ist eine Änderung mountmöglich, wie ich aus der Existenz von gelernt habe mount.ntfs-3g. Ich mache nur Vermutungen, aber ich vermute, mount -t sometypedass dies zu einem Anruf bei mount.sometype $DEV $MOUNTPOINT $OPTIONSführt. Sie können mich hier gerne korrigieren oder eine aktuelle Dokumentation zitieren. Insbesondere die Option -o loopist bereits behandelt, sodass keine Notwendigkeit lopsetupmehr besteht ...

Symlink / Erstellen Sie das Mount-Skript als /sbin/mount.crypto_LUKS. Entfernen Sie den Loopdevice-Teil und verwenden Sie stattdessen einfach den -o loopSchalter. Hier ist mein /sbin/mount.crypto_LUKS:

#!/bin/bash
set -e
if [[ $(mount | grep ${2%%/} | wc -l) -gt 0 ]]; then
  echo "Path $2 is already mounted!" >&2
  exit 9
else
  MAPPER=$(mktemp -up /dev/mapper)
  cryptsetup luksOpen $1 $(basename $MAPPER)
  shift
  mount $MAPPER $* || cryptsetup luksClose $(basename $MAPPER)
fi

Jetzt muss ich nur noch ausführen mount -o loop ~/container /mnt/decryptedund mountwerde mich zur Eingabe des Kennworts auffordern und dann den Container bereitstellen. Das Loop-Gerät wird automatisch freigegeben, sobald der Container geschlossen wird. Wenn das entschlüsselte Dateisystem nicht bereitgestellt werden kann, wird der Container wieder geschlossen, aber Sie können dies natürlich ändern. Oder implementieren Sie eine Optionsanalyse, anstatt alles an weiterzugeben mount.

Ich hatte gehofft, dass das Gleiche über erreicht werden könnte /sbin/umount.luks, aber umount /mnt/decrypted(auch mit -t crypto_LUKS) immer noch nur das übliche Abhängen, wobei der Container offen bleibt. Wenn Sie stattdessen eine Möglichkeit finden, umountmein dm.umountSkript aufzurufen , lassen Sie es mich bitte wissen ... Im Moment umountwird davon abgeraten , direkt anzurufen , da Sie den /dev/mapperNamen manuell herausfinden müssen cryptsetup luksClose $MAPPER. Zumindest das Loop-Gerät wird automatisch freigegeben, wenn mount -o loopes zuvor verwendet wurde ...


In Bezug auf das umountmuss ich wohl den /etc/mtabEintrag von mymount.luks so ändern, dass der Dateisystemtyp zB luks.ext3statt ist ext3.
Tobias Kienzler

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.