Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть III

Этап #16
Подготовка конфигурационных файлов и рабочего initrd

На этом этапе первым делом определимся, под каким именем мы будем обращаться к нашему зашифрованному жесткому диску. Это имя будет использоваться в команде map утилиты tcplay. Для примера здесь и далее я буду использовать имя cryp_sdb.
Далее необходимо скопировать в отдельный каталог на загрузочной флешке (для примера пусть будет cfg) файлы /etc/fstab и /etc/mtab из основной ОС и отредактировать их, заменив /dev/sdaX на /dev/mapper/cryp_sdbX. Где X – номер конкретного раздела на жестком диске.

Например файл fstab
Оригинальный:

/dev/sda6        swap             swap        defaults         0   0
/dev/sda1        /                ext2        defaults         1   1
/dev/sda5        /home            ext2        defaults         1   2
#/dev/cdrom      /mnt/cdrom       auto        noauto,owner,ro  0   0
/dev/fd0         /mnt/floppy      auto        noauto,owner     0   0
devpts           /dev/pts         devpts      gid=5,mode=620   0   0
proc             /proc            proc        defaults         0   0
tmpfs            /dev/shm         tmpfs       defaults         0   0

И измененный:

/dev/mapper/cryp_sdb6        swap             swap        defaults         0   0
/dev/mapper/cryp_sdb1        /                ext2        defaults         1   1
/dev/mapper/cryp_sdb5        /home            ext2        defaults         1   2
#/dev/cdrom      /mnt/cdrom       auto        noauto,owner,ro  0   0
/dev/fd0         /mnt/floppy      auto        noauto,owner     0   0
devpts           /dev/pts         devpts      gid=5,mode=620   0   0
proc             /proc            proc        defaults         0   0
tmpfs            /dev/shm         tmpfs       defaults         0   0 

Аналогично изменяем и файл mtab:

/dev/mapper/cryp_sdb1 / ext2 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
/dev/mapper/cryp_sdb5 /home ext2 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0

Далее исправим конфиг GRUB, добавив туда дополнительный пункт:

# Linux crypted partition config begins
  title Absolute Linux Encrypt Initrd
  root (hd0,1)
  kernel /absolute/vmlinuz root=/dev/mapper/cryp_sdb1 ro video=VGA-1:640x480@75
  initrd /absolute/initrd_cr.gz
# Linux crypted partition config ends

Корневое устройство меняется на зашифрованный диск, а вместо тестового initrd указывается рабочий. Естественно, до того, как диск зашифрован и ОС настроена, попытка загрузиться с этой конфигурацией вызовет kernel panic.

Осталось создать рабочий образ initrd. Советую на всякий случай скопировать дерево нашего тестового initrd, например в /boot/initrd-tree-test
Далее можно править файлы в основном дереве каталогов initrd-tree.
В создаваемом моим дистрибьютивом initrd имя устройства, на котором находится корневой каталог основной ОС, содержится в конфигурационном файле initrd-tree/rootdev. Туда следует прописать то устройство, на котором будет находиться корневой каталог после шифрования. В описываемом примере /dev/mapper/cryp_sdb1

Добавляем команды расшифровки жесткого диска и добавления devmapping’ов его разделов в скрипт myinit (см. этап 10) Все предыдущие команды из тестового скрипта нужно удалить.

#!/bin/ash
echo "Mapping drive..."
tcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file
echo "Add partition devmappings…"
kpartx -av /dev/mapper/cryp_sdb

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

#!/bin/ash
echo "Creating mountpoints..."
mkdir /mnt/sda2
echo "Mount boot flash..."
mount -t ext2 /dev/sda2 /mnt/sda2
echo "Mapping drive..."
tcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file
echo "Add partition devmappings…"
kpartx -av /dev/mapper/sec_sdb
echo "Unmount flash…"
umount /mnt/sda2

Сохраняем скрипт, пересоздаем initrd.gz командой mkinitrd без параметров, копируем полученный образ на флешку в каталог с ядром linux (в нашем примере в каталог absolute) под именем initrd_cr.gz

Рекомендую также запустить в консоли fdisk /dev/sdb и в появившемся приглашении к диалогу ввести p [ENTER]
fdisk выведет информацию о разделах на диске, которую можно переписать куда-нибудь на бумажку, чтоб потом восстановить в точности размеры разделов. Хотя этого можно и не делать, в fdisk возможно при создании разделов задать размеры в мегабайтах.

Этап #17
Шифрование системы.
Итак, «заправлены в планшеты космические карты, и штурман уточняет в последний раз маршрут». Наконец-то! Обратный отсчет! Ключи у нас есть, образ initrd подготовлен, осталось только нажать на кнопку.

Внимание! Этот раздел надо дочитать до конца, перед тем, как начать шифрование! Иначе чуда не получится!

Загружаемся в Live-дистрибутив (у меня Puppy Slacko), запускаем еонсоль и вводим:

Команда для шифрования всего диска:

tcplay --create --device=/dev/sdX --cipher=шифр_или_каскад_шифров_через_запятую --pbkdf-prf=алгоритм --keyfile=path/to/key/file

где:
--create – указание программе создать новый шифрованный том
--device=/dev/sdX – устройство, которое требуется зашифровать. Т.е. жесткий диск, на котором установлена основная ОС. Если вы загрузились в тестовом initrd, то это скорее всего sdb, если в LiveCD, то имя основного диска может и поменяться, в используемом мной LiveCD он оказался sda (Будьте внимательны! Вместо жесткого диска случайно не пошифруйте флешку с загрузчиком!). С файлами-контейнерами немного другой расклад, их нужно предварительно ассоциировать с устройством loopX, но за этими тонкостями я уже отправлю в документацию к tcplay, гугль и другие источники знаний.
--cipher=шифр_или_каскад_шифров_через_запятую – указание, какой алгоритм шифрования необходимо использовать, или же необходимо использовать несколько алгоритмов последовательно (они перечисляются через запятую). В настоящий момент tcplay поддерживает алгоритмы: AES-256-XTS, TWOFISH-256-XTS, SERPENT-256-XTS, таким образом, поддерживаются комбинации этих трех, двух, или одного из этих шифров, перечисленных через запятую.
В случае использования одного из них – запятая после его указания не нужна.
Примечание: Если вы используете несколько шифров, особенно на слабой машине, то это может существенно замедлить работу компьютера. Из всех перечисленных шифров AES самый быстрый (на современных машинах он даже поддерживается на аппаратном уровне), но TWOFISH и SERPENT надежнее, хотя и медленнее.
--pbkdf-prf=алгоритм – алгоритм формирования ключа для шифрования на основе пароля. На самом деле, содержимое нашего ключевого файла тоже пароль, «ключ» в криптографии это несколько иное, но, поскольку объяснить вам всю криптографию в трех словах я не могу, отсылаю к специализированным источникам.
Кратко прочесть про PBKDF можно здесь
Вместо алгоритм надо подставить конкретный алгоритм. На данный момент tcplay поддерживает RIPEMD160, SHA512, whirpool
--keyfile=path/to/key/file – указание программе, где взять ключевой файл для шифрования.
Итак, предположим, что основной диск /dev/sdb, в качестве алгоритма шифрования мы выбрали один – AES-256, в качестве алгоритма PBKDF выбран whirlpool, а ключ находится в /keys/keyfile
Тогда команда приобретает вид

tcplay --create --device=/dev/sdb --cipher=AES-256-XTS --pbkdf-prf= whirlpool --keyfile=/keys/keyfile

Можно также добавить ключ --insecure-erase, тогда процесс пройдет быстрее, но не будет произведено затирание данных на диске. Что для вас важнее, скорость процесса, или дополнительный плюс к безопасности, решайте сами. Но я бы стал использовать затирание в том случае, если hdd довольно долго поработал под вашей же ОС. А если вы только что приобрели его на барахолке/в магазине, и ничего вашего, кроме чистой ОС, не стояло, то я бы ускорил процесс и выполнил команду в таком виде:

tcplay --create --device=/dev/sdb --cipher=AES-256-XTS --pbkdf-prf= whirlpool --keyfile=/keys/keyfile –-insecure-erase

После ввода команды и нажатия Enter, нам предложат ввести парольную фразу и повторить ее (в обоих случаях ничего не вводим, нажимаем enter, ведь у нас есть ключевой файл). Далее попросят подтвердить свои действия, честно предупреждая, что информация на диске будет уничтожена, если все сделано правильно – отвечаем y (yes, sir!) и уходим пить чай. Насколько надолго, и нужен ли самовар, а то и мангал с шашлыками, или достаточно просто чая и тортика, тут уж зависит от скорости вашей машины.

В конце процесса нам скажут All Done!, если так, значит диск пошифрован.

Не пытайтесь зашифровать диск из консоли INITRD:
Шифрование диска из initrd не удается. Скорее всего это связано с тем, что tcplay не может сгенерировать криптостойкие последовательности случайных чисел.

Необходимо перенести tcplay в упомянутый мной live-дистрибьютив Puppy Linux.
1. Установите дистрибьютив на флешку (см. этап 5)
2. Перезагрузите компьютер. Будет задан вопрос о создании save-файла, необходимо ответить утвердительно и создать небольшой save-файл в разделе ext2 флешки. Я под этот раздел выделил гигабайт, а save-файл создал размером 128 Мб.
3. Загрузитесь в live-дистрибьютив и скопируйте из основной системы следующие файлы:
В каталог lib:
libtcplay.so.2.0
libdevmapper.so.1.02
в каталог bin:
tcplay

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

Установка tcplay в Puppy Linux может оказаться проблематичной

Потому качаем CryptoMod и заменяем обычную Puppy Slacko на модификацию с поддержкой tcplay. Качать здесь

Этап #18
Восстановление системы на зашифрованный диск. Разметка диска.

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

Не забудьте скопировать ключ на флешку! Иначе придется распаковывать initrd!

Перезагружаемся в консоль тестового initrd и вводим команду, открывающую доступ к зашифрованному диску:
tcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file

где:
--map=cryp_sdb – параметр, указывающий имя, по которому мы будем обращаться к зашифрованному диску после его расшифровки
--device=/dev/sdb — параметр, указывающий имя зашифрованного устройства
--keyfile=/path/to/key/file – параметр, указывающий путь к ключевому файлу.
Если все указано верно, то tcplay ответит All ok! и доступ к зашифрованному диску будет открыт.
Теперь нужно восстановить структуру разделов. В данном примере мой диск был размечен следующим образом: в начале диска создан главный раздел, на котором стояла ОС, за ним расширенный, занимающий всю остальную часть диска. В расширенном разделе был создан раздел для /home и раздел подкачки.

Восстанавливаем разделы с помощью gparted

Свежесозданная таблица разделов системе пока недоступна, поэтому вводим команду отключения зашифрованного диска
tcplay --unmap=cryp_sdb
и перезагружаемся (обратно в консоль тестового initrd)

One Response to Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть III

  1. Pingback: Домашний сервер на базе Slackware Linux | Персональный блог Толика Панкова

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *