「mount」だけでcryptsetupコンテナをマウントする方法は?


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。loopdevice部分を削除し、代わりに-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 $MAPPERmount -o loop以前に使用されていた場合、少なくともループデバイスは自動的に解放されます...


についてはumount、ファイルシステムタイプがの代わりになるように、/etc/mtabエントリmount.luks変更する必要があると思います。luks.ext3ext3
Tobias Kienzler 2012年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.