我的笔记本电脑有两个分区,其中 EFI 和/boot
位于第一个分区,其余的 Linux 目录(包括根目录)位于第二个分区,该分区使用 dm-crypt 加密,LUKS2。
/dev/nvme0n1p1: UUID="7AF4-D518" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="4679ac1e-34a2-4ef8-aa7b-3d650ed32cca"
/dev/nvme0n1p2: UUID="440abce6-d1ac-41de-8ae1-ebaefa51823c" TYPE="crypto_LUKS" PARTLABEL="Linux filesystem" PARTUUID="9bc4085a-05ce-41dc-9b4e-ed75c5901965"
我有启动项,无需使用密码即可自动解密(我使用的是 USB,但在 USB 开始出现问题后,我存储并使用了 EFI 分区本身的密钥文件)。我的启动项位于/boot/loader/entries/arch-zen-auto.conf
:
title Arch Linux (Zen) Auto
linux /vmlinuz-linux-zen
initrd /intel-ucode.img
initrd /initramfs-linux-zen.img
options cryptdevice=UUID=440abce6-d1ac-41de-8ae1-ebaefa51823c:luks:allow-discards cryptkey=/dev/disk/by-uuid/7AF4-D518:vfat:keyfile root=/dev/mapper/luks rootflags=subvol=@ rd.luks.options=discard rw mem_sleep_default=deep
因此,我无需提供密码短语即可启动和使用系统。几个月后,我忘记了密码短语 :(。我也找不到我的头文件备份。
有没有办法使用 EFI 分区中现有的密钥文件添加另一个密码,而无需使用我忘记的密码?由于我忘记了原始密码,我有什么选择?
我尝试使用现有的密钥文件打开分区,但仍然不起作用:
x1# cryptsetup luksOpen /dev/nvme0n1p2 test --master-key-file /dev/disk/by-uuid/7AF4-D518
Volume key does not match the volume.
# or
x1# cryptsetup luksOpen /dev/nvme0n1p2 test --master-key-file /boot/keyfile
Volume key does not match the volume.
/etc/fstab
如果这有帮助的话:
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/mapper/luks UUID=50d843f7-2f8e-4c56-ac3d-0b5a7d35110e
/dev/mapper/luks / btrfs rw,noatime,nodiratime,compress=lzo,ssd,space_cache,subvolid=256,subvol=/@,subvol=@ 0 0
# /dev/nvme0n1p1 UUID=7AF4-D518
/dev/nvme0n1p1 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2
# /dev/mapper/luks UUID=50d843f7-2f8e-4c56-ac3d-0b5a7d35110e
/dev/mapper/luks /home btrfs rw,noatime,nodiratime,compress=lzo,ssd,space_cache,subvolid=257,subvol=/@home,subvol=@home 0 0
# /dev/mapper/luks UUID=50d843f7-2f8e-4c56-ac3d-0b5a7d35110e
/dev/mapper/luks /data btrfs rw,noatime,nodiratime,compress=lzo,ssd,space_cache,subvolid=259,subvol=/@data,subvol=@data 0 0
# /dev/mapper/luks UUID=50d843f7-2f8e-4c56-ac3d-0b5a7d35110e
/dev/mapper/luks /var btrfs rw,noatime,nodiratime,compress=lzo,ssd,space_cache,subvolid=258,subvol=/@var,subvol=@var 0 0
我已对所有行进行了注释,/etc/crypttab
因此没有任何内容。
我尝试过的(一些与 LUKS(不是 LUKS2)相关的信息对我没有帮助):
cryptsetup luksAddKey <DEVICE> --master-key-file <(dmsetup table --showkey /dev/mapper/<MAP> | awk '{print$5}' | xxd -r -p)
是否可以在不提供当前密钥的情况下向打开的 luks 卷添加密钥?- https://www.thegeekstuff.com/2016/03/cryptsetup-lukskey/
- 尝试通过暴力破解一些已知和可能的密码来记住我的密码:https://blog.sleeplessbeastie.eu/2019/03/27/how-to-test-luks-passphrase/
答案1
使用--key-file
根据手动的:
luksAddKey
<设备> [<带有新密钥的密钥文件>]添加新密码。必须以交互方式或通过以下方式提供现有密码
--key-file
。可以以交互方式指定要添加的新密码,也可以从作为位置参数给出的文件中读取。
您应该使用这个命令:
cryptsetup luksAddKey --key-file /boot/keyfile --verify-passphrase /dev/nvme0n1p2
注意:--master-key-file
表示内核用于执行实际加密/解密的最终对称密钥,始终以受保护的形式存储,应小心处理。此主密钥过去可通过使用dmsetup table --showkeys
LUKS1 从内核的设备映射器中检索,但对于运行内核 >= 4.10 的 LUKS2,不再可用(除非使用 打开--disable-keyring
):该条目现在为只写内核密钥环名称. 密钥环的内容由内核的设备映射器使用,但用户空间无法使用,根包括在内。因此,如果所有密码/密钥文件都丢失,并且没有包含以前已知密码/密钥文件的旧 LUKS 标头转储,则似乎不再有任何方法可以恢复主密钥,即使 LUKS2 卷仍处于打开状态(但如果已打开,其数据仍可用于紧急备份)。