Как монтировать контейнер cryptsetup просто с помощью `mount`?


9

Я создал зашифрованный контейнер через

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

т.е. файл, containerуказанный в этом скрипте, будет содержать файловую систему ext3, зашифрованную с помощью cryptsetup luksFormat.

Чтобы смонтировать его, я сейчас использую другой скрипт, скажем 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
)

и размонтировать его 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

Существует много избыточности и ручного захвата петлевого устройства и устройства отображения, которые могут остаться анонимными. Есть ли способ просто сделать что-то вроде mount -o luks ~/container /mnt/decrypted(запрашивая пароль) и umount /mnt/decryptedпростой способ вместо этого?


править В принципе я доволен моими скриптами выше (хотя проверка ошибок может быть улучшена ...), так

Как реализовать возможность монтирования -o luks=~/container, аналогичную -o loop ~/loopfileиспользованию сценариев, которые я написал?

Можно ли этого достичь без переписывания mount? Или, в качестве альтернативы, может -t luks -o loop ~/containerбыть реализовано?


Вы пробовали cryptmount ?
jw013

@ jw013 У меня нет, и это могло бы немного упростить вещи, но оно также не поддерживает напрямую непосредственное использованиеmount
Tobias Kienzler

Ответы:


6

На самом деле, изменение mountвозможно, как я узнал из существования mount.ntfs-3g. Я делаю только догадки, но я подозреваю, что mount -t sometypeрезультатом будет звонок mount.sometype $DEV $MOUNTPOINT $OPTIONS, не стесняйтесь поправить меня здесь или процитировать некоторую фактическую документацию. Особенно вариант -o loopуже обработан, так что больше не нужно lopsetup...

Симлинк / создать скрипт монтирования как /sbin/mount.crypto_LUKS. Удалите часть устройства петли и вместо этого просто используйте -o loopпереключатель. Вот мой /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

Теперь мне нужно просто запустить mount -o loop ~/container /mnt/decryptedи mountзапросить у меня пароль, а затем смонтировать контейнер, автоматически выпуская устройство цикла после закрытия контейнера. Если дешифрованная файловая система не смонтируется, контейнер снова закроется, но вы, конечно, можете это изменить. Или реализуйте какой-то вариант разбора вместо передачи всего на mount.

Я надеялся, что того же можно достичь с помощью /sbin/umount.luks, но umount /mnt/decrypted(даже с -t crypto_LUKS) все еще выполняет обычное демонтирование, оставляя контейнер открытым. Если вы найдете способ umountвызвать мой dm.umountскрипт вместо этого, пожалуйста, дайте мне знать ... В данный момент прямой вызов umountне рекомендуется, так как вам придется выяснить /dev/mapperимя вручную cryptsetup luksClose $MAPPER. По крайней мере, устройство петли будет освобождено автоматически, если mount -o loopиспользовалось раньше ...


Что касается umount, я думаю, мне придется изменить /etc/mtabзапись моего такmount.luks , чтобы тип файловой системы, например, luks.ext3вместо ext3.
Тобиас Кинцлер

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.