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

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

--readonlycryptsetup はまたはオプションを使用して呼び出すことができ-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 ソース コードには、これを行うためのオプションがありません。

関連情報