2

回答我的问题如何仅使用 ? 安装 cryptsetup 容器mount在 unix.SE 上,我意识到这mount -t luks将调用脚本mount.luks,目前看起来像这样:

#!/bin/bash
set -e
MAPPER=$(mktemp -up /dev/mapper)
cryptsetup luksOpen $1 $(basename $MAPPER)
shift
mount $MAPPER $* || cryptsetup luksClose $(basename $MAPPER)

也就是说,它确定了一个未使用的映射器名称,cryptsetup可以使用它来安装一个 LUKS/dm-crypt 加密设备(我知道$*如果涉及子类型很容易递归,请考虑这是一个原型)在解密之后(在提示输入密码)。

问题是,mount -t luks /dev/hda /mnt/decryptedin的结果条目/etc/mtab看起来像

/dev/mapper/tmp.mpI5ClExf8 on /mnt/decrypted type ext3 (rw,relatime,errors=continue,data=writeback)

这样umount /dev/hda将失败并且umount /mnt/decrypted只会卸载映射器但使加密设备保持打开状态。映射器也无关紧要。我想要实现的是有一个条目

/dev/hda on /mnt/decrypted type luks.ext3 (rw,relatime,errors=continue,data=writeback,mapper=/dev/mapper/tmp.mpI5ClExf8)

这样umount就会调用umount.luks,可能类似于

#!/bin/bash
set -e
umount $1
cryptsetup luksClose $MAPPER

(同样,原型,这只会umount /mnt/decrypted正确处理调用,MAPPER需要从挂载选项中获取)

那么,mount.luks必须如何修改呢?直接修改/etc/mtab肯定是个坏主意。(例如可以以某种mount -n方式mount -f实现这一目标吗?)

4

1 回答 1

3

我知道这个问题很老,但是我自己在寻找答案时遇到了它。

如果您有足够新的发行版,例如 Fedora 20,那么您可以修改 mount.luks 脚本以包含'-o helper=luks'.

例如:

#!/bin/bash
set -e
MAPPER=$(mktemp -up /dev/mapper)
cryptsetup luksOpen $1 $(basename $MAPPER)
shift
mount -o helper=luks $MAPPER $* || cryptsetup luksClose $(basename $MAPPER)

umount 使用 helper 的值来确定要运行的正确 umount 脚本,类似于 mount 使用 -t 选项的方式。

注意:在 Fedora 20 上,/etc/mtab 是 /proc/self/mounts 的符号链接。如果您 cat /etc/mtab,则不会显示辅助选项。但是,如果您在没有选项的情况下执行 mount,则会出现 helper 选项。

于 2014-06-10T14:48:35.167 回答