Linux

在啟動時使用單個密碼解鎖多個加密磁碟

  • February 22, 2021

我的機器有一個 SSD,我在其中安裝了系統和一個 HDD,我將其用作大型和/或不經常使用的文件的儲存。兩者都是加密的,但我選擇為它們使用相同的密碼。SSD 安裝在/,HDD 安裝在/usr/hdd(每個使用者都有一個目錄,並且可以從主目錄進行符號連結)。

當系統啟動時,它會立即詢問 SSD 的密碼,幾秒鐘後詢問 HDD 的密碼(它是自動安裝的)。鑑於兩個密碼相同,有沒有辦法將系統配置為只詢問一次?

基於 Debian 的發行版:

Debian 和 Ubuntu 提供了一個密碼記憶體腳本decrypt_keyctlcryptsetup包。

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 支持多個鍵槽。如果密鑰文件不可用/失去,這允許您使用密碼替代地解鎖設備。

  1. 使用隨機數據生成密鑰並將其權限設置為僅所有者可讀以避免洩漏。請注意,密鑰文件需要位於首先解鎖的根分區上。
dd if=/dev/urandom of=<path to key file> bs=1024 count=1
chmod u=rw,g=,o= <path to key file>
  1. 將密鑰添加到您的 LUKS 設備
cryptsetup luksAddKey <path to encrypted device> <path to key file>
  1. 配置crypttab以使用密鑰文件。第一行應該是根設備,因為設備的解鎖順序與crypttab中列出的順序相同。對關鍵文件使用絕對路徑。
<target>      <source>         <keyfile>                  <options>
root_crypt    /dev/disk/...    none                       luks
part1_crypt   /dev/disk/...    <path to key file>         luks

引用自:https://unix.stackexchange.com/questions/392284