
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, чтобы сделать это.