web-dev-qa-db-ja.com

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

暗号化されたコンテナを作成しました

#!/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には、cryptsetup luksFormatで暗号化されたext3ファイルシステムが含まれます。

マウントするには、現在別のスクリプトを使用しています。たとえば、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を実装できますか?

9
Tobias Kienzler

実際、mount.ntfs-3gの存在から学んだように、mountの変更は可能です。私は当て推量しか行っていませんが、mount -t sometypeの結果としてmount.sometype $DEV $MOUNTPOINT $OPTIONSが呼び出されると思われるので、ここで修正するか、実際のドキュメントを引用してください。特にオプション-o loopはすでに処理されているので、lopsetupはもう必要ありません...

Symlink /マウントスクリプトを/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がパスワードの入力を求めてコンテナーをマウントし、コンテナーが閉じられるとループデバイスを自動的に解放します。復号化されたファイルシステムがマウントに失敗した場合、コンテナは再び閉じられますが、もちろんそれを変更できます。または、すべてをmountに渡す代わりに、いくつかのオプション解析を実装します。

同じことが/sbin/umount.luksでも実現できることを望んでいましたが、umount /mnt/decrypted-t crypto_LUKSを使用した場合でも)は通常のアンマウントのみを実行し、コンテナーを開いたままにします。代わりにumountdm.umountスクリプトを呼び出す方法を見つけた場合はお知らせください...現時点では、直接umountを呼び出すことはお勧めしません。 /dev/mapperの名前を手動でcryptsetup luksClose $MAPPERに変更します。以前にmount -o loopを使用した場合、少なくともループデバイスは自動的に解放されます...

6
Tobias Kienzler

pam_mount、 sourceforgeから入手可能 には、他の投稿者が提供したスクリプトのいくつかの欠点を克服する便利なmount.crypto_LUKSおよびumount.crypto_LUKSが同梱されています。

3
tom drunk