在不知道密碼的情況下更改 LUKS 檔案系統上的密碼

在不知道密碼的情況下更改 LUKS 檔案系統上的密碼

我有一個 Debian Wheezy 伺服器,它已經使用加密磁碟機運行了一段時間。/dev/sda5當我的加密密碼檔案損壞時,加密磁碟機 ( ) 的密碼會遺失。

我希望能夠重新啟動該伺服器,但這當然需要該密碼。由於磁碟機顯然處於解密狀態,是否有一種方法可以在不知道舊密碼的情況下更改密碼?

cryptsetup luksChangeKey /dev/sda5需要卷的密碼。

我當然可以把rsync所有東西都關掉然後重建,但我想避免這種情況。我翻遍了記憶(#cat /dev/mem | less),但找不到它(這是一件非常好的事情!)。

答案1

是的,您可以透過在解密磁碟區時存取主金鑰來執行此操作。

新增密碼的快速而骯髒的方法:

device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)

devicevolume_name應適當設定。
volume_name是解密卷的名稱,也就是您在 中看到的那個/dev/mapper


解釋:

LUKS 磁碟區使用主金鑰加密其資料。您新增的每個密碼僅儲存使用該密碼加密的主密鑰的副本。因此,如果您有主鑰匙,您只需在新的鑰匙槽中使用它即可。

讓我們分解上面的命令。

$ dmsetup table --showkeys $volume_name

這會轉儲大量有關主動解密磁碟區的資訊。輸出如下圖所示:

0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096

欄位 #5 是主密鑰。

 

$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p

不會顯示其輸出,因為它是二進位數據,但它的作用是獲取卷的主密鑰,然後將其轉換為稍後需要的原始二進位數據。

 

$ cryptsetup luksAddKey $device --master-key-file <(...)

這告訴 cryptsetup 將新密鑰新增到磁碟區。通常此操作需要現有密鑰,但我們通常--master-key-file告訴它我們要使用主密鑰。
<(...)是 shell 命令替換和重定向。它基本上執行內部的所有內容,將輸出發送到管道,然後用<(...)該管道的路徑替換。

 

所以整個命令只是一句話,濃縮了幾個操作。

相關內容