Содержание

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