Поиск по сайту:

Беспарольное шифрование корневого раздела Linux в Debian 8 с помощью USB-ключа


Безопасность критически важных данных на устройстве хранения (жесткий диск, портативная карта памяти) необходима, чтобы злоумышленник не мог украсть конфиденциальную информацию. В этом руководстве мы сосредоточимся на безопасности корневой файловой системы Linux и области подкачки. Будет использоваться функция шифрования Linux по умолчанию \LUKS\, которая требует парольной фразы во время загрузки. Поэтому наша следующая цель — автоматически предоставлять парольную фразу зашифрованному тому во время загрузки. Уже есть несколько статей на ту же тему для старых выпусков дистрибутива Debian. Однако в этом руководстве версия Debain 8 (Jessie) устанавливается на виртуальной машине VirtualBox.

Установка ОС Дебиан

В этом руководстве Debian Jessie устанавливается на виртуальную машину, и подробности показаны на следующем рисунке. Та же процедура будет работать и на «настоящем» сервере или рабочем столе.

Добавьте iso-файл установщика Debian net в виртуальную машину и запустите виртуальную машину, появится приглашение установщика. Выберите опцию \Установить\, чтобы начать процесс установки.

Следующие несколько экранов будут запрашивать основные настройки Debian. Выберите нужный вариант языка из данного списка.

Выберите страну или регион, как показано на следующем рисунке.

Настройте язык клавиатуры.

После основных настроек установщик загружает дополнительные компоненты для настройки.

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

1. Установка имени хоста

2. Настройка доменного имени

3. Установка пароля для пользователя root.

4. Создание нового пользователя, отличного от root.

5. установить часовой пояс

6. И, наконец, самая важная часть — это разметка диска.

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

Как показано на рисунке выше, Debian будет установлен на виртуальной машине. Нажмите Enter, чтобы начать разбиение выбранного жесткого диска, как показано ниже.

Следующий экран появится после принятия вышеуказанного сообщения. Как показано на следующем снимке экрана, в настоящее время на жестком диске нет раздела.

Нажмите \enter\, чтобы создать первый раздел на виртуальном жестком диске.

Первый раздел, который мы создали на жестком диске, называется \/dev/sda1\ для точки монтирования \/boot\.

Для раздела выбирается первичный или логический тип.

Расположение нового раздела выбрано.

Точка монтирования \/boot\ показана на следующем снимке экрана.

Первый раздел на жестком диске успешно создан. Ядро Linux позднее помещается в раздел \/boot\.

Второй раздел, созданный на жестком диске ВМ, называется подкачкой, и размер раздела подкачки должен в два раза превышать размер ОЗУ. Как показано на следующем снимке экрана, оставшееся свободное место выбирается для подкачки.

Установите размер раздела подкачки.

На следующем снимке экрана показано, что раздел выбран в качестве области подкачки.

Еще один раздел также создается на виртуальной машине.

Основной раздел платформы Linux создается на оставшемся пространстве для/(точка монтирования \root\). На следующем снимке показан размер \корневого\ раздела.

Выберите опцию \физический том шифрования\ для нового раздела на жестком диске.

Выделенный параметр на следующем снимке экрана требуется для шифрования раздела на платформе Linux.

Настройка раздела после выбора «физический том для шифрования» показана на следующем рисунке. Метод шифрования по умолчанию — device-mapper (dm-crypt), алгоритм шифрования — AES с размером ключа 256.

Успешное создание раздела на виртуальном жестком диске показано на рисунке ниже.

Вот расширенная конфигурация зашифрованных томов в Debian, выбранная на следующем снимке экрана.

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

Следующая подсказка показывает создание зашифрованного тома на платформе Debian.

Выберите устройства для зашифрованного тома. Не выбирайте загрузочное устройство \/dev/sda1\ для зашифрованного тома, поскольку шифрование загрузочного раздела запрещено.

Как показано на следующем снимке экрана, для зашифрованного тома выбран только \/dev/sda3\, и это корневой раздел диска.

После настройки зашифрованного тома выберите «Готово», чтобы применить изменения.

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

Поэтому мы выбираем оба раздела для зашифрованного тома.

Настройки раздела для зашифрованного тома подкачки показаны ниже.

Следующая подсказка показывает, что данные будут стерты на \sda2\ (обмен).

Удаление данных на \sda2\ и \sda3\ показано ниже.

После завершения процесса введите парольные фразы для обоих зашифрованных разделов.

Повторный ввод той же парольной фразы.

Таблица разделов после успешной настройки зашифрованных томов на диске показана ниже.

Завершите процесс создания разделов, чтобы начать установку ОС Debian. Однако появится следующее сообщение об ошибке, поскольку точка монтирования \/\ еще не выбрана ни для одного раздела.

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

Выбор точки монтирования \/\ для зашифрованного тома.

Выбор зашифрованного тома \sda2_crypt\ в качестве области подкачки.

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

Форматирование разделов показано ниже.

После завершения процесса форматирования базовая система будет установлена.

На следующем снимке экрана показан выбор зеркала архива для пакетов Debian.

Конфигурация менеджера пакетов показана ниже.

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

Выберите среду рабочего стола и другие пакеты из списка.

Установка выбранных пакетов показана ниже.

Установка загрузчика Linux «GRUB» показана на следующем снимке экрана.

Устройство (sda) выбрано для установки загрузчика.

Наконец, процесс установки завершен.

После перезагрузки введите парольную фразу для расшифровки диска sda3.

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

Успешно войдите в установленную систему.

Конфигурация для корневой файловой системы без пароля

Процесс ввода парольной фразы во время загрузки теперь будет автоматизирован с помощью USB-накопителя. Вместо использования

парольная фраза, секретный ключ на USB будет расшифровывать зашифрованные тома. Подключите USB-накопитель к виртуальной машине и найдите ее с помощью команды \dmesg\. На моей виртуальной машине он определяется как \/dev/sdb\.

Секретный ключ из 8192 случайных байтов извлекается из USB-накопителя с помощью команды dd.

dd if=/dev/sdb of=/root/secret.key bs=512 skip=4 count=16

Сгенерированный выше секретный ключ добавляется к зашифрованным томам с помощью команды cryptsetup. По умолчанию парольная фраза хранится в ячейке 0. Следовательно, ячейка 1 будет использоваться для второго секретного ключа.

Запустите команду blkid, чтобы получить информацию о томе на диске.

blkid

В этом руководстве секретный ключ для расшифровки тома добавляется только в /dev/sda3. Однако его можно добавить и в раздел \/dev/sda2\ (подкачка).

cryptsetup luksAddKey /dev/sda3 /root/secret.key --key-slot 1

Для USB-устройства создается простое правило udev в файле /etc/udev/rules.d/99-custom-usb.rules, символическая ссылка, которую мы будем использовать, — /dev/usbdevice.

SUBSYSTEMS=="usb", DRIVERS=="usb",SYMLINK+="usbdevice%n"

Перезагрузите правила с помощью следующей команды.

udevadm control --reload-rules

Вставьте USB-устройство, чтобы проверить пользовательское правило.

Сценарий оболочки необходим для считывания секретного ключа с USB-устройства и предоставления его программе cryptsetup во время загрузки. Сценарий создается как \/usr/local/sbin/openluksdevices.sh\ и берется с сайта http://www.oxygenimpaired.com/.

#!/bin/sh
############taken from following link#########
###http://www.oxygenimpaired.com/debian-lenny-luks-encrypted-root-hidden-usb-keyfile

TRUE=0
FALSE=1

# flag tracking key-file availability
OPENED=$FALSE

if [ -b /dev/usbdevice ]; then
# if device exists then output the keyfile from the usb key
dd if=/dev/usbdevice bs=512 skip=4 count=16 | cat
OPENED=$TRUE
fi

if [ $OPENED -ne $TRUE ]; then
echo "FAILED to get USB key file ..." >&2
/lib/cryptsetup/askpass "Try LUKS password: "
else
echo "Success loading key file for Root . Moving on." >&2
fi

sleep 2

Установите разрешения скрипта, чтобы он мог быть выполнен.

 chmod a+x /usr/local/sbin/openluksdevices.sh

Как и файл конфигурации fstab, файл crypttab содержит информацию о зашифрованных томах на платформе Linux. Добавьте сценарий оболочки для зашифрованного раздела sda3_crypt. Содержимое конфигурационного файла \/etc/crypttab\ для зашифрованного тома приведено ниже.

sda3_crypt /dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc none luks,keyscript=/usr/local/sbin/openluksdevices.sh

Добавьте следующую строку в файл \/etc/initramfs-tools/conf.d/cryptroot\.

CRYPTROOT=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc

Убедитесь, что \usb_storage\ добавлен в файл \/etc/initramfs-tools/modules\.

Следующий сценарий оболочки (/etc/initramfs-tools/hooks/udevusbkey.sh) также взят из внешнего источника. Он используется для добавления пользовательского правила udev во временную файловую систему \initrd\.

#!/bin/sh
# udev-usbkey script
###taken from
###http://www.oxygenimpaired.com/ubuntu-with-grub2-luks-encrypted-lvm-root-hidden-usb-keyfile
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}

case $1 in
prereqs)
prereqs
exit 0
;;
esac

. /usr/share/initramfs-tools/hook-functions

# Copy across relevant rules

cp /etc/udev/rules.d/99-custom-usb.rules ${DESTDIR}/lib/udev/rules.d/

exit 0

Измените разрешение скрипта.

 chmod a+x /etc/initramfs-tools/hooks/udevusbkey.sh

Требуются некоторые изменения в конфигурации загрузчика GRUB2. Однако прямые изменения в файле конфигурации \/boot/grub/grub.cfg\ не допускаются. Поэтому измените параметр \GRUB_CMDLINE_LINUX_DEFAULT\ в файле конфигурации \/etc/default/grub\. Как показано ниже, \rootdelay\ и \cryptopts\ включены в параметр \GRUB_CMDLINE_LINUX_DEFAULT\.


GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=20 cryptopts=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtainsConclusion

Запустите команду \update-grub\, чтобы применить вышеуказанные изменения в файле конфигурации \/boot/grub/grub.cfg\.

После приведенной выше команды в файле конфигурации \/boot/grub/grub.cfg\ были применены следующие изменения.

echo    'Loading Linux 3.16.0-4-686-pae ...'
linux   /vmlinuz-3.16.0-4-686-pae root=UUID=b30cdb22-8e3c-4ffd-a0c7-af96b90ba016 ro  rootdelay=20 cryptopts=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh
echo    'Loading initial ramdisk ...'
initrd  /initrd.img-3.16.0-4-686-pae

Запустите \update-initramfs -u\, чтобы обновить файл временной файловой системы для всех ядер.<br>

Перед перезагрузкой распакуйте новый сгенерированный \initrd.img\ и убедитесь, что ключевой скрипт был скопирован в каталог \lib/cryptsetup/scripts\, а пользовательское правило udev - в \lib/udev/rules.d/\каталог.

cd /tmp/
zcat /boot/initrd.img-3.16.0-4-686-pae | cpio -iv

Keyscript успешно включен в скрипты initramfs.

Пользовательское правило USB также включено в правила udev.

Добавьте USB-устройство в настройки виртуальной машины, прежде чем тестировать всю настройку.

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

Заключение

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