正如标题所述,我需要知道是否有一种方法可以添加密钥,而不需要用户重新输入密码/为已打开的 luks 卷提供密钥文件。我实际上需要实现它,因此请举个例子。
答案1
是的,就像这样:
cryptsetup luksAddKey <DEVICE> --master-key-file <(dmsetup table --showkey /dev/mapper/<MAP> | awk '{print$5}' | xxd -r -p)
<DEVICE>
用包含 LUKS 分区的块设备(例如/dev/sda1
)和<MAP>
映射的名称(例如)替换sda1_crypt
。
答案2
不,这不是理智的——但对手可以。
该cryptsetup
工具会对加密卷本身进行操作,无论它当前是否打开。它需要从卷中检索卷密钥;为此,它需要一种方法来解码现有密钥槽之一(密码或密钥文件),否则您需要将裸卷密钥传递给它(您几乎不会将其放在身边)。
如果卷已安装,则内核在内存中拥有卷密钥。但毫不奇怪,它没有提供检索它的接口。
您可以编写并加载一个内核模块来检索卷密钥(我认为您必须克服重重困难,但从安全角度来看,这很简单),除非模块加载被禁用或经过身份验证。您可以通过从内存转储中检索密钥/dev/kmem
,除非它被禁用(我预计有现成的取证工具可以做到这一点,但我不能说出任何一种)。我想就是这样。