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?


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 ...


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.