Come montare un contenitore cryptsetup solo con `mount`?


9

Ho creato un contenitore crittografato tramite

#!/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

ovvero un file, ad esempio containerspecificato in questo script, conterrà un file system ext3 crittografato tramite cryptsetup luksFormat.

Per montarlo, attualmente uso un altro script, ad esempio 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
)

e per smontarlo 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

C'è molta ridondanza e afferrare manualmente un dispositivo loop e un mapper entrambi i quali potrebbero rimanere anonimi. C'è un modo per fare semplicemente qualcosa come mount -o luks ~/container /mnt/decrypted(richiedere la passphrase) e umount /mnt/decryptedil modo semplice invece?


modifica Fondamentalmente sono contento dei miei script sopra (anche se il controllo degli errori potrebbe essere migliorato ...), quindi

Come può un'opzione mount -o luks=~/containeressere implementata in modo simile -o loop ~/loopfileall'utilizzo degli script che ho scritto?

Questo può essere ottenuto senza riscrivere mount? O in alternativa, potrebbe -t luks -o loop ~/containeressere implementato?


Hai provato cryptmount ?
jw013,

@ jw013 Non l'ho fatto e potrebbe aver semplificato un po 'le cose, ma non supporta direttamente in modo nativo utilizzando direttamentemount
Tobias Kienzler

Risposte:


6

In effetti, la modifica mountè possibile, come ho imparato dall'esistenza di mount.ntfs-3g. Sto solo facendo congetture, ma ho il sospetto che porti mount -t sometypea una chiamata mount.sometype $DEV $MOUNTPOINT $OPTIONS, mi sento libero di correggermi qui o citare un po 'di documentazione reale. Soprattutto l'opzione -o loopè già stata trattata, quindi non è più necessario lopsetup...

Collegamento simbolico / crea lo script mount come /sbin/mount.crypto_LUKS. Rimuovi la parte loopdevice e invece usa semplicemente l' -o loopinterruttore. Ecco il mio /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

Ora devo solo eseguire mount -o loop ~/container /mnt/decrypted, e mountmi chiederà la password e quindi montare il contenitore, rilasciando automaticamente il dispositivo loop una volta chiuso il contenitore. Se il filesystem decrittografato non riesce a montarsi, il contenitore verrà nuovamente chiuso, ma è possibile modificarlo ovviamente. Oppure implementa alcune analisi invece di passare tutto a mount.

Speravo che lo stesso potesse essere raggiunto tramite /sbin/umount.luks, ma umount /mnt/decrypted(anche con -t crypto_LUKS) continua a smontare, lasciando il contenitore aperto. Se invece trovi un modo per umountchiamare il mio dm.umountscript, fammi sapere ... Al momento, la chiamata diretta umountè scoraggiata poiché dovrai capire il /dev/mappernome manualmente cryptsetup luksClose $MAPPER. Almeno il dispositivo loop verrà rilasciato automaticamente se è mount -o loopstato utilizzato prima ...


Per quanto riguarda il umount, suppongo che dovrò modificare la /etc/mtabvoce del mio in modomount.luks tale che il tipo di filesystem sia ad es. luks.ext3Invece di ext3.
Tobias Kienzler,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.