Cryptsetup/LUKS уничтожил мои данные, когда я попытался удалить шифрование. Почему?

awk -F, -vOFS=, '$2 ~ /\.app$/ { for (i = NF + 1; i > 2; --i) $i = $(i-1); $2 = "INVALID" } 1' file >newfile

Это создаст newfileиз file. Команда awkустанавливает разделитель поля ввода и вывода в виде запятой, а затем проверяет значение второго столбца на соответствие регулярному выражению, которое соответствует строке .appв конце значения. Если тест проходит успешно, поля записи сдвигаются вправо на один шаг, освобождая место для строки INVALIDв качестве нового второго поля.

Завершающую строку 1можно заменить на { print }(, так будет выводиться каждая строка ).

С данным примером данных выходной файл будет содержать

DOM,PROJ,APP,USER,DATE,TIME,STATUS
www,test,biz.app,bob,6-1-18,09:33,OK
www,INVALID,biz.app,tony,7-11-17,06:22,ok
1
25.08.2020, 15:57
1 ответ

cryptsetupрасшифровка устройства LUKS2 плохо документирована и включает несколько невероятно плохой выбор дизайна, который поможет вам уничтожить ваши данные.

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

Если вы отметите, тесты для этого используют устройство, созданное с отсоединенным заголовком. Также похоже, что они тестируют только онлайн-расшифровку, хотя команда позволяет автономная расшифровка.

Я протестировал дешифрование для устройства LUKS2 с отсоединенным заголовком, и оно сработало. После расшифровки было обнаружено, что раздел отформатирован в файловой системе ext4.

Обратите внимание, что для cryptsetup было бы тривиально проверить, что устройство уже заголовок и, по крайней мере, предупредить пользователя, что это так. В автономном режиме это может также легко определить, что зашифрованное блочное устройство также было передано в качестве --headerи либо обработайте это изящно, либо откажитесь продолжать. Но это не так.

Расшифровка (возможна только в автономном режиме )работает для LUKS1, но для этого вам не используйте cryptsetup reencrypt --decrypt(, что само по себе сбивает с толку использование ), а вместо этого необходимо использовать отдельную команду с именем cryptsetup-reencrypt. Эта команда поддерживает LUKS1, но не LUKS2, естественно. Что еще хуже, по крайней мере, в Fedora эта команда упакована не как часть cryptsetup, а как отдельный пакет cryptsetup-reencrypt, который не устанавливается по умолчанию.

Резюме:

  • Начиная с 2.3.3,вы не можете напрямую расшифровать диск LUKS2, если не используете отдельный заголовок. Передача устройства с заголовком в качестве Аргумент --headerне вызовет ошибки, и cryptsetup приступит к тихому уничтожению ваших данных.
  • Возможно, вы могли бы преобразовать luks2 в luks1, а затем использовать отдельную команду cryptsetup-reencryptдля расшифровки. Я не проверял это, но это должно работать.

Я пытался сообщить об этой проблеме вверх по течению, но gitlab не позволяет пользователям, которые пытаются зарегистрироваться с некоторой анонимностью.

1
18.03.2021, 23:10

Теги

Похожие вопросы