Как зашифровать файлы в linux с помощью cryptsetup

Обновлено: 04.07.2024

Создание шифрованного тома в Linux Зачастую для хранения важных данных требуется их шифрование. В Linux есть встроенные средства шифрования. Это cryptoloop и dm-crypt. Первое – довольно старое решение, превалировало в версиях ядра 2.4, второе – более предпочтительное, присутствует как правило в ядрах версии 2.6. Их мы и будем рассматривать. То есть настоятельно рекомендую использовать систему с ядром ветки 2.6. Во времена ветки 2.4 (особенно старых версий) на территории США действовали патенты на крипто-алгоритмы, по этому в большинстве ядер они небыли включены и добавить их можно только специальными патчами к ядру.

Итак, приступим к созданию шифрованных томов. Предположительно что жесткий диск вы уже подготовили. Рекомендуется статья Создание программного RAID в Linux, а так же документации или статьи по

целиком на разделе LVM-партиции. Комплекс этих мер (RAID+dm-crypt) позволяет создать современную надежную систему хранения важных данных в зашифрованном виде, придавая в то же время уникальную гибкость этой системе и обеспечивая невероятное удобство в работе с ней администратору.

Шифрованные данные принято как правило хранить либо в файле (через loopback устройство) либо делать зашифрованный раздел целиком. Преимущества хранения в файле – легкое перемещение. Рекомендуется для хранения малого количества файлов (конфигурационные файлы, особо важные документы и т.п.). Недостатки – слабая масштабируемость, замедление работы из-за «файловой системы внутри файла на файловой системе». Преимущества хранения на разделе целиком – гибкость (особенно с LVM), удобная интеграция. Плюс вкупе с LVM – вы получаете все прелести «резиновых», зеркальных, переносимых и других LVM-томов, только уже в зашифрованном виде.

Итак, способ хранения выбрали. Это либо хранения шифрованной файловой системы внутри отдельного файла, либо шифрование тома целиком (я лично рекомендую последний способ вкупе с LVM).

Способ: Хранение шифрованных данных в файле

Что необходимо проделать, для хранения шифрованных данных в одном файле

Шаг 1. Создаем файл

Создаем сам файл, на котором будет храниться шифрованная файловая система

Шаг 2. Забиваем файл случайными данными

Заполняем его случайными данными, чтобы сложнее было дешифровать

в данном случаи мы указали размер в 500Мб.

Шаг 3. Подгружаем модули

Подгружаем нужные модули:

(aes - быстрый алгоритм шифрования, можно использовать blowfish, des и пр. - см. раздел Cryptographic options ядра)

Шаг 4. Создаем loopback устройство

Создаем loopback устройство из файла:

наше устройство теперь называется /dev/loop0, а находится оно в файле /var/db/file

Шаг 5. Создаем шифрованный том

Создаем шифрованный том из устройства /dev/loop0

шифрованный том в этом примере будет называться mycrypt

Шаг 6. Форматируем файловую систему

Все. После этих операций в устройстве /dev/mapper/mycrypt находится файловая система с шифрованными данными. Ее уже можно монтировать / писать на нее / размонтировать.

Шаг 7. Монтируем

Шаг 8. Размонтируем

Способ: Хранение шифрованных данных на отдельной партиции LVM

Что необходимо проделать для хранения данных на шифрованной партиции LVM:

Шаг 1. Создаем партицию

в данном случаи мы задали размер 2Гб для тома с именем storage в группе vg. Подробнее в документации по LVM2.

Шаг 2. Подгружаем модули

Подгружаем нужные модули:

(aes - быстрый алгоритм шифрования, можно использовать blowfish, des и пр. - см. раздел Cryptographic options ядра)

Шаг 3. Создаем шифрованный том

Создаем шифрованный том из устройства /dev/vg/storage

шифрованный том в этом примере будет называться mycrypt

Шаг 4. Форматируем файловую систему

Все. После этих операций в устройстве /dev/mapper/mycrypt находится файловая система с шифрованными данными. Ее уже можно монтировать / писать на нее / размонтировать.

Шаг 5. Монтируем

Шаг 6. Размонтируем

О LUKS

Таким образом при смене пароля - меняется только ваш ключ, а тот ключ с которым был зашифрован раздел - остается неизменным. Следовательно для смены пароля не нужно перешифровывать весь том.

LUKS использует улучшенную версию программы cryptsetup, и обладает рядом преимуществ по сравнению с ней.

  • возможность смены пароля без перешифрования раздела;
  • возможность иметь несколько паролей;
  • работа с зашифрованными дисками в Windows-системах с помощью FreeOTFE и TrueCrypt

Модули

LUKS использует dm-crypt с которым должно быть скомпилировано ваше ядро. Прежде чем запускать компиляцию модулей проверьте следующие пункты в menuconfig:

- в данном случае dm-crypt скомпилируется в виде модулей.

. также вам потребуются собственно сами криптоалгоритмы. Выберите необходимые через menuconfig, например:

- таким образом выбранные криптоалгоритмы будут собраны в виде модулей.

После компиляции модулей, загрузите их:

Программа

Устанавливаем программу cryptsetup-luks:

Будут доступны команды в виде параметров к cryptsetup, такие к примеру как:

Ключи так же можно хранить в файлах (к примеру на USB-флешке), для этого при добавлении ключа - надо указать к нему путь:

Подготавливаем

И далее по шагам.

Останавливаемся только на 5м (или 3м) шаге - на создании шифрованного тома. Вместо него делаем:

Создаем шифрованный том

Открываем

Далее открываем его:

При этом запросит ваш пароль. После этого шифрованный том будет доступен как /dev/mapper/mycrypt

Форматируем файловую систему

Все. После этих операций в устройстве /dev/mapper/mycrypt находится файловая система с шифрованными данными. Ее уже можно монтировать / писать на нее / размонтировать.

Монтируем

из файла

из устройства

Размонтируем

из файла

из устройства

Меняем пароль / создаем новый

Добавляем слот

Просмотрим информацию о состоянии слотов с паролями:

Добавляем пароль в следующий доступный слот

и будет предложено ввести пароль для нового слота.

Просмотрим информацию о состоянии слотов после добавления:

Как видим, появился новый доступный слот, к примеру:

Теперь доступ к устройству будет по двум паролям - из 0 и из 1 слотов.

Удаляем слот

Если хотим удалить один из слотов (со старым паролем) - выполняем команду:

Тем самым мы удалили 0й слот, просмотрим информацию что получилось:

Будет выведено что-то на подобие:

Следовательно 0-го слота, со старым паролем более не существует, а действительный только 1й слот, с новым паролем. При следующей смене - доступным будет уже 0й слот, и туда ляжет новый пароль. Одновременно можно использовать до 8 слотов.

Вывод

Шифрование раздела

Когда я первый раз это дело настраивал, пользовался статьёй, которая теперь осталась только в google cache: вот тут. Собственно, её же опять и воспользуемся. Ставим необходимые пакеты

На /home у меня отведён целый диск(в eee1000 их два: 8G системный и 32G под данные, который у меня /home). Готовим шифрованный раздел:

тестируем файловую полученный результат:

Вот и всё. Можно перемонтировать(или перезагрузиться и оно само смонтируется куда надо) на /home и наинать заливать backup, дабы получить домашний каталог как до эксперементов. .


Посмотрим, как с помощью системы на базе спецификации Linux Unified Key Setup (LUKS) и утилиты Cryptsetup можно зашифровать флэш-накопители, внешние жёсткие диски и прочие переносные устройства, хранящие дорогую вашему сердцу информацию.

Чаще всего, пользователи рассуждают достаточно просто: накопители в безопасности, пока их никто не украл. Некоторые идут в размышлениях дальше: если для входа в систему нужно знать пароль — злоумышленнику будет сложно получить доступ к данным на украденном диске. Успокаиваясь на этой мысли, они забывают задать себе важный вопрос: к чему именно мешает получить доступ их пароль на самом деле?

Во многих случаях они всего лишь служат для разблокировки пользовательского сеанса. И тогда злоумышленник может забрать данные с диска, не зная пользовательский пароль: он просто обойдётся без разглядывания заставки на вашем рабочем столе.

Особенно хорошо это понимают специалисты, которые сталкивались с последствиями такой недальновидности и сделали соответствующие выводы. Доступ к необходимой информации можно получить, подключив к машине свой внешний загрузочный диск, и после некоторых успешных манипуляций читать диск пользователя, как открытую книгу.

Если время сильно ограничено, злодеи действительно могут украсть накопитель и взять работу на дом. Особенно легко это им удаётся, если он внешний и подключён через USB. В этой статье речь пойдёт о простом инструменте, позволяющем защитить от несанкционированного доступа данные на внешних накопителях. Даже если они уже попали в руки к злоумышленникам. Речь пойдёт о шифровании дисков в операционных системах семейства Linux.

Linux Unified Key Setup (LUKS) — это система шифрования дисков, которая хранит данные в зашифрованном физическом разделе. Зашифровать их помогает модуль ядра dm-crypt, позволяющий создавать виртуальное блочное устройство, с которым взаимодействует пользователь.

Если пользователь хочет записать данные на виртуальное устройство, они на лету шифруются и записываются на диск. Если же он хочет читать с виртуального устройства, данные, хранящиеся на физическом диске, дешифруются и передаются в открытом виде через виртуальный диск пользователю. Данные остаются под защитой и в том случае, когда диск подключают к другому компьютеру.

Шифрование на этапе инсталляции

Проще всего выполнить полное шифрование диска, выбрав соответствующую опцию в процессе установки операционной системы. Большинство современных Linux-дистрибутивов позволяют это сделать. Здесь не буду расписывать в деталях, так как статья посвящена шифрованию внешних накопителей (далее я подробно буду рассматривать именно его).


Изображение: Seth Kenlon, CC BY-SA 4.0

После установки у вас будет зашифрованный диск. Перед загрузкой системы потребуется ввести парольную фразу. Если захотите извлечь диск или получить к нему доступ из другой операционной системы, нужно выполнить дешифрацию с помощью той же системы LUKS.

Шифрование внешних накопителей

Внешние накопители созданы для того, чтобы их подключали к разным устройствам, быстро обмениваясь информацией, таскали с собой по работе и иногда… теряли. Я находил случайно оставленные диски в USB-портах компьютеров в вестибюле отелей, в принтерах бизнес-центров, диски, потерянные в учебных аудиториях и ​​даже в прачечной. Вряд ли их владельцы хотели бы, чтобы кто-то нашёл эти накопители и добрался до рабочих документов или личных архивов.

LUKS вместе с утилитой Cryptsetup позволяет шифровать внешние накопители почти так же просто, как и при инсталляции ОС.

Как это сделать с помощью LUKS

ВАЖНО: внешний накопитель должен быть либо пустым, либо содержать ненужные вам данные. Так что, если оба этих условия не выполнены, нулевым шагом должен стать бэкап.

1. Подключите и найдите свой внешний диск

Я для примера взял небольшую флэшку. Представим, что путь к ней выглядит как /dev/sdX. Утилита lsblk покажет мне вот такую информацию о блочных устройствах:


Всё правильно, моя флэшка обнаружена. Да, это именно она. Я точно знаю, что её размер 1.8Gb. В списке всего один диск (disk) с таким размером (ему соответствует один раздел part).
Я уделяю такое внимание этой, казалось бы, мелочи, так как дисков может быть много. И в случае ошибки на следующем шаге вы сотрёте с другого диска данные, которые вам всё ещё нужны.

2. Очистите диск

На этом шаге я обнуляю таблицу разделов диска:


Это, конечно, необязательно, но я люблю это состояние чистого листа.

3. Отформатируйте диск под LUKS

Используем для этого утилиту Cryptsetup. Её подкоманда luksFormat запускает первый этап создания зашифрованного раздела LUKS (позже мы создадим там файловую систему).
После этого появится предупреждение об удалении всех данных (которые могли всё ещё оставаться на диске). Кроме того, вас попросят придумать и ввести парольную фразу для диска.

4. Откройте LUKS-том

Процесс создания зашифрованного раздела завершён. Теперь для продолжения работы с диском нужно вводить парольную фразу. Открыть произвольный LUKS-том (то есть, подключить виртуальное блочное устройство) можно с помощью подкоманды open.


Я придумал фразу (а точнее, просто пароль в одно слово) «vaultdrive». У вас будет какой-то свой вариант. Чтобы посмотреть список открытых томов, нужно вывести содержимое каталога /dev/mapper:


Чтобы закрыть LUKS-том vaultdrive нужно написать:


После этого он исчезнет из каталога /dev/mapper.

5. Создайте файловую систему

Создайте файловую систему, чтобы иметь возможность хранить свои данные на диске. Я выбрал XFS, но это далеко не единственный вариант: можно использовать, например, ext4 или JFS. И многие другие.

Финал: монтирование LUKS-тома

Можно делать это через терминал. Например, мы хотим использовать для нашей цели директорию /mnt/hd


А рабочий стол KDE, например, позволяет указать диск для монтирования в специальном разделе с настройками. Но и там я тоже должен вводить пароль или парольную фразу, прежде чем произойдёт монтирование.


Изображение: Seth Kenlon, CC BY-SA 4.0

А какие инструменты для шифрования внешних дисков на Linux используете вы? Какие инструменты используете для аналогичных задач на macOS и Windows?


Недорогие VDS для любых задач. Используем новейшее железо, лучший дата-центр в Москве уровня надёжности TIER IV, бесплатно предоставляем защиту от DDoS-атак на любом тарифном плане, который можно создать самостоятельно в течение минуты.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

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

В данной статье я расскажу как создать зашифрованный файл-контейнер размером 1Гб с помощью утилиты cryptsetup. Файл-контейнер будет работать как виртуальный диск и хранить в себе все секретные файлы в зашифрованном виде. В статье я использовал систему Ubuntu 14.02, но данное руководство будет работать и в других семействах Linux.

Поскольку данные будут шифроваться на уровне разделов, то нам нужно будет смонтировать наш файл-контейнер как виртуальное устройство (loop device). Таким образом, cryptsetup будет уже работать не с файлом, а устройством, как будто это полноценный жесткий диск или флешка.

Однако, перед тем как воспользоваться шифрованием данных, вы должны оценить все “За” и “Против”. Во-первых, при шифровании всегда будет дополнительная нагрузка на процессор. Поэтому перед тем как шифровать большой объем данных, рекомендуется опробовать схему на небольших файлах.

Другой важный момент это возможность восстановления данных, а если быть точнее, то “невозможность”. Если вдруг вы забудете свой пароль, то считайте что данные потеряны безвозвратно. Если загололовк LUKS файла перезаписан или поврежден, то данные тоже невозможно восстановить. Кроме того, имея дело с шифрованием, вы должны понимать, что если что-то пойдет не так, то есть вероятность потери данных. Поэтому всегда важно иметь резервную копию всех фаших файлов.

Установка cryptsetup

Хотя системные механизмы шифрования уже встроены в дистрибутив и установлены по умолчанию, некоторые утилиты нужно установить отдельно. Поэтому установим пакет cryptsetup:
sudo apt-get update
sudo apt-get install cryptsetup

Создание пустого файла-контейнера

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

Воспользуемся командой dd, которая заполнит пустой файл test.img нулями, используя виртуальное устройство /dev/zero.
dd if=/dev/zero of=test.img bs=1M count=1024

Также можно заполнить файл случайными числами. Эта операция займет гораздо больше времени, но такой подход более надежен:
dd if=/dev/random of=test.img bs=1M count=1024

Инициализация LUKS раздела

Перед тем, как мы отформатируем наш файл-контейнер, нам нужно создать в нем LUKS раздел. LUKS (сокр. от Linux Unified Key Setup) является стандартом шифрования дисков на уровне ядра системы Linux. LUKS является базовым уровнем, выше которого будут храниться наши зашифрованные данные.

Создадим LUKS раздел в нашем файле-контейнере:
sudo cryptsetup -y luksFormat test.img

После введения команды, нужно подтвердить, что вы согласны перезаписать содержимое файла-контейнера. Для подтверждения требуется ввести YES (заглавными буквами).

Далее нужно ввести пароль для шифрования данных. Обязательно запомните или запишите свой пароль на бумажке, чтобы он не потерялся. Опция -y требуется для повторной проверки пароля, в случае если вдруг вы опечатались при вводе.

Теперь, когда файл-контейнер создан, мы можем открыть его с помощью команды:
sudo cryptsetup luksOpen test.img volume1

где volume1 это имя раздела виртуального устройства LUKS, полный путь к которому /dev/mapper/volume1. Вместо volume1 вы можете задать любое удобное для вас имя.

При вводе команды нужно будет ввести пароль, который нужен для расшифровки данных.

Создание и монтирование файловой системы

После того, как мы создали LUKS контейнер и открыли его как устройство, мы можем работать с ним как любым другим устройством в системе.

Для начала нужно отформатировать и создать файловую систему на нашем устройстве. Вы можете выбрать любую файловую систему. В данной статье мы отформатируем устройство файловой системой ext4:
mkfs.ext4 -j /dev/mapper/volume1

Теперь мы отформатировали наш LUKS контейнер. Как в случае и с любым другим устройством, после форматирования, нам нужно смонтировать наше устройство. Создадим директорию для монтирования:
sudo mkdir /mnt/decrypted

После чего монтируем командой:
sudo mount /dev/mapper/volume1 /mnt/decrypted

Теперь мы можем перейти в директорию с расшифрованными файлами и посмотреть содержимое:
cd /mnt/decrypted
ls

В результате вы должны увидеть единственную директорию lost+found. Теперь мы можем скопировать все наши секретные файлы в смонтированный контейнер, которые будут автоматически зашифрованы:
cp -r

Размонтирование файловой системы и закрытие LUKS контейнера

После того, как мы закончили работать с секретными файлами в контейнере, нужно размонтировать файловую систему:
cd
sudo umount /mnt/decrypted

Однако после размонтирования директории /mnt/decrypted, виртуальное устройство /dev/mapper/volume1 все еще присутствует в системе:
ls /dev/mapper/volume1

Чтобы полностью закрыть volume1 воспользуемся командой:
cryptsetup luksClose volume1

Краткая инструкция

Т.к. при ежедневном использовании нам не нужно создавать пустой файл, то удобно выписать основные команды монтирования/размонтирования в одном месте.

1. Открываем LUKS файл
sudo cryptsetup luksOpen test.img volume1

2. Монтируем виртуальное устройство контейнера
sudo mount /dev/mapper/volume1 /mnt/decrypted

После того, как закончили работать с зашифрованными файлами, нужно все закрыть.

3. Размонтируем файловую систему
sudo umount /mnt/decrypted

4. Закрываем устройство LUKS
sudo cryptsetup luksClose volume1

Как все это работает на самом деле можете посмотреть в следующем видео:

Борьба с пиратством набирает новые обороты, правообладатели и госорганы удваивают свои усилия в этом нелегком деле. Полагаю, каждый из нас подумывал о том, чтобы защитить личные файлы от посягательства со стороны «нежданных гостей», да и просто слишком любознательных лиц.

DANGER

Описываемые здесь средства способны необратимо уничтожить твои данные. Трижды проверяй введенные команды, прежде чем нажимать .

Шифрование будем производить стандартными средствами Ubuntu, причем ключ шифрования, как и раздел /boot, будет вынесен на сменный накопитель. Но зачем шифровать корневой раздел? Ведь можно зашифровать только /home? На то есть несколько причин. Первая — на основе конфигурационных файлов из /etc можно извлечь некоторую информацию, пускай даже она не относится к конфиденциальным данным. Вторая же — если вдруг содержимым диска заинтересуются, ты всегда сможешь сказать, что все так и было и что диск уже был забит псевдослучайными данными. Итак, что для этого понадобится?

  • Флешка с MBR
  • Ubuntu 12.10
  • Чистый жесткий диск

В качестве алгоритма шифрования будем использовать AES, поскольку он принят как стандарт и криптостоек, а в качестве средства — cryptsetup/LUKS. Чтобы иметь возможность добавить свободное место поверх зашифрованного тома, задействуем логические тома (LVM).

Загрузившись с LiveCD, необходимо подготовить флешку: создать на ней второй раздел, где будет размещен /boot и ключ шифрования. Создавая раздел /boot с ФС ext2 вторым, мы убиваем двух зайцев — первый раздел будет виден во всех системах, и на нем можно хранить данные, а второй из Windows так просто не увидишь, что прибавляет неудобства любопытствующим. Для разбиения я использовал gparted, но тебе никто не мешает использовать, например, fdisk. После этого нужно подмонтировать новосозданный раздел и сгенерировать ключевой файл:

Если длина ключевого файла в 32 байта твоей паранойе покажется недостаточной (моей показалось, хоть я и понимаю, что фактически пользовательским ключом шифруется мастер-ключ, который занимает те же самые 32 байта), то ты можешь использовать следующую команду:

Для чего считывать по одному байту? Дело в том, что пул случайных чисел в ядре относительно маленький и не всегда содержит достаточное количество рандомных данных, поэтому во время генерации беспорядочно шевели мышью.

Вывод команды mount

Вывод команды mount

Просмотр мастер-ключа

Просмотр мастер-ключа

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

Заполнение необходимо, чтобы уменьшить вероятность успеха криптоанализа, если он будет производиться. Эта операция занимает довольно длительное время, поэтому запасись терпением. И только теперь уже можно запускать утилиту cryptsetup. Инициализируем диск в формате LUKS:

Разберем, что делает эта команда. Первый ключ указывает тип хеш-функции, которая будет использоваться для хеширования мастер-ключа. Второй ключ указывает алгоритм и тип шифрования. На этом я остановлюсь чуть подробнее. Что такое CBC? Как известно, AES — блочный шифр, который оперирует блоками по 128, 192 или 256 бит. Но, как правило, шифруют гораздо большие объемы информации. И возникает проблема — как шифровать, чтобы не было видно неслучайного распределения, из которого криптоаналитик может извлечь информацию. Умные люди решили ее таким образом: в первом блоке находится IV — случайный набор битов. И каждый последующий блок открытых данных XOR’ится с предыдущим блоком уже зашифрованных данных. Все вроде хорошо, но в случае шифрования дисков такая схема, по понятным причинам, неприменима (ты же не будешь ждать каждый раз по 10–20 минут, пока система расшифровывает нужный тебе участок?). В LUKS для решения проблемы произвольного доступа к информации применяется ESSIV — шифруются относительно небольшие блоки данных (посекторно), а вектор инициализации генерируется на основе номера сектора и хеша ключа. Такая схема также защищает от некоторых криптоатак. В частности, поэтому я и использую LUKS. Подтвердив свои намерения после запуска предыдущей команды, создаем отображение LUKS-устройства:

Первый этап подготовки завершен — теперь в каталоге /dev/mapper появилось устройство cryptodisk, с которым можно обращаться, как с обычным диском.

У LUKS хорошая документация по архитектуре

У LUKS хорошая документация по архитектуре

В принципе, теперь можно на вновь созданный криптодиск ставить Ubuntu, но, как я уже писал, чтобы получить возможность увеличить место, поверх него лучше создать том LVM, что мы и сделаем. Проинициализируем физический том и создадим группу томов:

Теперь в этой группе создадим логические тома:

Теперь можно форматировать их в файловые системы. Ты волен выбирать сам, я же использовал как для корневого тома, так и для vg-home старую добрую ext4 — на мой взгляд, мы и так слишком накрутили, чтобы использовать более новые ФС:

Подготовка почти завершена — теперь надо бы записать UUID дисков и разделов, для чего выполни следующую команду:

Нам осталось «всего лишь» установить Ubuntu на нешифрованный раздел/диск и перенести ее на шифрованный.

Теперь ставим на нешифрованный диск Ubuntu — конфигурацию делай по своему вкусу за исключением размещения /boot и загрузчика. Их необходимо поместить на флешке, где ты заблаговременно создал соответствующий раздел. После этого загружаемся с флешки, чтобы проверить, все ли встало корректно, устанавливаем с помощью apt-get пакеты lvm2 и cryptsetup — они удалились автоматически после установки Ubuntu — и добавляем/изменяем строчки /etc/fstab. Должно получиться нечто подобное (за исключением строчек с псевдофайловыми системами, которых, впрочем, в современных системах нет):

Редактирование /etc/fstab

Раздел /boot мы монтируем по UUID для того, чтобы при добавлении новых дисков не возникла путаница с их именами. Теперь идем в файл /etc/crypttab, он у нас примерно следующего содержания:

Далее нужно изменить initrd. В файл /etc/initramfs-tools/modules добавляем строчку:

Создадим скрипт для того, чтобы лишний раз не монтировать флешку:

Создаем каталог в образе initramfs

Копируем ключ и cryptsetup

И собственно скрипт для подключения криптодиска (выполняется во время загрузки initrd):

Цикл while необходим, если в дальнейшем ты добавишь разблокировку тома по паролю. Оба скрипта должны быть выполняемыми, иначе следующая команда их не увидит и будет создавать стандартный образ. Теперь можно давать команду обновления initrd:

Мы чуть было не забыли про конфиг загрузчика. Имеется два пути его правки: один простой но неправильный — прямое редактирование файла /boot/grub/grub.cfg, второй тоже простой, но на сей раз верный. Некорректность первого способа в том, что при каждом обновлении ядра конфиг перезаписывается с использованием скриптов из /etc/grub.d/. Мы же пойдем другим путем — добавим скрипт, который как раз и будет генерировать правильные строчки в реальном грабовском конфиге. Однако есть одно «но» — при обновлении ядра тебе придется либо менять его каждый раз, либо оставаться на старом (последнее, на мой взгляд, предпочтительнее — см. врезку). Вот так примерно выглядят его строчки:

UUID берем из заранее записанного файла

Раздел /boot для Grub считается корневым, поэтому пути к ядру и образу initrd указываются относительно его

После редактирования этого файла необходимо изменить строчку еще одного файла — /etc/default/grub с тем, чтобы при загрузке данный пункт меню выбирался по умолчанию. Для этого воспользуемся sed’ом.

По желанию можно выключить ненужные тебе пункты меню. Для этого просто сними право выполнения со всех ненужных скриптов в /etc/grub.d/. Теперь можно обновить основной конфиг:

И скопировать все файлы на шифрованные разделы — понятно, не на работающей системе. Загружаемся снова с LiveCD, подключаем криптотом, монтируем разделы и набираем следующие команды:

После копирования можешь пытаться загрузиться с флешки — только выбери пункт меню Ubuntu crypto. Если все прошло нормально, спустя какое-то время ты увидишь приглашение входа в систему. В таком случае могу тебя поздравить — ты уже работаешь в шифрованной системе.

Разделы на флешке

Разделы на флешке

Допустим, тебе понадобилось изменить ключ — ты его скомпрометировал или просто создал политику смены и хочешь ей неукоснительно следовать. Что для этого нужно? Прежде всего сделать резервную копию заголовка тома LUKS — если все будет нормально, после смены ключа ты ее сможешь уничтожить. Делаем мы ее, понятно, на нешифрованный раздел:

После этого сделаем копию файла ключа (просто скопируем его) и сгенерируем новый ключ:

Смотрим текущие кейслоты (места в заголовке шифрованного тома, где хранятся ключи — да-да, их может быть больше одного) и запоминаем номер активного (Enabled). Как правило, это нулевой.

Добавляем новый ключ в систему:

и заменяем старый файл ключа новым:

Перезагружаемся, чтобы убедиться, что мы ничего не сломали, и удаляем старый ключ:

Снова перезагружаемся. Если и в этот раз все в порядке, с облегчением вздыхаем. Мы успешно сменили ключ.

Предположим, ты потерял ключ. Что делать? Главным образом — не паниковать. Если у тебя есть резервная копия заголовка и ключ, который ты применял до ее создания, но ты не можешь загрузиться с него, то для восстановления доступа производим следующее. Грузимся с LiveCD и монтируем носитель с бэкапом. После этого восстанавливаем заголовок:

Подключаем шифрованный том с использованием резервной копии старого ключа:

И производим восстановительные работы (чрутимся, пробрасываем каталог с резервной копией, монтируем /boot, копируем резервную копию ключа в /boot/key.bin и обновляем initramfs). Перезагружаемся — все готово. Но что, если ты каким-то непостижимым образом затер все свои кейслоты и у тебя нет резервных копий заголовка? Если ты после этого еще и перезагрузился, могу тебя поздравить — твои данные невосстановимы. Если же ты не перезагрузился… что ж, есть шанс, что тебе удастся восстановить том. Для этого тебе прежде всего необходимо извлечь мастер-ключ, который хранится в памяти:

Самая длинная непрерывная строчка и будет мастер-ключом. Ее нужно скопировать в файл на нешифрованный том и после этого преобразовать в бинарную форму (перед этим убедись, что в файле нет никаких символов конца строки):

Размер файла master-key.bin в случае тех параметров создания криптотома, которые использовались в статье, должен составлять 32 байта. После извлечения мастер-ключа ты должен загрузиться с LiveCD и проинициализировать том заново с использованием данного мастер-ключа и твоего нового ключа шифрования — надеюсь, как его генерировать, описывать не надо:

Производим процедуры по восстановлению, описанные чуть выше.

Сетевая разблокировка зашифрованного тома через SSH

В заключение статьи хочу напомнить: для защиты информации нужно принимать комплексные меры, и шифрование лишь одна из них.

Начало заголовка шифрованного тома Заголовок шифрованного тома в читабельном виде

Для выключения обновления ядра создай файл в /etc/apt/preferences.d/ следующего содержания:

Версия, естественно, может отличаться.

Помимо низкоуровневых средств шифрования, в Linux есть средства уровня файловой системы — такие как EncFS.

Читайте также: