Консультация по продукту 1cloud

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

В инструкции описан процесс создания зашифрованного с помощью ключа раздела на сервере Linux с использованием стандарта LUKS.

Что это такое?

LUKS является стандартом для шифрования жесткого диска Linux. Расшифровать данные на диске можно только имея доступ к секретному ключу и паролю.

Преимущество LUKS:

  • совместимость через стандартизацию;
  • защита от атак с низкой энтропией;
  • возможность аннулирования секретной фразы;
  • распространяется бесплатно.

Выбор диска для шифрования

С помощью команды fdisk необходимо посмотреть какие диски существуют на сервере и доступны для шифрования:

fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0b2b4352

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048   999423   997376  487M 83 Linux
/dev/sda2        1001470 20898437 19896968  9.5G  5 Extended
/dev/sda5        1001472 16775167 15773696  7.5G 8e Linux LVM
/dev/sda6       16777216 20898437  4121222    2G 8e Linux LVM

[...]

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2b00729b

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 41943039 41940992  20G 83 Linux

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

Примечание: добавление диска и создание разделов в Linux.

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

Разметка диска

Запустите утилиту parted, указав в качестве аргумента имя диска:

parted <имя_диска>

Например:

parted /dev/sdb

Таблица разделов должна быть размечена как GPT:

(parted) mklabel gpt

Перед вами появится предупреждение о том, что данные будут стерты, введите Yes:

Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? Yes

Создайте один основной раздел с номером 1, занимающий весь диск:

(parted) mkpart primary 1 -1

Выйдите из утилиты parted:

(parted) quit

Создание ключа

Теперь необходимо создать 2048-битный ключ, указав его расположение:

sudo dd if=/dev/urandom of=<файл_ключа> bs=1024 count=2

Например:

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

Измените права файла, разрешив только чтение владельцу:

sudo chmod 0400 <файл_ключа>

Например:

sudo chmod 0400 /root/secret.key

Создание и инициализация LUKS-раздела

Как правило утилита для шифрования дисков по-умолчанию уже установлена на Linux. Если она отсутствует, то установить можно с помощью любого пакетного менеджера, например apt-get:

sudo apt-get install cryptsetup

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

Создайте LUKS-раздел с использованием созданного ключа:

cryptsetup luksFormat <имя_диска><номер_раздела> <файл_ключа>

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

Например:

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

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

WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES

Свяжите ключ с разделом, что позже позволит его авторизовать раздел и скрыть подсказку пароля:

cryptsetup luksAddKey <имя_диска><номер_раздела> <файл_ключа> --key-file=<файл_ключа>

Например:

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

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

cryptsetup luksOpen <имя_диска><номер_раздела> <устройство-ВВ> --key-file=<файл_ключа>

Например:

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

Устройство ввода-вывода LUKS теперь доступно в /dev/mapper/secret.

Далее укажите размер раздела LUKS:

cryptsetup resize <устройство-ВВ>

Например:

cryptsetup resize secret

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

Создайте файловую систему, например ext4:

mkfs.ext4 /dev/mapper/<устройство-ВВ>

Пример:

mkfs.ext4 /dev/mapper/secret

Проверить состояние устройства можно с помощью следующей команды:

cryptsetup -v status <устройство-ВВ>

Например:

cryptsetup -v status secret

Чтобы посмотреть информацию заголовка LUKS используйте опцию luksDump:

cryptsetup luksDump <имя_диска><номер_раздела>

Пример:

cryptsetup luksDump /dev/sdb1

Монтирование LUKS-раздела

Создайте удобную для вас точку монтирования и установите права:

sudo mkdir -p /secret
sudo chmod 755 /secret

Примонтируйте устройство LUKS:

mount /dev/mapper/<устройство-ВВ> /secret

Например:

mount /dev/mapper/secret /secret

Чтобы проверить, что диск примонтирован корректно, выполните следующую команду:

df -h

Автоматическое монтирование

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

Иногда бывает полезно автоматизировать использование ключа. Для начала узнайте UUID для зашифрованного раздела:

ls -l /dev/disk/by-uuid

Найдите UUID соответствующий диску. В нашем случае это dc8dbc18-adb0-4258-bac8-73860ec12d50.

Выполните экспорт переменной:

export UUID="<UUID>"

Пример:

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

Добавьте ссылку на ключ в файл /etc/crypttab:

sudo echo "secret UUID=${UUID} <файл_ключа> luks" >> /etc/crypttab

Например:

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

Наконец, создайте запись в файле /etc/fstab для автоматического монтирования:

sudo echo "/dev/mapper/<устройство-ВВ> <точка_монтирования> auto" >> /etc/fstab

Пример:

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

Выполните монтирование:

sudo mount -a

Средняя оценка: 4,8, всего оценок: 6