Skip to content

Latest commit

 

History

History
259 lines (193 loc) · 22.4 KB

README.ru.md

File metadata and controls

259 lines (193 loc) · 22.4 KB

DM-Crypt-Helper-Scripts

English readme

Дополнительные скрипты монтирования для контейнеров DM-Crypt

Скрипт для удобного создания / подключения контейнеров dm-crypt через sudo и создания шифрованных файлов подкачки.

Используйте одну команду вместо трёх, с меньшим риском ошибок. Монтируйте ваши крипто-контейнеры под LiveCD в один простой шаг. Скрипт делает проверки на опасность действий.

Установка и системные требования

0). Программы cryptsetup, sed, basename, realpath, losetup, dd, mkfs*, shred, touch и bash должны быть (обычно стоят по умолчанию) На ряде систем cryptsetup нужно поставить вручную (например Ubuntu 18 минимальная): apt-get install cryptsetup-bin

Дополнительно можно установить утилиту sudo и пакеты поддержки других файловых систем (btrfs, xfs, ntfs, exfat, reiserfs).

1). Скачайте требуемый скрипт на локальную систему, например в /opt (запускать его можно откуда угодно), разрешите исполнение:

cd /opt

wget https://github.com/Aminuxer/DM-Crypt-Helper-Scripts/raw/master/_dmc.sh

chmod +x _dmc.sh

Вместо wget можно использовать curl или fetch.

2). Рекомендуемый шаг. Использование dm-crypt требует высоких прав доступа (root). Создайте правило sudo для запуска скрипта от непривилегированного пользователя user1:

# vi /etc/sudoers.d/myscripts-example

user1 ALL=(root) NOPASSWD: /opt/_dmc.sh

Без этого шага (например в livecd типа knoppix) управление контейнерами будет требовать root-прав.

3). Запуск скрипта через sudo: $ sudo /opt/_dmc.sh

При запуске без параметров показывается подсказка:

Usage: ./_dmc.sh <Path to Dm-Crypt container> [start|stop|create|make_loops] [Mount point] [cipher]
    Example: ./_dmc.sh ~/mysecrets.bin create    - make new in file
             ./_dmc.sh /dev/md0 create           - on RAID
             ./_dmc.sh ~/mysecrets.bin           - switch
             ./_dmc.sh ~/mysecrets.bin stop      - force stop
    create - make new container. Existing file don't touch for safety
    make_loops - create new loop-devices in /dev

Создание нового крипто-контейнера.

Можно создать контейнер в новом файле или на неиспользуемом блочном устройстве (физическом диске, разделе, LVM-томе или массиве RAID). Скрипт не трогает существующие файлы или смонтированные/используемые устройства при вызове метода create. Также делаются проверки, что используемое устройство типа /dev/(md*|sd*|mapper|lvm*) не смонтированы и не содержат структур RAID / LVM / ZFS.

В этом случае вы увидите сообщения типа "file /var/tmp/fs1.bin exist, usage existing files denied.", "Device mounted" или "Device in RAID / LVM / ZFS".

Запустите скрипт с указанием полного пути и имени нового файла-контейнера и следуйте диалогу:

Контейнер в обычном файле : $ sudo /opt/_dmc.sh /var/tmp/fs1.bin create

На 9-м разделе физического диска sdg: $ sudo /opt/_dmc.sh /dev/sdg9 create

На свободном логическом томе LVM (LV): $ sudo /opt/_dmc.sh /dev/mapper/free-LVM-LogicalVolume create

----- CREATE NEW CryptoContainer ---------------------
You start to CREATE dm-crypt container. Continue (Yes/No)? Yes
OK, continue...
Enter internal volume label for new container: MyNewContainer1
Enter volume size (1048576, 1024K, 100M, 2G): 42M
Supported filesystems on your machine:
------------------------------------------
btrfs     ext2      ext3     ext4     fat
msdos     ntfs      vfat     xfs
------------------------------------------
Enter filesystem type (from list above): ext4
Fast fill container
0+0 records in
0+0 records out
0 bytes copied, 7.7594e-05 s, 0.0 kB/s
Enter passphrase for /dev/loop2: EnterYouStrongUberMegaPaSsW0rD~PhRAZe+Here
Shreding [42M] space on [/var/tmp/fs1.bin] ...   (please wait)
Formatting cryptocontainer...
mke2fs 1.44.6 (5-Mar-2019)
Creating filesystem with 43008 1k blocks and 10752 inodes
Filesystem UUID: 340138b4-b630-47c2-852c-bf57d3d7ca99
Superblock backups stored on blocks:
        8193, 24577, 40961

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Label :: [fs1.bin] ; /var/tmp/fs1.bin --> /run/media/MyNewContainer1 ; [on /dev/loop2], SIZE: [42M]
----- New CryptoContainer mounted succesfully ! ---------

Для физических устройств вводить размер не надо - скрипт сам его определит. После этого ваш контейнер сразу будет смонтирован и готов к использованию.

Запуск / монтирование криптоконтейнера

Запустите скрипт с полным путём к контейнеру и указанием метода start:

$ sudo /opt/_dmc.sh /var/tmp/fs1.bin start

Корректное подключение выглядит вот так:

----- Mount CryptoContainer [/var/tmp/fs1.bin] ---------------------
Cipher options: aes-xts-essiv:sha256 --hash sha512 --key-size 512
Enter passphrase for /dev/loop3: EnterYouStrongUberMegaPaSsW0rD~PhRAZe+Here
Command successful.
FS in container: ext4
Label :: [fs1.bin] ; /var/tmp/fs1.bin --> /run/media/MyNewContainer1 ; [on /dev/loop3]
----- Mount CryptoContainer Complete ! ---------

Парольную фразу надо вводить "одной строкой", без опечаток, ошибок или попыток редактирования. Вводимые символы не отображаются. Любые ошибки в парольной фразе будут приводить к ошибкам монтирования.

Остановка и отключение криптоконтейнера.

Запустите скрипт с полным путём к контейнеру и указанием метода stop:

$ sudo /opt/_dmc.sh /var/tmp/fs1.bin stop

Корректное отключение выглядит вот так:

----- Unmount CryptoContainer [/var/tmp/fs1.bin] --------------------
losetup: /dev/loop1
Check mount-point [/run/media/MyNewContainer1] and try remove empty dir
!! Remove mount-point /run/media/MyNewContainer1 !!
removed directory '/run/media/MyNewContainer1'
----- Unmount CryptoContainer Complete ! ---------

Если из внутренней ФС контейнера будет открыт любой файл во внешних программах, скрипт остановится с сообщением об ошибке размонтирования. Закройте все открытые с контейнера файлы и попробуйте снова.

Частые вопросы

  • Что случится, если я запущу команду $ sudo /opt/_dmc.sh /var/tmp/fs1.bin - только с путём к уже существующему файлу ?

    • Скрипт постарается определить текущее состояние и выполнит предполагаемое действие. Подключенный контейнер будет отключён, отключенный - попробует подключить через запрос парольной фразы.
  • Могу я напрямую использовать блочные устройства или разделы типа /dev/sdh или /dev/sdg2 вместо файлов ?

    • Да. Но скрипт разрешает это делать только на отключённых устройствах, не включённых в RAID / LVM / ZFS. Работа по смонтированным устройствам деструктивна и заблочена во избежание потери данных. В любом случае, всё под вашу ответственность; Я проверил этот сценарий в Fedora и Ubuntu, всё работает нормально.
  • Что за метод make_loops ?

    • Этот метод для некоторых старых Live-систем, где петельные блочные устройства не создавались при загрузке. Использует утилиту mknod. Может быть полезен, если вы подключаете очень много контейнеров.
  • Скрипт может испортить мой обычный файл, если я попробую его подключить ? например _dmc.sh dsc0001.jpg ?

    • Нет. Вы не сможете придумать пароль, который конвертнёт вашу фотку в образ файловой системы с помощью AES =) Это фантастика. Скрипт не сможет найти файловую систему и откатит все изменения. Файл не будет затронут. Но вы должны делать бэкапы в любом случае =].
  • Как подключить контейнер по другому пути, например, куда-то под /tmp/..., /home/... или ещё куда ?

    • Используйте третий параметр: $ sudo /opt/_dmc.sh /var/tmp/fs1.bin start /tmp/mountpoint
  • Какие файловые системы можно использовать ?

    • Для размещения самого контейнера - любые. Проверьте ограничения на максимальный размер и символы в имени файла (актуально только для старых систем MS типа FAT).
    • Для ФС внутри контейнера - все стандартные, умеющие метки и установленные у вас - ext*, fat*, ntfs, btrfs, xfs, reiser
    • Другие ФС могут быть добавлены в будущем, в зависимости от многих причин.
  • У меня контейнер без метки тома. Насколько это важно ?

    • Не важно. Контейнер с ФС без метки будет смонтирован в путь типа /run/media/Disk_NoLABEL__fs1.bin при старте. Подключите контейнер, посмотрите имя устройства с помощью df и смените метку ддя /dev/mapper/fs1.bin с помощью e2label или подобной утилиты. Некоторые ФС сперва потребуется отмонтировать. Испольуйте umount, меняйте метку, потом _dmc.sh ... stop Метка применится при следующем подключении.
  • Можно монтировать несколько разных копий одного и того же контейнера ?

    • Только аккуратно; Используйте различный точки монтирования: ./_dmc.sh /tmp/copy1/disk.dmc start /tmp/mounpoint1 ./_dmc.sh /tmp/copy2/disk.dmc start /tmp/mounpoint2 С версии 2021-10-26 скрипт предотвращает монтирование одного и того же файла в несколько loop-устройств. С версии 2021-11-12 поддерживается монтирований копий одного и того же контейнера. При простом монтировании без указания точки монтирования каталоги будут подменяться (не рекомендую так делать).
  • Могу я делать fsck и иные сервисные процедуры над файловой системой в контейнере ?

    • Да. Подключите контейнер с правильным паролем скриптом _dmc.sh. Посмотрите имя устройства с помощью команды df или mount. Отмонтируйте ФС с помощью команды umount (НЕ скриптом !!). Запустите fsck на /dev/mapper/<virtual.device.name> Окончательно отключите контейнер вызовом скрипта script с параметром stop.
  • Что за четвёртый параметр - Cipher ?

    • Если у вас есть другие или старые контейнеры dm-crypt, использующие другие шифры, вы можете использовать этот параметр для их подключения. Синтаксис такой же, как у параметра -c для cryptsetup.
  • Можно ли обновлять скрипт до новой версии ?

    • Да. Отключите все контейнеры, сделайте бэкап и скачайте скрипт поверх старого. Если не менялся метод шифрования - всё должно работать. В ином случае, используйте четвёртый парамтер (CIPHER) для указания типа шифра. Если вы обновили скрипт, а контейнеры уже были подключены - ничего страшного, просто сделайте umount вручную.
  • Почему используется набор aes-xts-essiv:sha256 --hash sha512 --key-size 512 ?

    • Этот метод пригоден для полнодискового шифрования, стоек ко многим атакам и поддерживается почти во всех Linux-дистрибутивах. Также шифры AES имеют аппаратное ускорение на современных процессорах - это важно для больштих контенйеров (например, для хранения образов виртуальных машин)
    • Для более глубокого понимания требуется более глбокое изучение криптографии: https://wikipedia.org/wiki/Disk_encryption_theory

    Дисковое шифрование одна из сложнейших задач криптографии - слишком много ньюансов надо решать.

  • Как посмотреть список поддерживаемых шифров ?

  • Могу я изменить размер контейнера, сменить пароль или метод шифрования ?

    • Этим скриптом - нет. Можете создать новый контейнер и скопировать файлы с помощью cp / mc / rsync. Ресайз контейнера возможен, но пока делается руками с помощью dd / cryptsetup resize / resizefs.

    Чтобы это провернуть на существующем контейнере, вы должны хорошо понимать, как работает dm-crypt, петлевые устройства, блочные устройства и файловые системы в Linux. Будьте крайне аккуратны; Сделайте бэкапы ДО начала работ; Прочитайте документацию:

    Проверьте результат и сделайте ещё один бэкап;

  • Что насчёт шифрованной подкачки ?

    • Аналогично контейнерам, но используйте скрипт _swap.sh, парольная фраза будет случайной при каждом старте, точка монтирования не нужна, первые 512 байт не используются.
    • Это древний скрипт, и в нём нет многих проверок. Используйте аккуратно.
  • Могу я использовать несколько ключей / пользователей ?

    • Нет. Этот скрипт работает с обычным dm-crypt. Используйте LUKS для более сложных случаев.
  • Могу я разместить один контейнер в другом контейнере ? Это отрицаемое шифрование ?

    • Вы можете поместить контейнер в другой контейнер (как и любой обычный файл), но это тестировалось не так плотно. Как минимум, вы должны использовать различные имена файлов для контейнеров и различные метки внутренних файловых систем. Это НЕ отрицаемое шифрование. Отрицаемое шифрование требует более сложного софта типа TrueCrypt или использования стеганографических утилит типа steghide
  • Могу я разместить скрипты или контейнеры на съёмных устройствах ?

    • Без проблем. Но вам возможно потребуются root-права (а применять правила sudo для съёмных дисков опасно), запускать скрипт в виде параметра к bash (ФС без атрибута исполнимости +x), скорость работы может быть меньше. Этот скрипт работает в таких Live-системах, как Knoppix, при запуске с раздела KNOPPIX-DATA.
  • Как переместить мои ключи PGP / SSH, биткоин-кошельки / генератор TOTP / приватные документы внутрь контейнера ?

    • Убедитесь, что вы как следует запомнили парольную фразу. Дважды проверьте; Проверьте, что у вас есть БЭКАПЫ. Если вы забудете пароль, его почти невозможно восстановить; Брутфорс (взлом паролей перебором) dm-crypt весьма сложен.
    • Создайте подкаталоги в контейнере и СКОПИРУЙТЕ ценные данные в файловую систему контейнера.
    • Зачистите ценные данные с помощью shred на исходных нешифрованных томах; Обычное rm или удаление по кнопкам Del/F8 уязвимо для форензики и утилит восстановления данных. Для диcков SSD, удалите зачищенные shred-ом файлы и запустите процедуру TRIM командой fstrim.
    • Создайте символические ссылки такого вида: ln -s /media/MyNewContainer1/SSH/id_rsa ~/.ssh/id_rsa (~/.ssh/id_rsa -> /media/MyNewContainer1/SSH/id_rsa)
    • Переместите ваши ценные приложения типа генератора TOTP (https://github.com/Aminuxer/Other-nix-Scripts/blob/master/totp.py) в подкаталог внутри контейнера.
  • Насколько большим / маленьким может быть криптоконтейнер dm-crypt ?

    • Почти любым, но зависит от файловых систем. Я создавал мелкие контейнеры на 100 Кб с fat или ext2 внутри; Большие контейнеры на 200-300 Gb c ext4 / xfs тоже без проблем - если ваше оборудование исправно, проблем не наблюдалось. С версии 2021-10-30 в диалоге создания добавлены большие размерности - KMGTPEZY =) Я рекомендую хранить внутри контейнеров только реально критичные данные, чтобы размер контейнера был удобен для обслуживания / переноса / бэкапов / восстановления / архивирования; P.S. Архивирование считается плохой идеей с точки зрения криптографии; Но в большинстве случаев доступность и целостность предпочтительнее.
  • Могу я использовать этот скрипт на макинтоше с MacOS ?

    • Нет. MacOS использует другие утилиты типа hdiutil и более древние версии coreutils. Теоретически возможно, но мне это не интересно. Вы может форкнуть репозиторий.