Ubuntu 20.10 – 将 LUKS 标头移至外部设备

Ubuntu 20.10 – 将 LUKS 标头移至外部设备

我最近安装了 Ubuntu 20.10 来测试 ZFS 文件系统和加密。我发现系统不仅使用原生的 ZFS 加密,还使用 ​​LUKS 加密 ZFS 密钥(如果我错了,请纠正我)。

我想要实现的是在启动时使用密钥文件和密码解密 LUKS 容器。如果两者都不存在,则无法解密容器。另外,我想将密钥文件保存在外部设备上。虽然 LUKS 目前不提供这样的功能,但我发现将 LUKS 标头移动到外部设备是最接近我的问题的解决方案。然而,经过两天的努力,我仍然无法找出问题所在。

我按照以下步骤进行回答。

全新安装 Ubuntu 20.10 后我采取的步骤:

  1. 将现有的 LUKS 标头复制到 USB 驱动器中

sudo cryptsetup luksHeaderBackup /dev/zd0 --header-backup-file=/dev/sdb

  1. 从 /dev/zd0 中删除现有的 LUKS 标头

sudo cryptsetup erase /dev/zd0

  1. 将以下条目添加到 /etc/crypttab

keystore-rpool /dev/zd0 none luks,header=/dev/sdb

  1. 应用更改

sudo update-initramfs -u -k all

完成所有这些操作后,在启动时输入 keystore-rpool 的正确密码总是无法解密卷。输入几次密码后,我被重定向到 initramfs,在那里我可以使用命令手动挂载卷

sudo cryptsetup open /dev/zd0 keystore-rpool –header=/dev/sdb
sudo mount /dev/mapper/keystore-rpool <somemountpoint>

我猜想 /etc/crypttab 中的条目可能有问题,但我不知道如何检查。我还对整个系统进行了 grep,以找出系统打开 LUKS 卷并映射到 /dev/mapper/keystore-rpool 的位置,以查看命令的具体内容,但什么也没找到。它发生在哪里?任何有关如何解决此问题的提示都会很有用。

答案1

我能够将 LUKS 标头移动到外部驱动器,但这是一种解决方法,而不是解决方案。

/usr/share/initramfs-tools/scripts/zfs通过更改此行来修改文件

echo "keystore-${pool} ${ks} none luks,discard" >> "${TABFILE}"

对此

if [ $pool == "rpool" ]; then
    echo "keystore-${pool} ${ks} none luks,header=/dev/disk/by-id/usb-Kingston_DataTraveler_3.0_08606E6D3FEFF351776C4F42-0:0" >> "${TABFILE}"
else
    echo "keystore-${pool} ${ks} none luks,discard" >> "${TABFILE}"
fi

然后使用命令更新 initrd 映像

sudo update-initramfs -u

相关内容