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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:luks_cloud [2013/11/17 01:06]
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>​
   * Контейнер к работе готов. Отмонтируем и отключаем.   * Контейнер к работе готов. Отмонтируем и отключаем.
Строка 59: Строка 60:
 sudo cryptsetup luksClose /​dev/​mapper/​container</​code>​ sudo cryptsetup luksClose /​dev/​mapper/​container</​code>​
 ======Использование контейнера ====== ======Использование контейнера ======
-<​note>​Приведено для ubuntu 12.04, сервис dropbox</​note>​+<​note>​Описание изложено для ubuntu 12.04, Unity, сервис dropbox. В приведенных скриптах работа с декриптованым содержимым контейнера выполняется при остановке службы синхронизации. После "​закрытия"​ контейнера - запускается служба синхронизации.</​note>​
 Если уж мы этим занялись,​ сделаем "​кнопку"​ и "​раскрасим"​ ее подобающим образом. Мы же не будем работать с контейнером из командной строки?​ Если уж мы этим занялись,​ сделаем "​кнопку"​ и "​раскрасим"​ ее подобающим образом. Мы же не будем работать с контейнером из командной строки?​
 Выбираем любую приглянувшуюся нам картинку в /​usr/​share/​app-install/​icons/​ - там их больше 2000, например,​ __cryptkeeper.png__ и копируем к себе в профиль Выбираем любую приглянувшуюся нам картинку в /​usr/​share/​app-install/​icons/​ - там их больше 2000, например,​ __cryptkeeper.png__ и копируем к себе в профиль
-<code bash>ср /​usr/​share/​app-install/​icons/​cryptkeeper.png /​home/​user/​.icons/​private.png</​code>​+<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>​ 
  
 ===== Ссылки ===== ===== Ссылки =====
Строка 70: Строка 214:
   * [[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/​|О правильном использовании криптоконтейнеров]]
   * [[http://​forum.ubuntu.ru/​index.php?​topic=233759.0|Обсуждение темы на форуме]]   * [[http://​forum.ubuntu.ru/​index.php?​topic=233759.0|Обсуждение темы на форуме]]
-{{tag>​LUKS cloud безопасность шифрование облако}}+  * [[https://​help.ubuntu.com/​community/​ResizeEncryptedPartitions|ResizeEncryptedPartitions]] 
 +{{tag>​LUKS cloud безопасность шифрование облако ​Подсказки_и_советы HOWTO}}