我正在使用 arch linux 和加密的 luks 根分区(引导未加密),还带有密码。现在我有一个密钥文件(3072 字节),它以这种方式写入 USB 棒:
sudo dd if=tempKeyFile.bin of=/dev/sdd bs=512 seek=1 count=6
并设置为附加通行证
sudo cryptsetup luksAddKey /dev/sdb6 tempKeyFile.bin
当我使用以下命令手动打开分区时:
sudo cryptsetup --key-file tempKeyFile.bin open /dev/sdb6 luks_root
一切正常,分区已映射并且可以安装。现在我的内核参数行grub.cfg
如下所示:
linux /vmlinuz-linux root=UUID=$UUID_OF_luks_root$ rw cryptdevice=UUID=$UUID_OF_sdb6$:luks_root cryptkey=/dev/sdd:1:6
但是启动时,我收到此错误:
No key available with this passphrase. Invalid Keyfile. Reverting to passphrase.
我已经尝试过偏移 2 而不是 1,但结果相同。我注意到它没有说无法找到/读取密钥文件,而是不正确。
关于这种存储 luks 密钥文件的方式的文档似乎很少。 Arch-wiki 提到了它,但是非常简短,我似乎很同意,所以我认为这应该是可能的。
在我的mkinitcpio.conf
模块中,二进制文件和文件是空的,我设置:
HOOKS=(base udev autodetect keyboard modconf block encrypt filesystems fsck)
所以块就在加密之前。
这里有什么问题?
答案1
来自 ArchLinux 加密钩子 ( /lib/initcpio/hooks/encrypt
):
*)
# Read raw data from the block device
# ckarg1 is numeric: ckarg1=offset, ckarg2=length
dd if="$resolved" of="$ckeyfile" bs=1 skip="$ckarg1" count="$ckarg2" >/dev/null 2>&1
;;
因此,虽然它支持从原始块设备读取密钥,但它使用的块大小为 1(而不是默认的 512),因此您必须将您的值乘以 512 才能使其工作。
所以而不是cryptkey=/dev/sdd:1:6
尝试cryptkey=/dev/sdd:512:3072
。