我想要實現的目標:
- 在啟動期間僅被要求輸入一次密碼;
- 其他(非根)分割區使用
/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 裝置保留一個「普通」密碼,否則萬一您的根裝置損壞,您將無法開啟它。