使用 Ubuntu 為現有的全盤加密設備分離 LUKS 標頭(在 USB 上)
我的 U 盤上已經有一個分區
/boot
,我的電腦上有一個 LUKS 分區,它們對應於 Ubuntu 21 的全盤加密方案/boot
在我的 USB 上)我已將標頭(帶有
cryptsetup luksHeaderBackup
)boot_header.luks
放在我的引導分區(假設在設備上/dev/sda3
),然後使用我嘗試以下crypttab
選項的文件中:header=
/boot/boot_header.luks
/dev/sda3/boot_header.luks
/dev/sda3:/boot_header.luks
還有/boot_header.luks:/dev/sda3
(當然)與 的 uuid 相同,
/dev/sda3
也與/dev/disk/by-uuid/[uuid]
所以我雖然
sda3
沒有按照crypttab的文件安裝設備(如果我理解正確的話)可選地,路徑
$$ of the file containing the header $$後面可以跟“:”和 /etc/fstab 設備規範(例如以“UUID=”或類似開頭);在這種情況下,路徑是相對於設備文件系統根目錄的。設備僅在 LUKS 設備啟動期間自動掛載。
因此,我在執行cryptroot腳本之前尋找掛載引導分區,
local-bottom
並在init-bottom
. 並且還按照此處的建議,我嘗試在此答案之後將標頭合併到 initramfs 中但是啟動時的結果總是一樣的:
‘header’ 選項的值錯誤
我發現它在arch上是非常可行的,但是有沒有辦法在 Ubuntu 上做同樣的事情(不修改像 cryptroot 這樣的現有腳本)?
正如@AB在評論中指出的那樣,解決方案是一個原始分區,其中包含標頭檔而不是分區內的標頭檔(由於需要先掛載文件系統,這很麻煩)
將標頭(LUKS2 大約 16MB)複製到分區(
/dev/sdb
大於標頭大小)有兩個選項。
- 第一個是用 . 複製原始標題
dd
。首先,您需要找到數據的偏移量(因為標頭始終從 0 開始)。對於 LUKS 設備
/dev/sda4
,使用cryptsetup luksDump /dev/sda4
並在數據段部分中查找線**偏移。然後使用 .找到文件系統塊大小。最後,stat -fc %s /dev/sda4``dd if=/dev/sda4 of=/dev/sdb bs=<fs_block_size> count=<data_offset>
- 第二種是將所有頭數據打包到一個備份文件中,該備份文件將被複製到分區
/dev/sdb
中。因為備份文件即使保存在加密磁碟上也會導致一些安全問題,因此最好只為該文件創建一個 ramdisk。
mkdir /tmp/header_backup mount -t tmpfs -o size=512m tmpfs /tmp/header_backup cryptsetup luksHeaderBackup /dev/sda4 --header-backup-file /tmp/header_backup/header.luks dd if=/tmp/header_backup/header.luks of=/dev/sdb umount /tmp/header_backup
然後
/etc/crypttab
將選項添加header=/dev/sdb
到相應的行(例如sda4_crypt [UUID] none luks,discard,header=/dev/sdb
)要刪除舊的 LUKS 標頭:
cryptsetup luksErase /dev/sda4
。這只會擦除鍵槽,但會保留所有元數據。如果您想(沒有必要)完全擦除標頭,則需要在其上放置另一個文件系統標頭,以便將 UUID 保留在該分區上。但請注意,完全擦除 LUKS 標頭可能不會導致安全擦除,具體取決於您的儲存設備(SSD 或 HDD)。對於 SSD,刪除的塊可能會留在隊列中,直到設備需要分配更多空間。否則擦除標頭:獲取文件系統塊大小 (
<fs_block_size>
) 和stat -fc %s /dev/sda4
LUKS 數據偏移量 (<luks_data_offset>
) 以及cryptsetup luksDump /dev/sdb
分區的 UUID/dev/sda4
(<uuid_sda4>
),然後:dd if=/dev/urandom of=/dev/sda4 bs=<fs_block_size> count=<luks_data_offset> mkfs.ext4 fs.img tune2fs -U <uuid_sda4> fs.img dd if=fs.img of=/dev/sda4
該分區
/dev/sdb
將具有與 LUKS 相同的 UUID,這可能是一個問題。您可以更改它而不會弄亂 LUKS 過程cryptsetup luksUUID /dev/sdb --uuid $(uuidgen)
最後更新initramfs
update-initramfs -u -k all