cover.png
Шифрование устройств в Linux

Device mapper

Device mapper — это подсистема Linux, позволяющая преобразовать (смэппить) физические блочные устройства в виртуальные. Она лежит в основе LVM, software RAID и dm-crypt.

dm-crypt

dm-crypt является частью device mapper, предоставляющей шифрование блочных устройств, используя Crypto API. Созданное с его помощью виртуальное блочное устройство можно применить как и любое другое: смонтировать, использовать в RAID или LVM. С тем отличием, что на реальном физическом блочном устройстве данные будут зашифрованы.

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

cryptsetup

dm-crypt работает в пространстве ядра. Для взаимодействия с ним используется одна из двух user space утилит: cryptsetup или cryptmount. Мы рассмотрим cryptsetup.

cryptsetup умеет работать в разных режимах шифрования:

  • plain режим, в котором не пишутся никакие метаданные о зашифрованных разделах и эту информацию необходимо указывать при монтировании
  • luks режим по умолчанию, в котором на устройство записываются заголовки с метаданными, позволяющими использовать больше возможностей шифрования, актуальная версия luks2
  • loopaes устаревший режим
  • tcrypt режим совместимости с TrueCrypt

LUKS

Linux Unified Key Setup — это стандарт для шифрования дисков. Особенностью luks в сравнении с plain режимом работы cryptsetup является возможность создавать несколько паролей для доступа к данными.

Создаём luks-раздел, во время создания у нас спросят пароль для доступа:

# cryptsetup luksFormat --type luks2 <устройство>

После создания раздела для работы с ним в первую очередь нам понадобится разблокировать его. При разблокировке зашифрованный раздел смэппится в новое устройство с помощью device mapper в директорию /dev/mapper. Открываем/разблокируем зашифрованный luks-раздел:

# cryptsetup open <устройство> <имя нового устройства>

После ввода пароля в директории /dev/mapper будет создано виртуальное устройство с указанным именем. В первую очередь обычно создаём файловую систему:

# mkfs -t ext4 /dev/mapper/<устройство>

Дальнейшая работа с /dev/mapper/<устройство> такая же как и с любым другим устройством, конечно можем примонтировать и записывать файлы. После окончания всех работ закрываем устройство:

# cryptsetup close <устройство>

Copyright 2025. All rights reserved.

Привет, друг! Coding Overhead — это мой личный блог о современных технологиях и полезных утилитах.