cryptsetup 为 luks 打开:不正确处理 --key-file 参数

cryptsetup 为 luks 打开:不正确处理 --key-file 参数

一个相关的问题是:除非提供 --key-file 参数,否则 luksOpen 不会使用密钥文件解密

然而,在 Ubuntu bionic 上cryptsetup 2.0.2,我确实遇到了以下问题:

当使用文件中包含的密码打开 luks 加密设备时效果很好直接调用:

cat mypass.txt | sudo cryptsetup open --type luks /dev/sda1 enc-store

尝试使用记录的--key-file=-论点,其中应该导致相同的行为

cat mypass.txt | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store

只是产生延迟消息

此密码没有可用的密钥。

当尝试使用cryptdisks_start enc-store依赖于该选项的脚本时,这尤其是一个问题,--key-file=-该选项会三次生成上述消息

这让生活变得不那么愉快了。

我在这里错过了什么吗?

-谢谢!

答案1

这两个命令之间存在差异,如中所述man cryptsetup:

--key-file, -d name
从文件中读取密码。

如果给定的名称是“-”,则将从标准输入读取密码。在这种情况下,读取不会在换行符处停止。

echo这意味着如果您使用、或复制/粘贴生成文件vi,它很可能在末尾包含换行符。如果用作纯标准输入(无--key-file选项),它将忽略其最后的换行符,但是当用作 的参数时--key-file,即使它是相同的标准输入(--key-file=-),它也会在密码中包含此换行符:它成为一个新的密码是无效的。

要验证这一点:

cat mypass.txt | tr -d '\r\n' | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store

应该按预期工作(以防万一我也删除任何 CR)。

如果这是原因,只需删除此换行符:例如

mv -i mypass.txt mypass.old && tr -d '\r\n' < mypass.old > mypass.txt

无论如何,您可能应该做的是从纯随机数生成一个新的密码,将其放入安全文件中,并将其包含在单独的 LUKS 插槽中。

相关内容