仅删除 LUKS 密钥后如何恢复?

use*_*274 4 fedora hard-disk luks disk-encryption

在禁用 LUKS 加密的愚蠢尝试中,我已经完成了

cryptsetup luksRemoveKey
Run Code Online (Sandbox Code Playgroud)

到我唯一的钥匙。所以现在每次我尝试启动我的 Fedora-21 时,它都会要求输入密码,但显然无法识别它,并说

Reached target System Initialization
Reached target Basic System
Run Code Online (Sandbox Code Playgroud)

就是这样。有没有办法从中恢复或者我必须重新格式化我的硬盘?

cryptsetup luksAddKey
Run Code Online (Sandbox Code Playgroud)

在这种情况下似乎不起作用。

fro*_*utz 6

正如手册页所述,游戏结束了。

删除最后一个密码会使 LUKS 容器永久无法访问。

也就是说,如果您真的删除了最后一个键。是否cryptsetup luksDump显示DISABLED所有键槽?

通常会cryptsetup阻止您这样做,或者至少要求您确认:

# cryptsetup luksRemoveKey foobar
Enter passphrase to be deleted: 

WARNING!
========
This is the last keyslot. Device will become unusable after purging this key.

Are you sure? (Type uppercase yes): NO, ABSOLUTELY NOT OKAY!
Run Code Online (Sandbox Code Playgroud)

除非它处于批处理模式或从管道读取密码短语,否则它会这样做。

我个人认为它应该阻止你,毕竟如果你真的想让它无法访问,你也可以luksErase直接使用。但这似乎不是它的工作方式。

如果您有 LUKS 标头的备份,或者 LUKS 容器仍处于打开状态,则情况会有所不同。LUKS 标头的备份您可以恢复或与luksOpen --header thebackup.header.

对于开放的 LUKS 容器,您可以获取主密钥dmsetup table --showkeys并从中构建一个新的 LUKS 标头,如本答案所示(它以不同的方式获取主密钥,但它的概念相同)。