13.04.2022

Создание зашифрованного LUKS-раздела на Linux

Операционные системы семейства Linux предоставляют функцию шифрования жестких дисков через специальные утилиты. Рассмотрим одну из них под названием LUKS. В качестве примера используется Ubuntu Server 18.04.

Предварительная подготовка

Утилиту LUKS используют в качестве стандарта для защиты дисков в Linux-системах. Ее преимущества:

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

sudo fdisk –l

Она отобразит информацию о свободных томах, а также о разделах, которые доступны для защиты:

Скриншот №1. Перечень свободных логических дисков.

Выберем один из списка и перейдем к редактированию. В качестве примера будем использовать раздел /dev/sdb.

Запустим программу parted, указав выбранный том:

sudo parted /dev/sdb

Администратору будет доступен функционал утилиты через терминал.

Важно! Чтобы получить подробную информацию об утилите parted, введите ключ help.

Получив доступ к parted, разметим выбранный раздел соответствующим образом. Отредактируем под GPT:

mklabel gpt

Программа отобразит предупреждение о том, что вся информация будет удалена во время выполнения операции. Вводим «Yes»:

Скриншот №2. Удаление данных с тома.

После окончания операции создадим новый том как основной:

mkpart primary 1 -1

Его метка будет отображаться как «1». По окончании выходим из программы через команду quit.

Генерация ключа

Создадим ключ шифрования, используя команду DD:

sudo dd if=/dev/urandom of=/root/secret.key bs=1024 count=2

, где /root/secret.key — имя генерируемого ключа. Пользователь указывает его самостоятельно.

Теперь отредактируем права доступа к файлу:

sudo chmod 0400 /root/secret.key

Присвоим ему функцию на чтение «без редактирования».

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

Следующий этап — шифрование данных. По умолчанию LUKS интегрирована в большинство дистрибутивов. Если утилита недоступна, установим её, используя стандартные средства установки. Для примера с Ubuntu Server:

sudo apt-get install cryptsetup

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

cryptsetup luksFormat /dev/sdb1 /root/secret.key

Программа выдаст предупреждающее сообщение о том, что информация будет удалена после форматирования. Вводим «Yes»:

Скриншот №3. Стирание диска.

Теперь свяжем сгенерированный ключ с томом /dev/sdb1. Это позволит в дальнейшем пропускать процедуру авторизации при каждом обращении к разделу, а также скроет подсказки к паролю от других пользователей:

cryptsetup luksAddKey /dev/sdb1 /root/secret.key --key-file=/root/secret.key

После выполнения операции перейдем к конфигурированию. Сначала создадим промежуточный вариант подключения к шифрованному объекту. Для этого воспользуемся функцией LuksOpen:

cryptsetup luksOpen /dev/sdb1 secret --key-file=/root/secret.key

По окончании устройство будет доступно по пути /dev/mapper/secret.

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

cryptsetup resize secret

В нашем примере имя тома — secret. Если для опции resize не указываются дополнительные флаги, она занимает весь раздел. Смонтируем точку доступа для файловой структуры ext4 с именем тома secret:

mkfs.ext4 /dev/mapper/secret

Для проверки правильности выполненных действий вводим:

cryptsetup -v status secret

Монтирование тома

Раздел зашифрован — смонтируем его для операционной системы. Указываем точку входа для тома secret, а потом задаем права на доступ:

sudo mkdir -p /secret
sudo chmod 755 /secret

Через команду mount подключим раздел к ОС:

mount /dev/mapper/secret /secret

После этого проверим выполнение операции:

df –h

Чтобы постоянно не подключить LUKS-раздел к операционной системе, активируем автомонтирование тома.

Важно! Использование автоматического режима монтирования также автоматически расшифровывает том в момент его подключения к ОС.

Определим идентификатор защищенного диска:

ls -l /dev/disk/by-uuid

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

export UUID="dc8dbc18-adb0-4258-bac8-73860ec12d50"

Важно! После знака «=» идет идентификатор, который используется в примере.

Создадим ссылку на сгенерированный ранее ключ secret.key:

sudo echo "secret UUID=${UUID} /root/secret.key luks" >> /etc/crypttab

Последний шаг — добавляем соответствующие строки в файл монтирования разделов fstab:

sudo echo "/dev/mapper/secret /secret auto" >> /etc/fstab

Указав в терминале команду sudo mount –a, зашифрованный раздел автоматически будет подключаться при старте операционной системы.