USB 密钥在启动时未安装以解锁 LUKS 系统

USB 密钥在启动时未安装以解锁 LUKS 系统

我正在运行 Debian Jessie。我有 2 个硬盘,各个分区分布在两个硬盘上(不是 RAID)。它们都单独进行 LUKS 加密,LVM 位于它们之上。我的/boot分区是唯一不包含在两个硬盘上的分区;相反,它位于未加密的 USB 记忆棒上。在/boot分区上myKeyfile.key应该解锁两个硬盘[但没有]。我的目标是当系统在没有 USB 记忆棒的情况下启动时,磁盘完全无法访问/无用。

以下是我为实现这一目标所做的工作。我用了这个答案StackOverflow 上作为指南。


/etc/default/cryptdisks

# Mountpoints to mount, before cryptsetup is invoked at initscripts. Takes
# mountpoints which are configured in /etc/fstab/ as arguments. Separate
# mountpoints by space.  

# original: CRYPTDISKS_MOUNT=""
CRYPTDISKS_MOUNT=/boot

根据评论,我只需要确保我有正确的安装点名称,如 中所述fstab。为了完整起见,以下是相关行:

/etc/fstab

# <file system> <mount point> <type> <options> <dump> <pass>
 UUID=<usb uuid>    /boot      ext4   defaults    0     2

/etc/crypttab

sda1_crypt  UUID=<disk uuid>  /boot/myKeyfile.key  luks,keyscript=/bin/passphrase-from-usb
sda2_crypt  UUID=<disk uuid>  /boot/myKeyfile.key  luks,keyscript=/bin/passphrase-from-usb

我可以指定 USB 驱动器的 UUID(而不是/boot/myKeyfile.key),但随后我不确定如何指定myKeyfile.key我感兴趣的文件。

/etc/initramfs-tools/hooks/passphrase-from-usb

#!/bin/sh

PREREQ=""

prereqs() {
        echo "$PREREQ"
}

case "$1" in
        prereqs)
                prereqs
                exit 0
       ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

copy_exec /bin/passphrase-from-usb /bin

/bin/passphrase-from-usb

#!/bin/sh

set -e

    if ! [ -e "$CRYPTTAB_KEY" ]; then
        echo "Waiting for USB stick to be recognized..." >&2
        sleep 5
    fi
    if [ -e "$CRYPTTAB_KEY" ]; then
        echo "Unlocking the disk $CRYPTTAB_SOURCE ($CRYPTTAB_NAME) from USB key" >&2
        echo "Using $CRYPTTAB_KEY as the key source" >&2
        dd if="$CRYPTTAB_KEY" bs=1 count=256 2>/dev/null
        exit
    else
        echo "Can't find $CRYPTTAB_KEY; USB stick not present." >&2
    fi

/lib/cryptsetup/askpass "Manually unlock the disk ($CRYPTTAB_NAME)\nEnter passphrase: "


这是我在启动时收到的欢迎信息:

Loading, please wait...
   Volume group "vg-root" not found
   Skipping volume group vg-root
Unable to find LVM volume vg-root/lv-root
   Volume group "vg-other" not found
   Skipping volume group vg-other
Unable to find LVM volume vg-other/lv-swap

Waiting for USB stick to be recognized...
[   3.159979] sd 7:0:0:0: [sdd] No Caching mode page found
[   3.160152] sd 7:0:0:0: [sdd] Assuming drive cache: write through

Can't find /boot/myKeyfile.key; USB stick not present. 

Manually unlock the disk (sda1_crypt)
Enter passphrase:

输入密码后,第二个磁盘 会发生相同的交换sdb1_crypt


我做错了什么,但我不确定是什么。由于CRYPTDISKS_MOUNT“指定在调用加密磁盘之前安装的安装点”,我认为添加/boot它会/boot在解锁过程开始之前可用。但是,运行时它似乎并未安装/bin/passphrase-from-usb

我确信它myKeyfile.key已作为 LUKS 密钥添加到两个驱动器中,并且我已更新了initramfsvia update-initramfs -u

答案1

在启动过程中,initramfs 不会挂载 /boot。如果你想使用/boot中的文件,你可以手动挂载/boot。可以将以下命令添加到脚本 passphrase-from-usb 中。

mkdir -p /tmp-boot
mount <usb uuid> /tmp-boot -t ext4
dd if=/tmp-boot/myKeyfile.key bs=1 count=256 2>/dev/null
umount /tmp-boot

还有,这个http://wejn.org/how-to-make-passwordless-cryptsetup.html将会非常有帮助。

相关内容