Инструменты пользователя

Инструменты сайта

Загрузка не удалась. Возможно, проблемы с правами доступа?

linux:luks

Linux: используем luks для криптоконтейнеров

Отсюда: https://help.ubuntu.ru/wiki/luks_cloud (по ссылке более полная версия!)

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

Особенности

В качестве «контейнера» используется файл. Его размер фиксирован. Возможно изменение размера.
«Внутри» контейнера создается файловая система, любого удобного вам формата.
При использовании - монтируется, как обычный раздел.
Данные сохраняются по блокам, как в обычном файле/файловой системе. То есть :

  • модификация файла внутри контейнера приводит к перезаписи блоков, занимаемых этим файлом, но не всего контейнера;
  • «потеря/порча» одного блока приводит к потере информации «того-что-было-в-этом-блоке», и не более того.
  • при синхронизации контейнера «в облако» - как правило, перезаписывается не весь файл, а «модифицированная часть», что требует малого объема трафика.

В отличие от EncFS

  • «снаружи» не видны общее количество файлов, их размеры и время модификации;
  • изменение размера контейнера требует отдельных действий.

В отличие от Truecript

  • как правило, выше скорость обработки данных (зависит от алгоритма/размера ключа);
  • проще работа с ключами;
  • нет механизма «двойного дна»;
  • возможны проблемы при попытке использования контейнера «из другой ОС»

Создание контейнера

Создаем необходимые каталоги:

mkdir /home/user/keys            # каталог файла-ключа и скриптов. Должен быть недоступен другим пользователям 
mkdir /home/user/.private        # каталог контейнера. В нем хранится криптованный файл-контейнер
mkdir /home/user/private         # точка монтирования. В нем будет содержимое контейнера "в открытом виде"

При необходимости, доустанавливаем пакеты:

sudo apt-get install cryptsetup

и проверяем (должен быть вывод «kernel/drivers/md/dm-crypt.ko»)

modprobe -l |grep dm-crypt

Создаем ключ

dd if=/dev/urandom of=/home/user/keys/container.key bs=512 count=1

Создаем контейнер, файл container.crt, размером 50M

dd if=/dev/urandom of=/home/user/.private/container.crt bs=1M count=50

Размечаем контейнер, как luks-систему с ключом

sudo cryptsetup luksFormat /home/user/.private/container.crt -d /home/user/keys/container.key -c aes-xts-plain64 -s 512

или - без ключа, с набором пароля при каждом открытии контейнера

sudo cryptsetup luksFormat /home/user/.private/container.crt -c aes-xts-plain64 -s 512

Будет предупреждение WARNING! Данные на /home/user/.private/container.crt будут перезаписаны без возможности восстановления. Are you sure? (Type uppercase yes), надо набрать YES.

Параметры полученного контейнера, смотрим

sudo cryptsetup luksDump /home/user/.private/container.crt

«Открываем» контейнер

sudo cryptsetup luksOpen /home/user/.private/container.crt -d /home/user/keys/container.key container

смотрим, появился ли в устройствах, и информация о нем

ls /dev/mapper/
sudo dmsetup info container

Форматируем содержимое контейнера, в данном примере в ext4, с установкой метки и отключением «резерва рута»

sudo mke2fs -t ext4 -O has_journal -L container -m 0 /dev/mapper/container

монтируем и выдаем права пользователю (себе)

sudo mount /dev/mapper/container /home/user/private
sudo chown -hR user:user /home/user/private

Напомним - если мы потеряли файл ключа, надо иметь пароль. Задаем пароль, при этом будут два запроса на его ввод - Введите новый пароль для ключевого слота и Verify passphrase

sudo cryptsetup luksAddKey /home/user/.private/container.crt -d /home/user/keys/container.key

и проверяем «занятые» ключами слоты (их должно быть два, если мы задали ключ и пароль, Key Slot 0: ENABLED и Key Slot 1: ENABLED)

sudo cryptsetup luksDump /home/user/.private/container.crt

Контейнер к работе готов. Отмонтируем и отключаем.

sudo umount /dev/mapper/container 
sudo cryptsetup luksClose /dev/mapper/container
linux/luks.txt · Последние изменения: 2021/02/11 09:20 (внешнее изменение)