我有一个 luks 加密分区,受密码和密钥文件保护。密钥文件用于日常访问,密码位于密封信封中以备紧急情况使用。五月过去了,我不小心粉碎了密钥文件,所以我使用信封中的密码恢复了。现在我想知道,我有两个活动密钥槽,但我不知道哪个包含无用的密钥文件密码,哪个包含我的紧急密码。显然,如果我删除了错误的一个,我将丢失驱动器上的所有数据。
#cryptsetup luksDump /dev/sda2
LUKS header information for /dev/sda2
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 256
MK digest: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
MK salt: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
MK iterations: 371000
UUID: 28c39f66-dcc3-4488-bd54-11ba239f7e68
Key Slot 0: ENABLED
Iterations: 2968115
Salt: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 2968115
Salt: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
Key material offset: 264
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
答案1
正如您所发现的,您可以使用cryptsetup luksDump
来查看哪些钥匙槽有钥匙。
您可以使用以下命令检查特定插槽的密码
cryptsetup luksOpen --test-passphrase --key-slot 0 /dev/sda2 && echo correct
如果您为密钥槽 0 输入正确的密码,则此操作会成功,否则会失败(包括密码对于其他某个密钥槽而言是否正确)。
如果您忘记了其中一个密码,那么您只能通过消除来找到它所在的位置,而如果您忘记了其中两个密码,则无法区分哪个是哪个(否则密码哈希将被破坏)。
要删除您忘记的密码,您可以安全地运行cryptsetup luksKillSlot /dev/sda2 0
并输入您记住的密码。要擦除密钥槽,cryptsetup
需要不同密钥槽的密码,至少当它不以批处理模式运行时(即 no--batch-mode
或--key-file=-
等效选项)。
答案2
一种更简单的方法(现在?)是使用带有选项的命令--verbose
,但不指定--key-slot
选项:
# cryptsetup --verbose open --test-passphrase /dev/sda2
Enter passphrase for /dev/sda2:
Key slot 4 unlocked.
它会自动为您检查正确的插槽,而无需您循环寻找合适的插槽:)