我有一個 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)
device
並volume_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 命令替換和重定向。它基本上執行內部的所有內容,將輸出發送到管道,然後用<(...)
該管道的路徑替換。
所以整個命令只是一句話,濃縮了幾個操作。