尽管指定了密钥文件,启动时仍提示输入 luks 加密密码

尽管指定了密钥文件,启动时仍提示输入 luks 加密密码
  • 我在设备的 LUKS 加密 ext4 分区上安装了 Kubuntu 22.04 nvme0n1。当我启动计算机时,它会提示我输入加密密码,然后才能继续启动到显示管理器。
  • 我的电脑上安装了第二块硬盘sda,其唯一分区sda1(ext4)使用 LUKS 加密。我已将此加密分区的密钥存储在文件中 /etc/cryptsetup-keys.d/sda1
    • 我选择这个地点是因为本手册页 据说如果我没有在 crypttab 中的第三个参数中指定密钥文件,cryptsetup 将自动在那里查找密钥文件。但是,cryptsetup 的这个功能似乎在 Kubuntu 22.04 中尚不存在(在man crypttab我的计算机上),所以我最终还是提供了完整路径 — 见下文。
  • 我的目标是进行这样的设置:每当我启动 Kubuntu 时,在我输入解密密码后nvme0n1p1,它就会自动挂载并解密sda1(♥)

下列的本教程,我修改/etc/crypttab如下:

# Entry created by the Kubuntu installer
nvme0n1p4_crypt UUID=aaaaaaaa-****-****-****-********** none luks,discard
# Entry added by me
sda1 UUID=bbbbbbbb-****-****-****-********** /etc/cryptsetup-keys.d/sda1 luks

其中的 UUIDsda1来自sudo cryptsetup luksUUID /dev/sda1

(请注意,我已明确提供了密钥文件的路径。上面链接的手册页说,如果我写了,cryptsetup 会检查该路径none,但 Kubuntu 22.04 附带的 cryptsetup 特定版本似乎没有此功能 - 在中没有提到man crypttab。)

接下来,我将以下内容附加到/etc/fstab

/dev/mapper/sda1    /mnt/encrypted_sda1 ext4    nofail

(该nofail选项只是为了确保如果解密或安装序列失败,我仍然可以启动。)

现在当我启动时,正如预期的那样,系统首先提示我输入 的密钥nvme0n1p1。当我输入此密钥时,会有短暂的延迟,然后系统会要求我输入 的密钥。我可以通过按几次+sda1来强制系统继续启动,但(不用说)当我进入会话时,驱动器/分区尚未安装。CtrlC

  • 我如何知道为什么系统提示我输入sda1密码?
    • 是不是因为我的 crypttab 有语法错误,或者无法读取文件/etc/cryptsetup-keys.d/sda1,或者文件内容是错误的密钥,还是其他原因?我在中没有看到任何相关信息journalctl --boot
  • 我怎样才能实现上面描述的行为?(♥)

编辑:没有意识到这sudo journalctl会给你提供比 更多的记录journalctl。找到以下相关行:

journalctl 日志
Jan 14 14:36:58 my-computer systemd-cryptsetup[740]: Failed to activate. (Key incorrect?)
Jan 14 14:36:58 my-computer systemd[1]: Condition check resulted in Dispatch Password Requests to Console Directory Watch being skipped.
Jan 14 14:36:58 my-computer systemd[1]: Starting Load Kernel Module efi_pstore...
Jan 14 14:36:58 my-computer systemd[1]: Started Forward Password Requests to Plymouth.
Jan 14 14:36:58 my-computer systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.
Jan 14 14:36:58 my-computer systemd[1]: Condition check resulted in Commit a transient machine-id on disk being skipped.
Jan 14 14:36:58 my-computer systemd[1]: modprobe@efi_pstore.service: Deactivated successfully.
Jan 14 14:36:58 my-computer systemd[1]: Finished Load Kernel Module efi_pstore.
Jan 14 14:36:58 my-computer systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.
Jan 14 14:37:01 my-computer systemd[1]: systemd-rfkill.service: Deactivated successfully.
Jan 14 14:37:03 my-computer systemd-cryptsetup[740]: Set cipher aes, mode xts-plain64, key size 512 bits for device /dev/disk/by-uuid/b4130695-c509-426d-93e4-7c645dcd256b.
Jan 14 14:37:05 my-computer systemd-cryptsetup[740]: Failed to activate with specified passphrase. (Passphrase incorrect?)
Jan 14 14:37:06 my-computer systemd-cryptsetup[740]: Set cipher aes, mode xts-plain64, key size 512 bits for device /dev/disk/by-uuid/b4130695-c509-426d-93e4-7c645dcd256b.
Jan 14 14:37:08 my-computer systemd-cryptsetup[740]: Failed to activate with specified passphrase. (Passphrase incorrect?)
Jan 14 14:37:08 my-computer systemd-cryptsetup[740]: Too many attempts to activate; giving up.
Jan 14 14:37:08 my-computer systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
Jan 14 14:37:08 my-computer systemd[1]: [email protected]: Failed with result 'exit-code'.
Jan 14 14:37:08 my-computer systemd[1]: Failed to start Cryptography Setup for sda1.
Jan 14 14:37:08 my-computer systemd[1]: Dependency failed for Local Encrypted Volumes.
Jan 14 14:37:08 my-computer systemd[1]: cryptsetup.target: Job cryptsetup.target/start failed with result 'dependency'.
Jan 14 14:37:08 my-computer systemd[1]: Dependency failed for /dev/mapper/sda1.
Jan 14 14:37:08 my-computer systemd[1]: Dependency failed for /mnt/encrypted_sda1.
Jan 14 14:37:08 my-computer systemd[1]: mnt-encrypted_sda1.mount: Job mnt-encrypted_sda1.mount/start failed with result 'dependency'.
Jan 14 14:37:08 my-computer systemd[1]: dev-mapper-sda1.device: Job dev-mapper-sda1.device/start failed with result 'dependency'.
Jan 14 14:37:08 my-computer systemd[1]: [email protected]: Consumed 6.159s CPU time.

这两个Passphrase incorrect?条目对应于我在提示输入密码时按下Ctrl“+” 。C


编辑:noearly在 crypttab 中添加该选项也没有任何作用。

答案1

最简单的方法是添加设备nvme0n1上使用的密码sda1。根据我的经验,这会导致两个磁盘都通过输入一个密码进行解密。

cryptsetup luksAddKey /dev/sda1

如果我错了,有人可以纠正我,但使用在第一个磁盘上找到的第二个磁盘的密钥文件对安全状况没有多大好处。相反,如果第一个磁盘出现故障或丢失,这只会增加第二个磁盘数据丢失的可能性。


至于使用密钥文件,密钥文件必须可用(即:已解密)。您的帖子并未确认在出现您显示的第二个磁盘错误时第一个磁盘是否已正确解密且可用。

您是否已确认您创建的密钥文件可以正确解密磁盘?您是否可能忘记将此密钥文件添加到磁盘,因此无法解密磁盘?说明您已使用此密钥文件手动安装此磁盘并更新您的帖子会很有帮助。

此外,请确保在更新后运行以下命令,crypttab以确保启动过程使用更新的配置。

sudo update-initramfs -u -k all

相关内容