如何仅使用“mount”挂载 cryptsetup 容器?

如何仅使用“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将包含通过 加密的 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实施吗?

答案1

事实上,修改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/decryptedmount就会提示我输入密码,然后挂载容器,容器关闭后会自动释放循环设备。如果解密的文件系统无法挂载,容器将再次关闭,但您当然可以修改它。或者实现一些选项解析,而不是将所有内容传递给mount.

我希望通过 可以实现相同的效果/sbin/umount.luks,但是umount /mnt/decrypted(即使使用-t crypto_LUKS)仍然只进行通常的卸载,使容器保持打开状态。如果您找到一种方法来umount调用我的dm.umount脚本,请告诉我...目前,umount不鼓励直接调用,因为您必须/dev/mapper手动找出名称cryptsetup luksClose $MAPPER。至少循环装置如果mount -o loop之前用过的话会自动释放...

答案2

pam_挂载,可从sourceforge获得,附带了有用的 mount.crypto_LUKS 和 umount.crypto_LUKS ,它们克服了其他发布者提供的脚本的一些缺点。

相关内容