Это старая версия документа.
Содержание
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
Использование контейнера
Если уж мы этим занялись, сделаем «кнопку» и «раскрасим» ее подобающим образом. Мы же не будем работать с контейнером из командной строки? Выбираем любую приглянувшуюся нам картинку в /usr/share/app-install/icons/ - там их больше 2000, например, cryptkeeper.png и копируем к себе в профиль
cp /usr/share/app-install/icons/cryptkeeper.png /home/user/.icons/private.png
Создаем файл-desktop
gedit /home/user/.local/share/applications/private.desktop
такого содержания:
[Desktop Entry] Comment=Private X-Ubuntu-Gettext-Domain=Private X-GNOME-Bugzilla-Bugzilla=GNOME Name=Контейнер Exec=/home/user/keys/privatestatus.sh StartupNotify=true X-Ayatana-Desktop-Shortcuts=GoGo;Off;Starts Terminal=yes Type=Application Categories=GNOME;GTK Icon=/home/user/.icons/private.png [GoGo Shortcut Group] TargetEnvironment=Unity Name=Открываем контейнер Exec=/home/user/keys/privateopen.sh [Off Shortcut Group] TargetEnvironment=Unity Name=Закрываем контейнер Exec=/home/user/keys/privateclose.sh [Starts Shortcut Group] TargetEnvironment=Unity Name=Старт Dropbox Exec=dropbox start
В даше появляется кнопка по имени «Контейнер», выносим ее на панель ланчера.
- По нажатию на нее -выводится сообщение о статусе (состоянии) контейнера
- По ПКМ - описаны 3 действия: -1. Открываем контейнер -2. Закрываем контейнер -3. Старт Dropbox
—-Создадим скрипты для выполнения действий с контейнером. Для проверки статуса - проверяем монтирование. Создаем файл privatestatus.sh
gedit /home/user/keys/privatestatus.sh
Его содержание:
#!/bin/sh if grep -q "private" /proc/mounts; then notify-send -u normal "Контейнер открыт! Занято: "`df -h | grep private | awk '{print $5}'` else notify-send -u normal "Контейнер закрыт" fi
Для открытия - останавливаем службу dropbox и проверяем, не был ли уже открыт контейнер, и открываем.
gedit /home/user/keys/privateopen.sh
Его содержание:
#!/bin/sh dropbox stop if grep -q "private" /proc/mounts; then notify-send -u normal "Контейнер уже был открыт!" else sudo cryptsetup luksOpen /home/user/.private/container.crt -d /home/user/keys/container.key container sudo mount /dev/mapper/container /home/user/private notify-send -u normal "Открытие контейнера выполнено. Занято: "`df -h | grep private | awk '{print $5}'` fi
Для закрытия - проверяем, не был ли уже закрыт контейнер, закрываем и стартуем службу dropbox.
gedit /home/user/keys/privateclose.sh
Его содержание:
#!/bin/sh if grep -q "private" /proc/mounts; then sudo umount /dev/mapper/container sudo cryptsetup luksClose /dev/mapper/container notify-send -u normal "Выполнено закрытие контейнера" dropbox start else notify-send -u normal "Контейнер был неактивен" fi
Даем права на выполнение
sudo chmod +x /home/user/keys/privatestatus.sh sudo chmod +x /home/user/keys/privateopen.sh sudo chmod +x /home/user/keys/privateclose.sh
В завершение, создадим ссылку для помещения в dropbox каталога .private под именем dropboxcript
sudo ln -ds /home/user/.private /home/user/Dropbox/dropboxcript
Все.