Dm-crypt/ru

dm-crypt – это система шифрования дисков с использованием платформы ядра crypto API и подсистемы определения устройств. С помощью dm-crypt администраторы могут зашифровать весь диск, логические тома, разделы, а также отдельные файлы.

Подсистема dm-crypt поддерживает структуру Linux Unified Key Setup (LUKS), которая позволяет с помощью различных ключей получать доступ к зашифрованным данным, а также управлять ключами (например, изменять ключи, добавлять дополнительные пароли, и др.) Хотя dm-crypt поддерживает установку без LUKS, данная статья будет в основном посвящена функционалу LUKS, в силу её гибкости, управляемости, а также широкой поддержки в обществе.

Конфигурация
Существует два условия, необходимых для использования dm-crypt:


 * 1) Настройка ядра Linux
 * 2) Установка пакета

Конфигурация ядра
Для использования dm-crypt необходимо настроить несколько параметров конфигурации.

Прежде всего, должна быть включена поддержка инфраструктуры device mapper и crypt target:

Далее, ядро Linux должно поддерживать набор криптографических функций, которые администратор хочет использовать для шифрования. Они могут быть найдены в разделе Cryptographic API:

Если также будет зашифрована корневая файловая система, необходимо создать initramfs, в которой корневая файловая система будет расшифрована перед монтированием. Таким образом, требуется поддержка initramfs:

При использовании опции шифрования tcrypt (режим совместимости с TrueCrypt/tcplay/VeraCrypt) в ядро также должны быть добавлены следующие компоненты. В противном случае, cryptsetup будет выходить с ошибками "device-mapper: reload ioctl failed: Invalid argument" и "Kernel doesn't support TCRYPT compatible mapping".

Установка Cryptsetup
Пакет предоставляет команду, которая используется для открытия или закрытия зашифрованного хранилища, а также для управления паролями и связанными с ними ключами.

Benchmark
provides a benchmarking tool which will help to decide which setup to choose. The output depends on kernel settings as well as USE flags and destination (HDD, SSD etc.).

Ключевой файл или пароль
Чтобы начать работу с зашифрованным хранилищем, администратор должен решить, какой метод использовать для создания ключа шифрования. Если используется, можно выбрать пароль или ключевой файл. Ключевой файл может быть любым файлом, но рекомендуется использовать надлежащим образом защищённый (ввиду того, что доступ к ключевому файлу подразумевает доступ к зашифрованным данным) файл с случайными данными.

Для создания ключевого файла, можно использовать команду :

В следующих разделах мы будем указывать каждую команду для обоих случаев: пароля и ключевого файла. Конечно, необходим только один метод.

Создание платформы зашифрованного хранилища
Чтобы создать платформу защищённого хранилища (которое может быть диском, разделом, файлом, ...) вызовите команду с параметром.

К примеру, что использовать как носитель зашифрованных данных:

Для использования ключевого файла вместо пароля:

Параметр  сообщает, какую длину ключа использовать для настоящего ключа шифрования (который, в отличие от пароля или ключевого файла, используется непосредственно для доступа к данным).

Открытие зашифрованного хранилища
Чтобы открыть зашифрованное хранилище (т.е. сделать реальные данные доступными благодаря незаметной расшифровке), используйте параметр.

Если используется ключевой файл, команда будет выглядеть таким образом:

Когда команда успешно завершится, станет доступным новый файл устройства.

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

Когда файловая система создана, или форматирование уже было произведено в прошлом, файл устройства может быть смонтирован:

Закрытие зашифрованного хранилища
Чтобы закрыть зашифрованное хранилище (т.е. убедиться, что реальные данные больше не доступны благодаря незаметной расшифровке), используйте параметр :

Конечно, убедитесь, что устройство больше не используется:

Управление ключами LUKS
Ключи LUKS используются для доступа к реальным ключам шифрования. Они хранятся в слотах в заголовке (зашифрованного) раздела, диска или файла.

Вывод списка слотов
С параметром  может быть отображена информация о зашифрованном разделе, диске или файле. Она содержит слоты:

В приведённом выше примере использованы два слота. Заметьте, что  не разглашает ничего секретного – она просто отображает содержимое заголовка LUKS. Чтобы вызвать, нет необходимости предоставлять ключи расшифровки.

Добавление ключевого файла или пароля
Чтобы добавить дополнительный ключевой файл или пароль для доступа к зашифрованным данным, используйте параметр :

Чтобы использовать ключевой файл для открытия ключа (но всё же, с добавлением пароля):

Если необходимо добавить ключевой файл (скажем, ):

Или, чтобы использовать первый ключевой файл, для открытия основного ключа:

Удаление ключевого файла или пароля
С помощью параметра  можно удалить ключевой файл или пароль (таким образом, их больше невозможно будет использовать для расшифровки хранилища):

Или для удаления ключевого файла:

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

Опустошение слота
Предположим, если пароль или ключевой файл больше неизвестен, слот может быть освобождён. Конечно, для этого требуется заранее знать, в каком слоте находится ключевой файл или пароль.

К примеру, для опустошения 2 слота (который является третьим слотом, поскольку слоты нумеруются, начиная с 0):

Данная команда перед продолжением запросит действительный пароль. Или можно воспользоваться ключевым файлом:

Автоматизация монтирования зашифрованных файловых систем
До сих пор статья была посвящена настройке и монтированию/демонтированию файловых систем вручную. Существует init-скрипт, который автоматизирует расшифровку и монтирование зашифрованных файловых систем.

Настройка dm-crypt
Отредактируйте файл и добавьте туда записи для каждой файловой системы. Поддерживаемые записи хорошо описаны в файле, приведённом в примере ниже:

Настройка fstab
Следующий шаг – настроить для автоматического подключения (расшифрованных) файловых систем, когда они становятся доступными. Для начала, рекомендуется узнать UUID расшифрованной (монтированной) файловой системы:

Затем, соответственно обновите файл :

Добавление init-скрипта в bootlevel
Не забудьте добавить init-скрипт для запуска во время загрузки:

Make decrypted device nodes visible
If you have decrypted/unlocked a device before the services were started for example your root disk in an with an initramfs then it's possible that the mapped device is not visible. In this case you can run the following to recreate it.

Монтирование томов TrueCrypt/tcplay/VeraCrypt
Замените контейнер-для-монтирования на файл устройства из или путь к файлу, который хотите открыть. После успешного открытия в появится незашифрованное устройство, которое можно монтировать как и любое нормальное устройство.

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

Когда закончите, размонтируйте том и закройте контейнер, используя следующую команду:

External resources

 * The cryptsetup FAQ hosted on GitLab covers a wide range of frequently asked questions.