我想要实现的目标:
- 在启动时仅要求输入一次密码;
- 其他(非根)分区使用
/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 设备保留一个“正常”密码,否则如果您的根设备损坏,您将无法打开它。