Як змонтувати контейнер 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б реалізувати?


Ви спробували криптовалюту ?
jw013

@ jw013 Я цього не зробив, і це може трохи спростити речі, але він також не підтримує безпосередньо, використовуючиmount
Tobias Kienzler

Відповіді:


6

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

Symlink / створити сценарій монтажу як /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запропонує мені ввести пароль, а потім встановити контейнер, автоматично вивільняючи loopdevice після закриття контейнера. Якщо розшифрована файлова система не зможе встановити, контейнер знову буде закритий, але ви можете, звичайно, змінити це. Або здійснити якийсь параметр розбору, а не передавати все на 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.