cryptsetupは、--readonly
または-r
オプションを使用して呼び出すことができます。これにより、読み取り専用のマッピングが設定されます。
cryptsetup --readonly luksOpen /dev/sdb1 sdb1
デバイスを読み取り専用として開いた後、後で読み取り/書き込みに再マップできますか?明らかに、最初に閉じずに読み取り/書き込みでマッピングしてから、再度開くことを意味します。パスワードを再度入力せずに再マップできますか?
これが不可能な場合、これはcryptsetupがこれをサポートしていないというだけですか、それとももっと基本的なレベルがありますか?
cryptsetup
コマンドでは不可能のようです。残念ながら、cryptsetup
にはそのような不変のフラグがいくつかあります...--allow-discards
もその1つです。コンテナを開いたときにこれが設定されていなかった場合、後で追加することはできません。
少なくとも、cryptsetup
コマンドではありません。ただし、cryptsetup
は通常のDeviceMapperターゲットを作成するため、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セキュリティの概念を回避しません。
ボリュームを開いた後、読み取り専用から読み取り/書き込みに変更することはできません。 cryptsetupソースコードにそれを行うためのオプションがありません。