在啟動時使用單個密碼解鎖多個加密磁碟
我的機器有一個 SSD,我在其中安裝了系統和一個 HDD,我將其用作大型和/或不經常使用的文件的儲存。兩者都是加密的,但我選擇為它們使用相同的密碼。SSD 安裝在
/
,HDD 安裝在/usr/hdd
(每個使用者都有一個目錄,並且可以從主目錄進行符號連結)。當系統啟動時,它會立即詢問 SSD 的密碼,幾秒鐘後詢問 HDD 的密碼(它是自動安裝的)。鑑於兩個密碼相同,有沒有辦法將系統配置為只詢問一次?
基於 Debian 的發行版:
Debian 和 Ubuntu 提供了一個密碼記憶體腳本decrypt_keyctl和cryptsetup包。
decrypt_keyctl腳本為多個加密的 LUKS 目標提供相同的密碼,避免您多次輸入密碼。它可以通過選項在crypttab中啟用
keyscript=decrypt_keyctl
。相同的密碼用於在keyfile 欄位中具有相同標識符的目標。每個標識符的啟動密碼被詢問一次。一個範例crypttab:
<target> <source> <keyfile> <options> part1_crypt /dev/disk/... crypt_disks luks,keyscript=decrypt_keyctl part2_crypt /dev/disk/... crypt_disks luks,keyscript=decrypt_keyctl
該
decrypt_keyctl
腳本取決於keyutils
軟體包(僅建議使用,因此不一定要安裝)。更新cryptab後,您還必須更新 initramfs 以應用更改。使用
update-initramfs -u
.decrypt_keyctl 的完整自述文件位於
/usr/share/doc/cryptsetup/README.keyctl
不幸的是,由於一個錯誤****,這目前不適用於使用 systemd init 的 Debian 系統(其他 init 系統應該不受影響)。有了這個錯誤,systemd 會再次要求您輸入密碼,從而無法通過 ssh 遠端解鎖。Debian crypttab 手冊頁建議作為一種解決方法,使用
initramfs
選項在引導的 initramfs 階段強制處理。所以為了規避這個錯誤,Debian 中的 /etc/crypttab 範例<target> <source> <keyfile> <options> part1_crypt /dev/disk/... crypt_disks luks,initramfs,keyscript=decrypt_keyctl part2_crypt /dev/disk/... crypt_disks luks,initramfs,keyscript=decrypt_keyctl
不提供decrypt_keyctl腳本的發行版:
如果您的發行版未提供decrypt_keyctrl,則可以使用加密根文件系統中的密鑰文件解鎖設備。這可以在任何其他加密設備之前解鎖和安裝根文件系統。
LUKS 支持多個鍵槽。如果密鑰文件不可用/失去,這允許您使用密碼替代地解鎖設備。
- 使用隨機數據生成密鑰並將其權限設置為僅所有者可讀以避免洩漏。請注意,密鑰文件需要位於首先解鎖的根分區上。
dd if=/dev/urandom of=<path to key file> bs=1024 count=1 chmod u=rw,g=,o= <path to key file>
- 將密鑰添加到您的 LUKS 設備
cryptsetup luksAddKey <path to encrypted device> <path to key file>
- 配置crypttab以使用密鑰文件。第一行應該是根設備,因為設備的解鎖順序與crypttab中列出的順序相同。對關鍵文件使用絕對路徑。
<target> <source> <keyfile> <options> root_crypt /dev/disk/... none luks part1_crypt /dev/disk/... <path to key file> luks