読み取り専用LUKSパーティションを読み取り/書き込みに再マップする

読み取り専用LUKSパーティションを読み取り/書き込みに再マップする

cryptsetupは読み取り専用マッピングを設定するか、--readonlyオプションを使用して呼び出すことができます。-r

cryptsetup --readonly luksOpen /dev/sdb1 sdb1

デバイスを読み取り専用に開いた後、後で読み取り/書き込みに再マップできますか?明らかに、最初に閉じてから再開せずに読み書きにマッピングすることを意味します。パスワードを再入力せずに再マッピングできますか?

これが不可能な場合は、cryptsetupがそれをサポートしていないのでしょうか、それとももう少し基本的なレベルがありますか?

答え1

コマンドでは機能しないようですcryptsetup。残念ながら、cryptsetupいくつかの不変フラグがあります...--allow-discardsこれはそのうちの1つです。コンテナを開くときにそれを設定しないと、後で追加することはできません。

少なくとも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は似ています。このフラグを含むテーブルを再ロードする必要があります。ただし、廃棄サポートが存在しないことをすでに検出したファイルシステムは、これを動的に再検出できない可能性があります。それで、どれほど実用的かは不明です。


ただし、そうしない妥当な理由がない限り、cryptsetupパスワードを削除して再提供する必要がある場合でも、通常のコマンドを使用して再度開く必要があります。これはより安全であり、より重要なことは、LUKSセキュリティの概念をバイパスしないことです。

答え2

ボリュームを開いた後は、読み取り専用から読み取り/書き込みに変更することはできません。 cryptsetupソースコードには、これを行うオプションはありません。

関連情報