Создание и использование в "облаке" криптоконтейнера LUKS (dm-crypt) Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:luks_cloud [2013/11/17 00:57]
[Создание контейнера]
wiki:luks_cloud [2020/05/07 19:26] (текущий)
[Ссылки]
Строка 4: Строка 4:
  
 ======Особенности ====== ======Особенности ======
-  * В качестве "​контейнера"​ используется файл. Его размер ​"фиксирован".+  * В качестве "​контейнера"​ используется файл. Его размер фиксирован. Возможно изменение размера.
   * "​Внутри"​ контейнера создается файловая система,​ любого удобного вам формата.   * "​Внутри"​ контейнера создается файловая система,​ любого удобного вам формата.
-  * При использовании - монтируется ​"как обычный раздел".+  * При использовании - монтируетсякак обычный раздел.
 ---- ----
 Данные сохраняются по блокам,​ как в обычном файле/​файловой системе. То есть : Данные сохраняются по блокам,​ как в обычном файле/​файловой системе. То есть :
   * модификация файла внутри контейнера приводит к перезаписи блоков,​ занимаемых этим файлом,​ но не всего контейнера;​   * модификация файла внутри контейнера приводит к перезаписи блоков,​ занимаемых этим файлом,​ но не всего контейнера;​
   * "​потеря/​порча"​ одного блока приводит к потере информации "​того-что-было-в-этом-блоке",​ и не более того.   * "​потеря/​порча"​ одного блока приводит к потере информации "​того-что-было-в-этом-блоке",​ и не более того.
-  * при синхронизации контейнера "в облако"​ - как правило,​ перезаписывается не весь файл, а "​модифицировання часть",​ что требует малого объема трафика.+  * при синхронизации контейнера "в облако"​ - как правило,​ перезаписывается не весь файл, а "​модифицированная часть",​ что требует малого объема трафика.
 ---- ----
 В отличие от EncFS  В отличие от EncFS 
   * "​снаружи"​ не видны общее количество файлов,​ их размеры и время модификации;​   * "​снаружи"​ не видны общее количество файлов,​ их размеры и время модификации;​
-  * проблематично ​изменить "размер контейнера", ​если весь контейнер "​занят".+  * изменение размера контейнера ​требует отдельных действий.
 ---- ----
 В отличие от Truecript ​ В отличие от Truecript ​
Строка 24: Строка 24:
 ======Создание контейнера ====== ======Создание контейнера ======
   * Создаем необходимые каталоги:​   * Создаем необходимые каталоги:​
-<code bash>md /​home/​user/​keys ​           # каталог файла-ключа и скриптов. Должен быть недоступен другим пользователям  +<code bash>mkdir /​home/​user/​keys ​           # каталог файла-ключа и скриптов. Должен быть недоступен другим пользователям  
-md /​home/​user/​.private ​       # каталог контейнера. В нем хранится криптованный файл-контейнер +mkdir /​home/​user/​.private ​       # каталог контейнера. В нем хранится криптованный файл-контейнер 
-md /​home/​user/​private ​        # точка монтирования. В нем будет содержимое контейнера "в открытом виде"</​code>​+mkdir /​home/​user/​private ​        # точка монтирования. В нем будет содержимое контейнера "в открытом виде"</​code>​
   * При необходимости,​ доустанавливаем пакеты: ​   * При необходимости,​ доустанавливаем пакеты: ​
 <code bash>​sudo apt-get install cryptsetup</​code>​ <code bash>​sudo apt-get install cryptsetup</​code>​
Строка 39: Строка 39:
 или - без ключа, с набором пароля при каждом открытии контейнера или - без ключа, с набором пароля при каждом открытии контейнера
 <code bash>​sudo cryptsetup luksFormat /​home/​user/​.private/​container.crt -c aes-xts-plain64 -s 512</​code>​ <code bash>​sudo cryptsetup luksFormat /​home/​user/​.private/​container.crt -c aes-xts-plain64 -s 512</​code>​
-Параметры контейнера,​ смотрим+Будет предупреждение __WARNING! Данные на /​home/​user/​.private/​container.crt будут перезаписаны без возможности восстановления. Are you sure? (Type uppercase yes)__, надо набрать YES. 
 +  * Параметры ​полученного ​контейнера,​ смотрим
 <code bash>​sudo cryptsetup luksDump /​home/​user/​.private/​container.crt</​code>​ <code bash>​sudo cryptsetup luksDump /​home/​user/​.private/​container.crt</​code>​
   * "​Открываем"​ контейнер   * "​Открываем"​ контейнер
Строка 46: Строка 47:
 <code bash>ls /​dev/​mapper/​ <code bash>ls /​dev/​mapper/​
 sudo dmsetup info container</​code>​ sudo dmsetup info container</​code>​
-Форматируем содержимое контейнера,​ с установкой метки и отключением "​резерва рута"​+Форматируем содержимое контейнера, в данном примере в ext4, с установкой метки и отключением "​резерва рута"​
 <code bash>​sudo mke2fs -t ext4 -O has_journal -L container -m 0 /​dev/​mapper/​container</​code>​ <code bash>​sudo mke2fs -t ext4 -O has_journal -L container -m 0 /​dev/​mapper/​container</​code>​
 монтируем и выдаем права пользователю (себе) монтируем и выдаем права пользователю (себе)
 <code bash>​sudo mount /​dev/​mapper/​container /​home/​user/​private <code bash>​sudo mount /​dev/​mapper/​container /​home/​user/​private
 sudo chown -hR user:user /​home/​user/​private</​code>​ sudo chown -hR user:user /​home/​user/​private</​code>​
-  * Напомним - если мы потеряли файл ключа, надо иметь пароль. Задаем пароль:+  * Напомним - если мы потеряли файл ключа, надо иметь пароль. Задаем пароль, при этом будут два запроса на его ввод - __Введите новый пароль для ключевого слота__ и __Verify passphrase__
 <code bash>​sudo cryptsetup luksAddKey /​home/​user/​.private/​container.crt -d /​home/​user/​keys/​container.key</​code>​ <code bash>​sudo cryptsetup luksAddKey /​home/​user/​.private/​container.crt -d /​home/​user/​keys/​container.key</​code>​
-и проверяем "​занятые"​ ключами слоты (их должно быть два, если мы задали ключ и пароль)+и проверяем "​занятые"​ ключами слоты (их должно быть два, если мы задали ключ и пароль, __Key Slot 0: ENABLED__ и __Key Slot 1: ENABLED__)
 <code bash>​sudo cryptsetup luksDump /​home/​user/​.private/​container.crt</​code>​ <code bash>​sudo cryptsetup luksDump /​home/​user/​.private/​container.crt</​code>​
   * Контейнер к работе готов. Отмонтируем и отключаем.   * Контейнер к работе готов. Отмонтируем и отключаем.
 <code bash>​sudo umount /​dev/​mapper/​container ​ <code bash>​sudo umount /​dev/​mapper/​container ​
 sudo cryptsetup luksClose /​dev/​mapper/​container</​code>​ sudo cryptsetup luksClose /​dev/​mapper/​container</​code>​
 +======Использование контейнера ======
 +<​note>​Описание изложено для ubuntu 12.04, Unity, сервис dropbox. В приведенных скриптах работа с декриптованым содержимым контейнера выполняется при остановке службы синхронизации. После "​закрытия"​ контейнера - запускается служба синхронизации.</​note>​
 +Если уж мы этим занялись,​ сделаем "​кнопку"​ и "​раскрасим"​ ее подобающим образом. Мы же не будем работать с контейнером из командной строки?​
 +Выбираем любую приглянувшуюся нам картинку в /​usr/​share/​app-install/​icons/​ - там их больше 2000, например,​ __cryptkeeper.png__ и копируем к себе в профиль
 +<code bash>cp /​usr/​share/​app-install/​icons/​cryptkeeper.png /​home/​user/​.icons/​private.png</​code>​
 +Создаем файл-desktop
 +<code bash>​gedit /​home/​user/​.local/​share/​applications/​private.desktop</​code>​
 +такого содержания:​
 +<code bash>​[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;​GoPass;​Off;​Starts
 +Terminal=false
 +Type=Application
 +Categories=GNOME;​GTK
 +Icon=/​home/​user/​.icons/​private.png
 + 
 +[GoGo Shortcut Group]
 +TargetEnvironment=Unity
 +Name=Открываем контейнер
 +Exec=/​home/​user/​keys/​privateopen.sh
 +
 +[GoPass Shortcut Group]
 +TargetEnvironment=Unity
 +Name=Открываем с паролем
 +Exec=/​home/​user/​keys/​privateopen2.sh
 + 
 +[Off Shortcut Group]
 +TargetEnvironment=Unity
 +Name=Закрываем контейнер
 +Exec=/​home/​user/​keys/​privateclose.sh
 + 
 +[Starts Shortcut Group]
 +TargetEnvironment=Unity
 +Name=Старт Dropbox
 +Exec=dropbox start</​code>​
 +В даше появляется кнопка по имени "​Контейнер",​ выносим ее на панель ланчера. По нажатию на нее -выводится сообщение о статусе (состоянии) контейнера. По ПКМ - выбираем пункт меню: ​
 +  1. Открываем контейнер ​
 +  2. Открываем с паролем
 +  3. Закрываем контейнер ​
 +  4. Старт Dropbox
 +По вызову "​Открываем с паролем"​ - не используется файл-ключ,​ в окне терминала будет выдан запрос на ввод пароля.
 +
 +----Создадим скрипты для выполнения действий с контейнером.
 +Для проверки статуса - проверяем монтирование. Создаем файл privatestatus.sh
 +<code bash>​gedit /​home/​user/​keys/​privatestatus.sh</​code>​
 +Его содержание:​
 +<code bash>#​!/​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</​code>​
 +Для открытия - останавливаем службу dropbox и проверяем,​ не был ли уже открыт контейнер,​ и открываем.
 +//При открытии или проверке статуса,​ если контейнер открыт,​ сообщение дополняется информацией о размере (в процентах) использованного места, например:​ "​Занято:​ 64%"//
 +<code bash>​gedit /​home/​user/​keys/​privateopen.sh</​code>​
 +Его содержание:​
 +<code bash>#​!/​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</​code>​
 +Для открытия с запросом ввода пароля потребуется вызов окна терминала.
 +<code bash>​gedit /​home/​user/​keys/​privateopen2.sh</​code>​
 +Содержание:​
 +<code bash>#​!/​bin/​sh
 +dropbox stop
 +if  grep -q "​private"​ /​proc/​mounts;​ then
 +  notify-send -u normal "​Контейнер уже был открыт!"​
 +else
 +  gnome-terminal --command="/​home/​user/​keys/​privatepass.sh"​
 +fi</​code>​
 +И файл
 +<code bash>​gedit /​home/​user/​keys/​privatepass.sh</​code>​
 +Содержание:​
 +<code bash>#​!/​bin/​sh
 +sudo cryptsetup luksOpen /​home/​user/​.private/​container.crt container
 +sudo mount /​dev/​mapper/​container /​home/​user/​private
 +notify-send -u normal "​Открытие контейнера выполнено. Занято:​ "`df -h | grep private | awk '​{print $5}'​`</​code>​
 +
 +Для закрытия - проверяем,​ не был ли уже закрыт контейнер,​ закрываем и стартуем службу dropbox.
 +<code bash>​gedit /​home/​user/​keys/​privateclose.sh</​code>​
 +Его содержание:​
 +<code bash>#​!/​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</​code>​
 +Даем права на выполнение
 +<code bash>​sudo chmod +x /​home/​user/​keys/​*.sh</​code>​
 +<​note>​Не обязательно именно так располагать каталоги и давать имена. Никто не мешает дать файлу ключа имя /​home/​user/​.icons/​warum.png,​ а контейнеру имя debian_install_QIP.tar.gz,​ и поместить среди иных пакетов.</​note>​
 +В завершение,​ создадим ссылку для помещения в dropbox каталога **.private** под именем **dropboxcript**
 +<code bash>​sudo ln -ds /​home/​user/​.private /​home/​user/​Dropbox/​dropboxcript</​code>​
 +Все.
 +====== Увеличение размера (контейнера) ======
 +Посмотреть,​ сколько места использовано (занято файлами) в нашем контейнере,​ можно так:
 +<code bash>df -h | grep container ​
 +Файл.система ​          ​Размер Использовано ​ Дост Использовано% Cмонтировано в
 +/​dev/​mapper/​container ​    ​43M ​         32M   ​10M ​          75% /​home/​user/​private</​code>​
 +Если заканчивается свободное место, увеличим размер контейнера. Например,​ на 50M.
 +Перед этим - убедимся,​ что "​контейнер закрыт"​.
 +  * Увеличим размер файла-контейнера (на 50M)
 +<code bash>dd if=/​dev/​urandom bs=1M count=50 >> /​home/​user/​.private/​container.crt</​code>​
 +  * Открываем ​
 +<code bash>​sudo cryptsetup luksOpen /​home/​user/​.private/​container.crt -d /​home/​user/​keys/​container.key container</​code>​
 +  * Увеличим размер контейнера (на все добавленное к файлу место)
 +<code bash>​sudo cryptsetup resize container</​code>​
 +  * Проверка файловой системы
 +<code bash>​sudo e2fsck -f /​dev/​mapper/​container</​code>​
 +  * Увеличение размера файловой системы (на все добавленное к контейнеру место)
 +<code bash>​sudo resize2fs -p /​dev/​mapper/​container</​code>​
 +
 +Вывод выглядит так:
 +<code bash>~$ sudo e2fsck -f /​dev/​mapper/​container
 +e2fsck 1.42 (29-Nov-2011)
 +Проход 1: Проверка inodes, блокs, а также размеров
 +Pass 2: Checking каталог structure
 +Pass 3: Checking каталог connectivity
 +Pass 4: Checking reference counts
 +Pass 5: Checking группа summary information
 +container: 14/12288 files (7.1% non-contiguous),​ 6455/49152 blocks
 +
 +~$ sudo resize2fs -p /​dev/​mapper/​container
 +resize2fs 1.42 (29-Nov-2011)
 +Resizing the filesystem on /​dev/​mapper/​container to 100352 (1k) blocks.
 +Begin pass 1 (max = 7)
 +Увеличение таблицы inod'​овXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 +The filesystem on /​dev/​mapper/​container is now 100352 blocks long.</​code>​
 +
 +Монтируем и смотрим.
 +<code bash>​sudo mount /​dev/​mapper/​container /​home/​user/​private
 +df -h | grep container ​
 +Файл.система ​          ​Размер Использовано ​ Дост Использовано% Cмонтировано в
 +/​dev/​mapper/​container ​    ​91M ​         32M   ​58M ​          36% /​home/​user/​private
 +</​code>​
  
  
Строка 65: Строка 213:
   * [[http://​www.xakep.ru/​post/​54794/​default.asp|Особенности национальной конспирации:​ Шифруем диски с помощью LUKS/​dm-crypt,​ TrueCrypt и EncFS]]   * [[http://​www.xakep.ru/​post/​54794/​default.asp|Особенности национальной конспирации:​ Шифруем диски с помощью LUKS/​dm-crypt,​ TrueCrypt и EncFS]]
   * [[http://​dve.jimdo.com/​2010/​10/​27/​%D0%BE-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8-%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BE%D0%B2/​|О правильном использовании криптоконтейнеров]]   * [[http://​dve.jimdo.com/​2010/​10/​27/​%D0%BE-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8-%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BE%D0%B2/​|О правильном использовании криптоконтейнеров]]
-{{tag>​LUKS cloud безопасность шифрование облако}}+  * [[http://​forum.ubuntu.ru/​index.php?​topic=233759.0|Обсуждение темы на форуме]] 
 +  * [[https://​help.ubuntu.com/​community/​ResizeEncryptedPartitions|ResizeEncryptedPartitions]] 
 +{{tag>​LUKS cloud безопасность шифрование облако ​Подсказки_и_советы HOWTO}}