Ubuntu

使用 Ubuntu 為現有的全盤加密設備分離 LUKS 標頭(在 USB 上)

  • August 23, 2021

我的 U 盤上已經有一個分區/boot,我的電腦上有一個 LUKS 分區,它們對應於 Ubuntu 21 的全盤加密方案/boot在我的 USB 上)

我已將標頭(帶有cryptsetup luksHeaderBackupboot_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/sda4LUKS 數據偏移量 ( <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)

最後更新initramfsupdate-initramfs -u -k all

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