Comment monter un conteneur cryptsetup juste avec `mount`?

9

J'ai créé un conteneur crypté via

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

c'est-à-dire qu'un fichier containerspécifié par exemple dans ce script contiendra un système de fichiers ext3 chiffré via cryptsetup luksFormat.

Pour le monter, j'utilise actuellement un autre script, disons 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
)

et pour le démonter 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

Il y a beaucoup de redondance et de saisie manuelle d'un périphérique de boucle et d'un mappeur, qui pourraient tous deux rester anonymes. Existe-t-il un moyen de simplement faire quelque chose comme mount -o luks ~/container /mnt/decrypted(demander la phrase secrète) et umount /mnt/decryptedla manière simple à la place?


modifier Fondamentalement, je suis satisfait de mes scripts ci-dessus (bien que la vérification des erreurs puisse être améliorée ...), donc

Comment une option de montage peut-elle -o luks=~/containerêtre implémentée de manière similaire à l' -o loop ~/loopfileutilisation des scripts que j'ai écrits?

Peut-on y parvenir sans réécrire mount? Ou bien, pourrait-il -t luks -o loop ~/containerêtre mis en œuvre?

Tobias Kienzler
la source
Avez-vous essayé cryptmount ?
jw013
@ jw013 Je ne l'ai pas fait et cela aurait peut-être un peu simplifié les choses, mais il ne prend pas non plus en charge nativement directement l'utilisation demount
Tobias Kienzler

Réponses:

6

En fait, la modification mountest possible, comme je l'ai appris de l'existence de mount.ntfs-3g. Je ne fais que des conjectures, mais je soupçonne des mount -t sometyperésultats dans un appel à mount.sometype $DEV $MOUNTPOINT $OPTIONS, n'hésitez pas à me corriger ici ou à citer une documentation réelle. Surtout l'option -o loopest déjà traitée donc il n'y en a plus besoin lopsetup...

Lien symbolique / créer le script de montage en tant que /sbin/mount.crypto_LUKS. Retirez la partie loopdevice et utilisez simplement le -o loopcommutateur. Voici mon /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

Il ne me reste plus qu'à exécuter mount -o loop ~/container /mnt/decrypted, et mountje vais me demander le mot de passe, puis monter le conteneur, libérant automatiquement le loopdevice une fois le conteneur fermé. Si le système de fichiers déchiffré ne parvient pas à se monter, le conteneur sera à nouveau fermé, mais vous pouvez bien sûr le modifier. Ou implémentez une analyse d'options au lieu de tout transmettre mount.

J'espérais que la même chose pourrait être obtenue via /sbin/umount.luks, mais umount /mnt/decrypted(même avec -t crypto_LUKS) ne fait que le démontage habituel, laissant le conteneur ouvert. Si vous trouvez un moyen d' umountappeler mon dm.umountscript à la place, faites-le moi savoir ... Pour le moment, appeler directement umountest déconseillé car vous devrez trouver le /dev/mappernom manuellement cryptsetup luksClose $MAPPER. Au moins, le périphérique de boucle sera libéré automatiquement s'il a mount -o loopété utilisé auparavant ...

Tobias Kienzler
la source
Concernant le umount, je suppose que je vais devoir modifier l' /etc/mtabentrée de mon demount.luks telle sorte que le type de système de fichiers soit par exemple luks.ext3au lieu de ext3.
Tobias Kienzler
3

pam_mount, disponible auprès de sourceforge , est livré avec un utile mount.crypto_LUKS et umount.crypto_LUKS qui surmontent certaines des lacunes du script fournies par l'autre affiche.

Tom ivre
la source