当我试图删除加密时,密码设置/LUKS2 2破坏了我的数据,为什么?
我正在使用Cryptset2.3.3。我正在用LUKS进行实验(谢天谢地,在VM中),并且在一个ext4加密分区上有一个LUKS2文件系统。我决定测试LUKS的非破坏性能力,从运行cryptsetup reencrypt --decrypt的块设备中删除加密,得到一个必须在头中传递的错误。因为我不使用分离的标头,所以我传入了设备,这样它就可以读取它的头了。解密给出了一个“标准”警告:
WARNING!
========
Unable to decide if device /tmp/file is activated or not.
Are you sure you want to proceed with reencryption in offline mode?
It may lead to data corruption if the device is actually activated.
To run reencryption in online mode, use --active-name parameter instead.然后请求解密而不报告任何错误..。然后数据就丢失了。
我所期望的是以前在ext4设备中的LUKS2系统对操作系统来说是可见的,就像我一开始就用ext4格式化了分区一样。但是blkid仍然将分区检测为TYPE="crypto_LUKS"。然后我尝试用luks打开分区,认为它可能实际上什么也没做,而且数据仍然在那里。但是在输入密码后,我得到了错误。
Keyslot open failed.
No usable keyslot is available.luksDumps没有显示有效的键槽。
发布于 2020-08-25 13:01:34
cryptsetup的S解密的LUKS2设备是错误的文件,包括几个令人难以置信的糟糕的设计选择,帮助您破坏您的数据。
对于OP中出现的问题,问题是cryptsetup假设您使用的是一个分离的头,但是没有清楚地说明它在任何地方。它不包括任何基本的健全检查来阻止您犯这个错误,而且他们的测试不包括这个场景。
如果您进行检查,则用于此操作的测试都使用使用分离头创建的设备。看起来它们只测试在线解密,尽管命令允许离线解密。
我已经测试过带有分离头的LUKS2设备的解密,它成功了。解密后,检测到分区是用ext4文件系统格式化的。
请注意,对于密码设置来说,检查设备是否已经有一个标头是很简单的,并且至少警告用户是这样的。在离线情况下,它还可以很容易地确定加密的块设备也被作为--header参数传入,或者优雅地处理这个问题,或者拒绝继续。但两者都没有。
解密(只有在脱机模式下才有可能)对LUKS1有效,但为此您不使用cryptsetup reencrypt --decrypt (这本身就混淆了用法),而是需要使用一个名为cryptsetup-reencrypt的单独命令。这个命令当然支持LUKS1,但不支持LUKS2。更糟糕的是,至少在fedora上,这个命令不是打包成cryptsetup的一部分,而是作为一个单独的包cryptsetup-reencrypt,默认情况下没有安装。
总结如下:
--header参数中传递一个具有标头的设备不会产生错误,然后密码设置将继续悄悄地销毁您的数据。cryptsetup-reencrypt命令解密。我还没测试过这个,但应该能用。我试着向上游报告这个问题,但是gitlab阻止了那些试图注册到某个词类中的用户。
https://unix.stackexchange.com/questions/606223
复制相似问题