如何仅使用`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 2012年

Answers:


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 $MAPPER。如果mount -o loop以前使用过,至少会自动释放回路设备...


关于umount,我想我必须修改/etc/mtab我的条目,mount.luks以使文件系统类型为luks.ext3而不是ext3
Tobias Kienzler 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.