將只讀 LUKS 分區重新映射為讀寫
cryptsetup 可以使用
--readonly
or-r
選項呼叫,這將設置一個只讀映射:cryptsetup --readonly luksOpen /dev/sdb1 sdb1
以只讀方式打開設備後,以後可以將其重新映射為讀寫嗎?顯然,我的意思是在不先關閉它,然後再打開它的情況下將其映射為讀寫。我可以重新映射它而無需再次輸入密碼嗎?
如果這是不可能的,這僅僅是 cryptsetup 不支持這個,還是有一些更基礎的級別?
該命令似乎不可能
cryptsetup
。不幸的是cryptsetup
,有一些這樣的不可變標誌……--allow-discards
也是其中之一。如果在您打開容器時未設置,則以後無法添加。至少,不是用
cryptsetup
命令。但是,由於cryptsetup
創建了正常的設備映射器目標,您可以求助於dmsetup
修改它們。當然,出於各種原因,不建議這樣做:這就像更改正在使用的分區的分區表 - 搞砸了,您可能會失去所有數據。設備映射器允許在執行時動態重新映射所有設備,它根本不關心數據的安全性;這就是為什麼這個特性通常被包裹在 LVM 層之後,該層保留了必要的元數據以確保其安全。
創建只讀 LUKS 設備:
# truncate -s 100M foobar.img # cryptsetup luksFormat foobar.img # cryptsetup luksOpen --read-only foobar.img foobar
方式
dmsetup
看到它:# dmsetup info foobar Name: foobar State: ACTIVE (READ-ONLY) Read Ahead: 256 Tables present: LIVE [...] # dmsetup table --showkeys foobar 0 200704 crypt aes-xts-plain64 ef434503c1874d65d33b1c23a088bdbbf52cb76c7f7771a23ce475f8823f47df 0 7:0 4096
請注意通常不應洩露的主密鑰,因為它破壞了 LUKS 提供的任何蠻力保護。不幸的是,我還沒有找到不使用它的方法,因為
dmsetup
也沒有直接的--make-this-read-write
選擇。但是dmsetup reload
允許完全替換映射,因此我們將在讀寫模式下將其替換為自身。# dmsetup table --showkeys foobar | dmsetup reload foobar # dmsetup info foobar Name: foobar State: ACTIVE (READ-ONLY) Read Ahead: 256 Tables present: LIVE & INACTIVE
重新載入後它仍然是只讀的,因為重新載入進入非活動表。
要使非活動表處於活動狀態,請使用
dmsetup resume
:# dmsetup resume foobar # dmsetup info foobar Name: foobar State: ACTIVE Read Ahead: 256 Tables present: LIVE
因此我們有一個讀寫 LUKS 設備。
它適用於實時文件系統嗎?
# cryptsetup luksOpen --readonly foobar.img foobar # mount /dev/mapper/foobar /mnt/foobar mount: /mnt/foobar: WARNING: device write-protected, mounted read-only. # mount -o remount,rw /mnt/foobar mount: /mnt/foobar: cannot remount /dev/mapper/foobar read-write, is write-protected.
所以它是只讀的。使其可讀寫並重新掛載:
# dmsetup table --showkeys foobar | dmsetup reload foobar # dmsetup resume foobar # mount -o remount,rw /mnt/foobar # echo hey it works > /mnt/foobar/amazing.txt
我們可以回到只讀狀態嗎?
# mount -o remount,ro /mnt/foobar # dmsetup table --showkeys foobar | dmsetup reload foobar --readonly # dmsetup resume foobar # mount -o remount,rw /mnt/foobar mount: /mnt/foobar: cannot remount /dev/mapper/foobar read-write, is write-protected.
所以它可能有效。將
allow_discards
標誌添加到現有 crypt 映射的過程類似 - 您必須使用包含此標誌的表重新載入。然而,一個已經檢測到沒有丟棄支持的文件系統可能不會被說服在執行中重新檢測它。所以目前還不清楚它有多實用。儘管如此,除非您有充分的理由不這樣做,否則您應該堅持使用正常命令重新打開
cryptsetup
,即使這意味著解除安裝並重新提供密碼。它更安全,更重要的是,它不會繞過 LUKS 安全概念。