переназначить раздел LUKS только для чтения на чтение и запись

переназначить раздел LUKS только для чтения на чтение и запись

cryptsetup можно вызвать с помощью параметра --readonlyили -r, который установит сопоставление только для чтения:

cryptsetup --readonly luksOpen /dev/sdb1 sdb1

После того, как я открыл устройство как только для чтения, могу ли я позже переназначить его на чтение-запись? Очевидно, я имею в виду назначение его на чтение-запись без предварительного закрытия, а затем его повторного открытия. Могу ли я переназначить его без необходимости снова вводить пароль?

Если это невозможно, то это просто потому, что cryptsetup не поддерживает это, или есть какой-то более фундаментальный уровень?

решение1

Похоже, это невозможно с помощью cryptsetupкоманды. К сожалению, cryptsetupесть несколько таких неизменяемых флагов... --allow-discardsтакже один из них. Если это не было установлено при открытии контейнера, вы не сможете добавить это позже.

По крайней мере, не с cryptsetupкомандой. Однако, поскольку cryptsetupсоздает обычные цели Device Mapper, вы можете прибегнуть к 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флага к существующему отображению криптографии аналогичен — вам нужно перезагрузить таблицу, содержащую этот флаг. Однако файловая система, которая уже обнаружила отсутствие поддержки discard, может не убедить повторно обнаружить это на лету. Так что неясно, насколько это практично.


Тем не менее, если у вас нет очень веской причины не делать этого, вам следует придерживаться повторного открытия с помощью обычных cryptsetupкоманд, даже если это означает размонтирование и повторный ввод парольной фразы. Это безопаснее во всех отношениях и, что более важно, не обходит концепцию безопасности LUKS.

решение2

Невозможно изменить режим с "только чтение" на "чтение-запись" после открытия тома. Я не вижу никаких опций в исходном коде cryptsetup, чтобы сделать это.

Связанный контент