我想要实现的目标:

我想要实现的目标:

我想要实现的目标:

  • 在启动时仅要求输入一次密码;
  • 其他(非根)分区使用/root/目录内的密钥文件。

我目前所取得的成就:

  • (A)系统正在启动,但要求输入两次密码(一次是/,一次是/usr)。
  • 或者:(二)系统无法启动,要求输入密码一次,但随后拒绝安装,/usr说找不到 LVM 组/卷。我进入 shell,可以看到/root/.keyfile不可用。/尚未安装。

配置

文件:/etc/crypttab

案例 A

sdc3_crypt /dev/sdc3 none luks md0_crypt /dev/md0 none luks

案例 B

sdc3_crypt /dev/sdc3 none luks md0_crypt /dev/md0 /root/.keyfile luks

什么根本不起作用

  • 创建脚本文件以手动打开所需的驱动器: 中的脚本文件在可用/etc/initramfs-tools/scripts/local-premount之前/被调用,但是 中的脚本文件/etc/initramfs-tools/scripts/local-bottom在要打开之后被调用/usr(因此为时已晚)。

答案1

此维基页面(德语,遗憾的是我没有找到英语版本)建议您使用脚本/lib/cryptsetup/scripts/decrypt_derived从打开的根设备生成密钥。我会尝试翻译重要的部分,但我已经不是尝试了该程序。

要添加密钥,您必须执行(以 root 身份)

mkdir /mnt/ram && mount -t ramfs -o size=1m ramfs /mnt/ram && chmod 600 /mnt/ram
/lib/cryptsetup/scripts/decrypt_derived <root_dev> > /mnt/ram/tmp.key && cryptsetup luksAddKey <usr_dev> /mnt/ram/tmp.key && rm /mnt/ram/tmp.key
umount /mnt/ram && rmdir /mnt/ram 

其中<root_name>是您的根设备的名称,如中所示/dev/mapper(可能sdc3_crypt),并且是<usr_dev>设备 所在/usr的位置(可能/dev/md0)。

crypttab 的行是

  <usr_name>         UUID=<UUID>          <root_name>           luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived

记得跑

update-initramfs -u -k all 

更改 crypttab 后。

您应该为您的 usr 设备保留一个“正常”密码,否则如果您的根设备损坏,您将无法打开它。

相关内容