dm-crypt (Русский)/Encrypting an entire system (Русский)
dm-crypt/Шифрование всей системы
Следующие примеры демонстрируют общие сценарии полного шифрования системы с dm-crypt. Они объясняют все дополнительные действия, которыми необходимо дополнить обычную процедуру установки. Все необходимые инструменты доступны на установочном образе.
Если вы хотите зашифровать уже существующую незашифрованную файловую систему, смотрите dm-crypt/Device encryption#Encrypt an existing unencrypted file system.
Обзор
Обеспечение безопасности корневой файловой системы — это то, в чем dm-crypt особенно силён, как по функциональности, так и по производительности. В отличие от выборочного шифрования некорневых файловых систем, зашифрованная корневая файловая система может скрыть такую информацию, как установленные программы, имена пользователей всех учетных записей и типичные источники утечки данных, такие как locate и /var/log/
. Кроме того, зашифрованная корневая файловая система значительно усложняет вмешательство в систему, поскольку все, кроме загрузчика и (обычно) ядра, зашифровано.
Все сценарии, проиллюстрированные ниже, обладают этими преимуществами. Различные плюсы и минусы того или иного способа приведены в таблице ниже:
Сценарии | Преимущества | Недостатки |
---|---|---|
#LUKS на разделе
демонстрирует базовую и прямолинейную настройку полностью зашифрованного корня с LUKS. |
|
|
#LUKS на разделе с TPM2 и Secure Boot
Аналогично примеру выше, с Secure Boot и TPM2, обеспечивающими дополнительные уровни безопасности. |
Те же преимущества, что и выше, и
|
|
#LVM внутри LUKS
Физический том (PV) LVM размещён внутри крипто-контейнера LUKS. |
|
|
#LUKS внутри LVM
Крипто-контейнеры LUKS, внутри которых находятся файловые системы распольжены внутри логических томов LVM. |
|
|
#LUKS внутри програмного RAID
Использует dm-crypt после настройки RAID. |
|
|
#Простой dm-crypt
использует простой режим dm-crypt, т.е. без заголовка LUKS и его опций для нескольких ключей. |
|
|
#Зашифрованный загрузочный раздел (GRUB)
показывает, как зашифровать |
|
|
#Корень на ZFS |
|
|
Хотя все вышеперечисленные сценарии обеспечивают гораздо бо́льшую защиту от внешних угроз, чем зашифрованные вторичные (не корневые) файловые системы, они также имеют общий недостаток: не возможность шифровать данные для каждового пользоваля отдельно. Если в системе несколько пользователей, то любой из них, при получении доступа к ключу шифрования, может расшифровать весь диск и, следовательно, получить доступ к данным всего диска. Если это критично, возможно использовать комбинацию шифрования блочных устройств и шифрования засчёт стековой файловой системы, чтобы получить преимущества обоих методов. Смотрите Data-at-rest encryption (Русский).
Смотрите dm-crypt/Drive preparation#Partitioning для общего обзора стратегий разбиения, используемых в сценариях.
Еще одна область для рассмотрения — нужно ли настраивать зашифрованный раздел (или файл) подкачки и какого типа. См. dm-crypt/Шифрование подкачки.
Если вы планируете защитить данные системы не только от физической кражи, но также имеете требования к мерам предосторожности против логического вмешательства, см. dm-crypt/Specialties#Securing the unencrypted boot partition для дополнительных возможностей после следования по одному из описанных сценариев.
Для твердотельных накопителей вы можете захотеть рассмотреть включение поддержки TRIM, но будьте осторожны, есть потенциальные последствия для безопасности. См. dm-crypt/Specialties#Discard/TRIM support for solid state drives (SSD) для получения дополнительной информации.
- В любом сценарии никогда не используйте программы восстановления файловой системы, такие как fsck, непосредственно на зашифрованном томе, иначе это уничтожит любые средства восстановления ключа, используемого для расшифровки ваших файлов. Такие инструменты должны использоваться на расшифрованном (открытом) устройстве.
- Функция формирования ключа Argon2 имеет высокое использование ОЗУ в качестве своей особенности для усложнения взлома ключа, по умолчанию 1 ГиБ на зашифрованный маппер. Машины с малым объемом ОЗУ и/или несколькими разделами LUKS2, при разблокировки параллельно, могут выдать ошибку при загрузке. Смотрите опцию
--pbkdf-memory
для контроля использования памяти.[1] - Поддержка LUKS2 в GRUB ограничена; см. GRUB#Encrypted /boot для подробностей. Используйте LUKS2 с PBKDF2 (
cryptsetup luksFormat --pbkdf pbkdf2
) для разделов, которые GRUB будет разблокировать. - Выход из гибернации на ZFS может повредить ваш пул, поэтому будьте особенно осторожны при настройке гибернации, даже если swap размещен вне zvol. Подробности здесь.
LUKS на разделе
Этот пример описывает полное шифрование системы с dm-crypt + LUKS на схеме наиболее простой разбивки разделов:
+-----------------------+------------------------+-----------------------+ | Загрузочный раздел | Зашифрованный корневой | Дополнительное | | | раздел LUKS | свободное место для | | | | дополнительных | | /boot | / | разделов, которые | | | | будут настроены позже | | | /dev/mapper/root | | | |------------------------| | | /dev/sda1 | /dev/sda2 | | +-----------------------+------------------------+-----------------------+
Первые шаги можно выполнить непосредственно после загрузки установочного образа Arch Linux.
Подготовка диска
Перед созданием любых разделов вы должны узнать о важности безопасного стирания диска и его методах, описанных в dm-crypt/Drive preparation.
Затем создайте необходимые разделы, как минимум для /
(например, /dev/sda2
) и для /boot
(/dev/sda1
). См. Partitioning.
Подготовка не загрузочных разделов
Этот и следующий разделы заменяют инструкции из Installation guide (Русский)#Форматирование разделов.
Следующие команды создают и монтируют зашифрованный корневой раздел. Они соответствуют процедуре, описанной подробно в dm-crypt/Device encryption#Encrypting devices with LUKS mode. Если вы хотите использовать определенные нестандартные параметры шифрования (например, метод шифрования, длину ключа, размер сектора), см. encryption options перед выполнением первой команды.
# cryptsetup -v luksFormat /dev/sda2 # cryptsetup open /dev/sda2 root
Создайте файловую систему на разблокированном LUKS устройстве. Например, чтобы создать файловую систему Ext4, выполните:
# mkfs.ext4 /dev/mapper/root
Смонтируйте корневой том в /mnt
:
# mount /dev/mapper/root /mnt
Проверьте, работает ли маппинг как надо:
# umount /mnt # cryptsetup close root # cryptsetup open /dev/sda2 root # mount /dev/mapper/root /mnt
Если вы создали отдельные разделы (например, /home
), эти шаги необходимо адаптировать и повторить для всех из них, кроме /boot
(И /efi
если EFI-раздел монтируется не в /boot
, а туда). См. dm-crypt/Encrypting a non-root file system#Automated unlocking and mounting о том, как обрабатывать дополнительные разделы при загрузке.
Обратите внимание, что каждое блочное устройство потребует своего пароля. Это может быть неудобно, так как это приводёт к необходимости ввода нескольких паролей при загрузке. Альтернативой является использование файла ключа, хранящегося в корневом разделе, для разблокировки всех остальных разделов через crypttab
уже без ввода паролей. См. dm-crypt/Device encryption#Using LUKS to format partitions with a keyfile для дополнительных инструкций.
Подготовка загрузочного раздела
/boot
лучше создавать отдельные разделы для /boot
каждой системы, при этом EFI-раздел, в каждой системе можно монтировать в /efi
Нужно выполнить настройку незашифрованного раздела /boot
, который необходим для зашифрованного корня. Для EFI system partition на системах UEFI выполните:
# mkfs.fat -F32 /dev/sda1
или на более старом оборудовании для обычного загрузочного раздела на системах BIOS:
# mkfs.ext4 /dev/sda1
После этого создайте каталог для точки монтирования и смонтируйте раздел:
# mount --mkdir /dev/sda1 /mnt/boot
Монтирование устройств
На шаге Installation guide (Русский)#Монтирование разделов вы должны будете монтировать устройства /dev/mapper/*
(содержимое крипто-контейнеров), а не фактические разделы. Конечно раздел для /boot
, который не зашифрован, все равно должен быть смонтирован напрямую. Во время установки должен быть смонтирован в /mnt/boot
(Если устройство для корневой файловой системы во время установки монтируется в /mnt
).
Настройка mkinitcpio
Если используется стандартный initramfs на основе busybox, добавьте хуки keyboard
и encrypt
в mkinitcpio.conf. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хуки keymap
и consolefont
соответственно.
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)
Если используется initramfs на основе systemd, вместо этого добавьте хуки keyboard
и sd-encrypt
. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хук sd-vconsole
.
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)
Пересоберите initramfs после сохранения изменений. Смотрите dm-crypt/System configuration#mkinitcpio для дополнительных подробностей и других хуков, которые вам могут понадобиться.
Настройка загрузчика
Чтобы разблокировать зашифрованный корневой раздел при загрузке, загрузчиком должны быть установлены следующие параметры ядра:
cryptdevice=UUID=device-UUID:root root=/dev/mapper/root
Если используется sd-encrypt хук, вместо этого нужно установить:
rd.luks.name=device-UUID=root root=/dev/mapper/root
device-UUID
относится к UUID блока LUKS superblock, в этом примере это UUID /dev/sda2
. Подробности в Persistent block device naming.
Также смотрите dm-crypt/System configuration#Kernel parameters для дополнительных деталей.
/boot
раздел, и ваш UEFI загрузчик поддерживает автомонтирование GPT-раздела, вы можете настроить идентификаторы GUID для типов разделов (тип должен быть "Root partition", а не "LUKS partition") и полагаться на systemd-gpt-auto-generator(8) вместо использования параметров ядра.LUKS на разделе с TPM2 и Secure Boot
Этот пример аналогичен #LUKS on a partition, но интегрирует использование Secure Boot и Trusted Platform Module (TPM), повышая общую безопасность процесса загрузки.
В этой конфигурации остается незашифрованным только системный раздел EFI, в котором размещается [[|unified kernel image|унифицированный образ ядра]] и systemd-boot, оба подписаны для использования с Secure Boot. Если Secure Boot отключен или его базы данных ключей изменены, TPM не выдаст ключ для разблокировки зашифрованного раздела. Этот подход аналогичен BitLocker на Windows или FileVault на macOS. Ключ восстановления также будет создан, чтобы обеспечить доступ к данным в случае проблем с разблокировкой TPM (неподписанный загрузчик или обновление ядра, обновление прошивки и т.д.). По желанию, TPM может быть настроен для требования PIN при загрузке, чтобы предотвратить автоматическое разблокирование.
Убедитесь, что внимательно прочитали обсуждение и предупреждения в Trusted Platform Module#LUKS encryption.
В этом примере разделы создаются с учетом systemd (Русский)#Автомонтирование GPT-раздела, нет необходимости в файле fstab или crypttab.
+-----------------------+---------------------------------+ | EFI system partition | LUKS encrypted root partition | | | | | | | | /boot | / | | | | | | /dev/mapper/root | | |---------------------------------| | /dev/sda1 | /dev/sda2 | +-----------------------+---------------------------------+
Следуйте Installation guide (Русский) до шага Installation guide (Русский)#Разметка дисков.
Подготовка диска
Перед созданием любых разделов вы должны узнать о важности безопасного стирания диска и его методах, описанных в dm-crypt/Drive preparation.
Диск должен бытьразмечен с использованием Таблицы разделов GUID (GPT). Создайте на нём необходимые разделы.
Создайте системный раздел EFI (/dev/sda1
в этом примере) с подходящим размером. Он будет позже смонтирован в /boot
.
В оставшемся пространстве на диске создайте корневой раздел (/dev/sda2
в этом примере), который будет зашифрован и позже смонтирован в /
. Установите его GUID типа раздела на 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
("Linux root (x86-64)" в fdisk, 8304
в gdisk).
Подготовка корневого раздела
Следующие команды создают и монтируют зашифрованный корневой раздел. Они соответствуют процедуре, описанной подробно в dm-crypt/Device encryption#Encrypting devices with LUKS mode.
Если вы хотите использовать определенные нестандартные параметры шифрования (например, особый шифр, или нестандартную длину ключа), или если вы не хотите использовать дешифровку на основе TPM, посмотрите настройки шифрования перед выполнением первой команды.
Создайте том LUKS (вы можете просто использовать пустой пароль, так как он будет удален позже) и смонтируйте его:
# cryptsetup luksFormat /dev/sda2 # cryptsetup open /dev/sda2 root
Создайте файловую систему на разблокированном устройстве LUKS. Например, чтобы создать файловую систему Ext4, выполните:
# mkfs.ext4 /dev/mapper/root
Смонтируйте том root в /mnt
:
# mount /dev/mapper/root /mnt
Подготовка системного раздела EFI
/boot
лучше создавать отдельные разделы для /boot
каждой системы, при этом EFI-раздел, в каждой системе можно монтировать в /efi
Если системный раздел EFI был только что создан, отформатируйте его как указано в EFI system partition (Русский)#Форматирование раздела, и смонтируйте его после этого.
# mount --mkdir /dev/sda1 /mnt/boot
Продолжите процесс установки до Installation guide (Русский)#Initramfs. Вы можете пропустить Installation guide (Русский)#Fstab.
Настройка mkinitcpio
Чтобы создать рабочий initramfs на основе systemd, измените строку HOOKS=
в mkinitcpio.conf следующим образом:
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)
Далее см. Unified kernel image#mkinitcpio для настройки mkinitcpio для унифицированных образов ядра.
Не пересобирайте initramfs пока, так как каталог /boot/EFI/Linux
должен сначала быть создан установщиком загрузчика.
Установка загрузчика
Вы можете настроить свою систему для прямой загрузки UEFI образа без какого-либо загрузчика, см. Unified kernel image#Directly from UEFI.
Если нужен загрузчик, продолжите установку systemd-boot с помощью
# bootctl install
Унифицированный образ ядра, генерируемый mkinitcpio, будет автоматически распознан и не требует записи в /boot/loader/entries/
.
Смотрите systemd-boot#Updating the UEFI boot manager и systemd-boot#Loader configuration для дальнейшей настройки.
Финальная установка
Сначала пересоберите initramfs и убедитесь, что генерация образа прошла успешно.
Убедитесь, что вы не забыли установить пароль root, перезагрузитесь для завершения установки.
Secure Boot
Теперь вы можете подписать исполняемые файлы загрузчика и бинарный файл EFI, чтобы включить Secure Boot. Для быстрого и простого способа смотрите Unified Extensible Firmware Interface/Secure Boot#Assisted process with sbctl.
Регистрация TPM
После подписания исполняемых файлов загрузчика и включения Secure Boot, вы сможете зарегистрировать TPM, чтобы использовать его для разблокировки тома LUKS. Следующие команды удалят пустой пароль, созданный во время процесса форматирования LUKS, создадут ключ, привязанный к TPM PCR 7 (состояние Secure Boot и зарегистрированные сертификаты) и создадут резервный ключ восстановления для использования на случай возникновения каких-либо проблем. Если проблем нет, TPM автоматически выдаёт ключ, если считает, что цепочка зарузки системы не скомпроментирована на любом из её этапов. Смотрите systemd-cryptenroll#Trusted Platform Module и systemd-cryptenroll(1).
# systemd-cryptenroll /dev/sda2 --recovery-key # systemd-cryptenroll /dev/sda2 --wipe-slot=empty --tpm2-device=auto --tpm2-pcrs=7
--tpm2-with-pin=yes
для требования дополнительного PIN при разблокировке во время загрузки.- Убедитесь, что Secure Boot активен и находится в пользовательском режиме при привязке к PCR 7, иначе неавторизованные загрузочные устройства могут разблокировать зашифрованный том.
- Состояние PCR 7 может измениться, если изменятся сертификаты прошивки, что может привести к блокировке пользователя. Это может быть сделано неявно fwupd[2] или явно путем ротации ключей Secure Boot.
LVM внутри LUKS
Технически LVM настраивается внутри одного большого зашифрованного блочного устройства. Поэтому LVM не виден до тех пор, пока блочное устройство не разблокировано и структура базового тома не сканируется и не смонтирована во время загрузки.
Схема диска в этом примере выглядит так:
+-----------------------------------------------------------------------+ +----------------+ | Logical volume 1 | Logical volume 2 | Logical volume 3 | | Boot partition | | | | | | | | [SWAP] | / | /home | | /boot | | | | | | | | /dev/MyVolGroup/swap | /dev/MyVolGroup/root | /dev/MyVolGroup/home | | | |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _| | (may be on | | | | other device) | | LUKS encrypted partition | | | | /dev/sda1 | | /dev/sdb1 | +-----------------------------------------------------------------------+ +----------------+
encrypt
этот метод не позволяет распределить логические тома на несколько дисков; либо используйте sd-encrypt, либо смотрите dm-crypt/Specialties#Modifying the encrypt hook for multiple partitions.- Инструкции в dm-crypt/Specialties#Encrypted system using a detached LUKS header используют эту настройку с отделенным заголовком LUKS на USB-устройстве для достижения двухфакторной аутентификации.
- Инструкции в dm-crypt/Specialties#Encrypted /boot and a detached LUKS header on USB используют эту настройку с отделенным заголовком LUKS, зашифрованным разделом
/boot
и зашифрованным файлом ключа, все на USB-устройстве.
Подготовка диска
Перед созданием любых разделов вы должны узнать о важности безопасного стирания диска и его методах, описанных в dm-crypt/Drive preparation.
Создайте раздел для монтирования в /boot
размером 1 ГиБ или больше.
/boot
.Создайте раздел, который позже будет содержать крипто-контейнер.
Создайте крипто-контейнер LUKS на назначенном разделе. Введите новый пароль дважды.
# cryptsetup luksFormat /dev/sda1
Для получения дополнительной информации о доступных параметрах cryptsetup смотрите варианты шифрования LUKS перед выполнением вышеуказанной команды.
Откройте контейнер:
# cryptsetup open /dev/sda1 cryptlvm
введите придуманный ранее пароль в третий раз
Расшифрованный контейнер теперь доступен в /dev/mapper/cryptlvm
.
Подготовка логических томов
Создайте физический том внутри открытого контейнера LUKS:
# pvcreate /dev/mapper/cryptlvm
Создайте группу томов (в этом примере названную MyVolGroup
, но это может быть любое имя) и добавьте в неё ранее созданный физический том:
# vgcreate MyVolGroup /dev/mapper/cryptlvm
Создайте все ваши логические тома в группе томов:
-l 100%FREE
это можно выполнить, уменьшив его размер с помощью lvreduce -L -256M MyVolGroup/home
.# lvcreate -L 4G -n swap MyVolGroup # lvcreate -L 32G -n root MyVolGroup # lvcreate -l 100%FREE -n home MyVolGroup
Отформатируйте ваши файловые системы на каждом логическом томе. Например, используя Ext4 для корневого тома и тома home:
# mkfs.ext4 /dev/MyVolGroup/root # mkfs.ext4 /dev/MyVolGroup/home # mkswap /dev/MyVolGroup/swap
Смонтируйте ваши файловые системы:
# mount /dev/MyVolGroup/root /mnt # mount --mkdir /dev/MyVolGroup/home /mnt/home # swapon /dev/MyVolGroup/swap
Подготовка загрузочного раздела
/boot
лучше создавать отдельные разделы для /boot
каждой системы, при этом EFI-раздел, в каждой системе можно монтировать в /efi
Загрузчик загружает ядро, initramfs и свои собственные конфигурационные файлы из каталога /boot
. Подходит любая файловая система на диске, которая может быть прочитана загрузчиком.
Создайте файловую систему на разделе, предназначенном для /boot
. Для EFI system partition на системах с UEFI выполните:
# mkfs.fat -F32 /dev/sdb1
или для обычного загрузочного раздела на системах с BIOS:
# mkfs.ext4 /dev/sdb1
Смонтируйте раздел в /mnt/boot
:
# mount --mkdir /dev/sdb1 /mnt/boot
В этот момент возобновите общие шаги из Installation guide (Русский)#Установка. Вернитесь на эту страницу, чтобы настроить шаги Installation guide (Русский)#Initramfs и Installation guide (Русский)#Загрузчик.
Настройка mkinitcpio
Убедитесь, что пакет lvm2 установлен.
Если используется стандартный initramfs на основе busybox, добавьте хуки keyboard
, encrypt
и lvm2
в mkinitcpio.conf. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хуки keymap
и consolefont
соответственно.
lvm2
расположен после encrypt
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)
Если используется initramfs на основе systemd, вместо этого добавьте хуки keyboard
, sd-encrypt
и lvm2
. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хук sd-vconsole
.
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)
Пересоберите initramfs после сохранения изменений. Смотрите dm-crypt/System configuration#mkinitcpio для деталей и других хуков, которые вам могут понадобиться.
Примечание: При использовании dracut дополнительная настройка не требуется, так как необходимые модули уже включены.
Настройка загрузчика
Чтобы разблокировать зашифрованный корневой раздел при загрузке, загрузчиком должны быть установлены следующие параметры ядра:
cryptdevice=UUID=device-UUID:cryptlvm root=/dev/MyVolGroup/root
Если используется хук sd-encrypt, вместо этого нужно установить следующее:
rd.luks.name=device-UUID=cryptlvm root=/dev/MyVolGroup/root
device-UUID
относится к UUID суперблока LUKS, в этом примере это UUID /dev/sda1
. Подробнее смотрите Persistent block device naming (Русский).
Если используется dracut, известно, что эти параметры работают:
rd.luks.uuid=device-UUID root=/dev/MyVolGroup/root
вам может понадобиться более обширный список параметров, попробуйте:
rd.luks.uuid=luks-deviceUUID rd.lvm.lv=MyVolGroup/root rd.lvm.lv=MyVolGroup/swap root=/dev/mapper/MyVolGroup-root rootfstype=ext4 rootflags=rw,relatime
Смотрите dm-crypt/System configuration#Kernel parameters если нужны подробности.
LUKS внутри LVM
Чтобы использовать шифрование внутри структуры LVM (шифрование его логических томов, а не физических), сначала настраивается LVM (физические тома, группы томов, логические тома), а затем на определённых логических томах LVM создаются не сразу файловые системы, а крипто-контейнеры LUKS, для размещения файловых систем внутри них. Таким образом, возможно сочетание зашифрованных и незашифрованных томов/разделов.
Следующий короткий пример создает LUKS внутри LVM и сочетает использование файла ключа для раздела /home
. А также тома для подкачки, который после каждой перезагрузки использует автоматически созданый новый временный ключ. Это правильно продумано с точки зрения безопасности, так как никакие потенциально чувствительные данные не сохраняются после перезагрузки в открытом виде в подкачке, они остаются зашифрованы старым ключём, который более не доступен т.к. шифрование подкачки переинициализируется с каждый раз новым временным ключём после перезагрузки. Если вы знакомы с LVM, вы можете настроить под себя различные специфические детали в соответствии с вашими потребностями.
Если вы хотите расширить логический том на несколько дисков, которые уже настроены, или увеличить логический том для /home
(или любого другого тома), описание процедуры для этого описано в dm-crypt/Specialties#Expanding LVM on multiple disks. Важно отметить, что зашифрованный контейнер LUKS тогда также должен быть увеличен.
Подготовка диска
Схема разбиения:
+----------------+-------------------------------------------------------------------------------------------------+ | Boot partition | dm-crypt plain encrypted volume | LUKS encrypted volume | LUKS encrypted volume | | | | | | | /boot | [SWAP] | / | /home | | | | | | | | /dev/mapper/swap | /dev/mapper/root | /dev/mapper/home | | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _| | | Logical volume 1 | Logical volume 2 | Logical volume 3 | | | /dev/MyVolGroup/cryptswap | /dev/MyVolGroup/cryptroot | /dev/MyVolGroup/crypthome | | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _| | | | | /dev/sda1 | /dev/sda2 | +----------------+-------------------------------------------------------------------------------------------------+
Перед использованием /dev/sda2
можно рандомизировать как описано в dm-crypt/Drive preparation#dm-crypt wipe on an empty device or partition. Или можно занулить или рандомизировать при помощи dd
напрямую с /dev/zero
//dev/random
, хотя это будет намного мендленнее
Подготовка логических томов
# pvcreate /dev/sda2 # vgcreate MyVolGroup /dev/sda2 # lvcreate -L 4G -n cryptswap MyVolGroup # lvcreate -L 32G -n cryptroot MyVolGroup # lvcreate -l 100%FREE -n crypthome MyVolGroup
# cryptsetup luksFormat /dev/MyVolGroup/cryptroot # cryptsetup open /dev/MyVolGroup/cryptroot root
Создайте файловую систему на разблокированном устройстве LUKS и смонтируйте его. Например, чтобы создать файловую систему Ext4, выполните:
# mkfs.ext4 /dev/mapper/root # mount /dev/mapper/root /mnt
Дополнительную информацию о параметрах шифрования можно найти в dm-crypt/Device encryption#Encryption options for LUKS mode.
Обратите внимание, что /home
будет зашифрован в #Шифрование логического тома /home.
open
позволит вам открыть крипто-контейнер при условии что логический том LVM c данным контейнером активен.Подготовка загрузочного раздела
/boot
лучше создавать отдельные разделы для /boot
каждой системы, при этом EFI-раздел, в каждой системе можно монтировать в /efi
Создайте файловую систему на разделе, предназначенном для /boot
. Для EFI system partition на системах c UEFI выполните:
# mkfs.fat -F32 /dev/sda1
или для обычного загрузочного раздела на системах c BIOS:
# mkfs.ext4 /dev/sda1
После этого создайте каталог для точки монтирования и смонтируйте раздел:
# mount --mkdir /dev/sda1 /mnt/boot
Настройка mkinitcpio
Убедитесь, что пакет lvm2 установлен.
Если используется стандартный initramfs на основе busybox, добавьте хуки keyboard
, encrypt
и lvm2
в mkinitcpio.conf. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хуки keymap
и consolefont
соответственно.
lvm2
расположен перед encrypt
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block lvm2 encrypt filesystems fsck)
Если используется initramfs на основе systemd, вместо этого добавьте хуки keyboard
, sd-encrypt
и lvm2
. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хук sd-vconsole
.
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)
Пересоберите initramfs после сохранения изменений. Смотрите dm-crypt/System configuration#mkinitcpio для деталей и других хуков, которые вам могут понадобиться.
Настройка загрузчика
Чтобы разблокировать зашифрованный корневой раздел при загрузке, следующие параметры ядра должны быть установлены загрузчиком:
cryptdevice=UUID=device-UUID:root root=/dev/mapper/root
Если используется хук sd-encrypt, вместо этого нужно установить следующее:
rd.luks.name=device-UUID=root root=/dev/mapper/root
device-UUID
относится к UUID суперблока LUKS, в этом примере это UUID /dev/MyVolGroup/cryptroot
. Смотрите Persistent block device naming (Русский) для деталей.
Смотрите dm-crypt/System configuration#Kernel parameters для деталей.
Настройка fstab и crypttab
Требуются записи как в crypttab, так и в fstab для разблокировки устройства и монтирования файловых систем соответственно. Следующие строки будут повторно шифровать том подкачки при каждой перезагрузке:
/etc/crypttab
swap /dev/MyVolGroup/cryptswap /dev/urandom swap,cipher=aes-xts-plain64,size=256,sector-size=4096
/etc/fstab
/dev/mapper/root / ext4 defaults 0 1 UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /boot ext4 defaults 0 2 /dev/mapper/swap none swap defaults 0 0
Шифрование логического тома /home
Поскольку этот сценарий использует LVM в качестве основного маппера, а dm-crypt в качестве вторичного, каждый зашифрованный логический том требует собственного шифрования. Однако, в отличие от временных файловых систем, настроенных с изменчивым шифрованием выше, логический том для /home
должен, конечно, быть постоянным. Следующее предполагает, что вы перезагрузились в установленную систему, иначе вам нужно отрегулировать пути.
Чтобы избежать ввода второго пароля при загрузке, создается файл ключа:
# dd bs=512 count=4 if=/dev/random iflag=fullblock | install -m 0600 /dev/stdin /etc/cryptsetup-keys.d/home.key
Логический том шифруется с его помощью:
# cryptsetup luksFormat -v /dev/MyVolGroup/crypthome /etc/cryptsetup-keys.d/home.key # cryptsetup -d /etc/cryptsetup-keys.d/home.key open /dev/MyVolGroup/crypthome home
Создайте файловую систему на разблокированном устройстве LUKS и смонтируйте его. Например, чтобы создать файловую систему Ext4, выполните:
# mkfs.ext4 /dev/mapper/home # mount /dev/mapper/home /home
Зашифрованное монтирование настраивается как в crypttab, так и в fstab:
/etc/crypttab
home /dev/MyVolGroup/crypthome none
/etc/fstab
/dev/mapper/home /home ext4 defaults 0 2
LUKS внутри программного RAID
Этот пример основан на реальной настройке ноутбука класса рабочей станции, оснащенного двумя SSD, равных по размеру, и дополнительным HDD под файловое хранилище. Конечный результат — полное шифрование (включая /boot
) для всех дисков, с SSD в массиве RAID0, файлы-ключи используются для разблокировки после того как GRUB получает правильный пароль при загрузке.
Этот способ использует очень простую схему разбиения: содержимое RAID монтируется в /
(без использования отдельного /boot
раздела), а расшифрованный HDD монтируется в /data
.
Пожалуйста, обратите внимание, что регулярные резервные копии очень важны в данном случае. Если один из SSD выходит из строя, данные, содержащиеся в массиве RAID, будут практически невозможно восстановить. Возможно, вы захотите выбрать другой уровень RAID если важно обеспечить отказоустойчивость.
Шифрование не является отрицаемым при такой настройке.
Будем считать, что для наших целей в нижеприведенных инструкциях используются следующие блочные устройства:
/dev/sda = первый SSD /dev/sdb = второй SSD /dev/sdc = HDD
+---------------------+---------------------------+---------------------------+ +---------------------+---------------------------+---------------------------+ +---------------------------+ | BIOS boot partition | EFI system partition | LUKS encrypted volume | | BIOS boot partition | EFI system partition | LUKS encrypted volume | | LUKS encrypted volume | | | | | | | | | | | | | /efi | / | | | /efi | / | | /data | | | | | | | | | | | | | | /dev/mapper/root | | | | /dev/mapper/root | | | | +---------------------------+---------------------------+ | +---------------------------+---------------------------+ | | | | RAID1 array (part 1 of 2) | RAID0 array (part 1 of 2) | | | RAID1 array (part 2 of 2) | RAID0 array (part 2 of 2) | | | | | | | | | | | | | | | /dev/md/ESP | /dev/md/root | | | /dev/md/ESP | /dev/md/root | | /dev/mapper/data | | +---------------------------+---------------------------+ | +---------------------------+---------------------------+ +---------------------------+ | /dev/sda1 | /dev/sda2 | /dev/sda3 | | /dev/sdb1 | /dev/sdb2 | /dev/sdb3 | | /dev/sdc1 | +---------------------+---------------------------+---------------------------+ +---------------------+---------------------------+---------------------------+ +---------------------------+
Используйте названия устройств соответствующие вашей системе, так как они могут отличаться.
Подготовка дисков
Перед созданием любых разделов вы должны узнать о важности безопасного стирания диска и его методах, описанных в dm-crypt/Drive preparation.
Для BIOS systems с GPT, создайте BIOS boot partition с размером 1 MiB для GRUB для хранения второй стадии загрузчика BIOS. Не смонтируйте раздел.
Для оборудования с UEFI создайте системный раздел EFI с подходящим размером, он будет позже смонтирован в /efi
.
В оставшемся пространстве на диске создайте раздел (/dev/sda3
в этом примере) для "Linux RAID". Выберите идентификатор типа раздела MBR fd
или идентификатор типа GUID A19D880F-05FC-4D3B-A006-743F0F84911E
для GPT.
После создания разделов на /dev/sda
, следующие команды могут использоваться для их клонирования на /dev/sdb
.
# sfdisk -d /dev/sda > sda.dump # sfdisk /dev/sdb < sda.dump
В HDD используем один раздел /dev/sdc1
, который занимает всё место на диске.
Построение массива RAID
Создайте массив RAID для SSD.
- Операционная система должна быть загружаемой с каждого системнго раздела EFI на каждом из дисков по отдельности, это значит, что именно для EFI-разделов требуется использовать зеркальный RAID1 вместо чередования данных RAID0.
- Суперблок RAID должен быть размещен в конце раздела EFI с использованием
--metadata=1.0
, иначе прошивка не сможет получить доступ к разделу.
# mdadm --create --verbose --level=1 --metadata=1.0 --raid-devices=2 /dev/md/ESP /dev/sda2 /dev/sdb2
Этот пример использует RAID0 для корня, вы можете захотеть заменить другой уровень на основе ваших предпочтений или требований.
# mdadm --create --verbose --level=0 --metadata=1.2 --raid-devices=2 /dev/md/root /dev/sda3 /dev/sdb3
Подготовка блочных устройств
Как объяснено в dm-crypt (Русский)/Drive preparation (Русский), устройства стираются случайными данными с использованием /dev/zero
и криптоустройства с случайным ключом. В качестве альтернативы вы можете использовать dd
с /dev/random
или /dev/urandom
, хотя это будет намного медленнее.
# cryptsetup open --type plain --sector-size 4096 --key-file /dev/urandom /dev/md/root to_be_wiped # dd if=/dev/zero of=/dev/mapper/to_be_wiped bs=1M status=progress # cryptsetup close to_be_wiped
И повторите вышеуказанное для HDD (/dev/sdc1
в этом примере).
Настройте шифрование для /dev/md/root
:
cryptsetup luksFormat --pbkdf pbkdf2
) для разделов, которые GRUB'у потребуется разблокировать.# cryptsetup -v luksFormat --pbkdf pbkdf2 /dev/md/root # cryptsetup open /dev/md/root root
Создайте файловую систему на разблокированном устройстве LUKS. Например, чтобы создать файловую систему Ext4, выполните:
# mkfs.ext4 /dev/mapper/root
Смонтируйте корневой том в /mnt
:
# mount /dev/mapper/root /mnt
И повторите для HDD:
# cryptsetup -v luksFormat /dev/sdc1 # cryptsetup open /dev/sdc1 data # mkfs.ext4 /dev/mapper/data # mount --mkdir /dev/mapper/data /mnt/data
Для систем UEFI настройте системный раздел EFI:
# mkfs.fat -F32 /dev/md/ESP # mount --mkdir /dev/md/ESP /mnt/efi
Настройка GRUB
Настройте GRUB для зашифрованной системы LUKS, отредактировав /etc/default/grub
следующим образом:
GRUB_CMDLINE_LINUX="cryptdevice=/dev/md/root:root" GRUB_ENABLE_CRYPTODISK=y
Если у вас USB клавиатура на новой системе, либо включите поддержку устаревшего USB в прошивке, либо добавьте следующее в /etc/default/grub
:
GRUB_TERMINAL_INPUT="usb_keyboard" GRUB_PRELOAD_MODULES="usb usb_keyboard ohci uhci ehci"
Иначе вы рискуете не иметь возможность использовать клавиатуру в приглашении LUKS.
Смотрите dm-crypt/System configuration#Kernel parameters и GRUB#Encrypted /boot для деталей.
Завершите установку GRUB на оба SSD (на самом деле, установка только на /dev/sda
тоже будет работать).
# grub-install --target=i386-pc /dev/sda # grub-install --target=i386-pc /dev/sdb # grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB # grub-mkconfig -o /boot/grub/grub.cfg
Создание файлов ключей
Следующие шаги позволяют вам избежать ввода пароля дважды при загрузке системы (один раз для GRUB, чтобы разблокировать LUKS устройство, и второй раз, когда initramfs принимает управление системой). Это делается путем создания файла ключа для шифрования и добавления его в образ initramfs, чтобы задействовать хук encrypt для разблокировки корневого устройства. Смотрите dm-crypt/Device encryption#With a keyfile embedded in the initramfs для деталей.
- Создайте файл ключа и добавьте ключ в
/dev/md/root
. - Создайте другой файл ключа для HDD (
/dev/sdc1
) так, чтобы он также мог быть разблокирован при загрузке. Для удобства оставьте пароль, созданный выше, на месте, так как это может облегчить восстановление, если вам когда-нибудь понадобится получить доступ к зашифрованному HDD по парольной фразе, не имеея доступа к файлу ключа, хранящегося внутри зашифрованного системного раздела. Отредактируйте/etc/crypttab
, чтобы расшифровать HDD при загрузке. Смотрите dm-crypt/System configuration#Unlocking with a keyfile.
Настройка системы
Отредактируйте fstab для монтирования блочных устройств root и data, а также ESP:
/dev/mapper/root / ext4 rw,noatime 0 1 /dev/mapper/data /data ext4 defaults 0 2 /dev/md/ESP /efi vfat rw,relatime,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,tz=UTC,errors=remount-ro 0 2
Сохраните конфигурацию RAID:
# mdadm --detail --scan >> /etc/mdadm.conf
Отредактируйте mkinitcpio.conf, чтобы задействовать ваш файл ключа и использовать нужные хуки:
FILES=(/crypto_keyfile.bin) HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck)
Смотрите dm-crypt/System configuration#mkinitcpio для деталей.
Простой dm-crypt
В отличие от LUKS, dm-crypt в обычном режиме (plain mode) не требует заголовка на зашифрованном устройстве: этот сценарий использует данную особенность для настройки системы на полностью зашифрованном диске, который будет неотличим от неразмеченного диска, заполненного случайными данными, что может обеспечить отрицаемое шифрование. Смотрите также wikipedia:Disk encryption#Full disk encryption.
Обратите внимание, что если полное шифрование диска не требуется, методы, использующие LUKS, описанные выше, являются лучшими вариантами как для шифрования системы, так и для зашифрованных разделов. Такие возможности LUKS как управление ключами с использованием сразу нескольких парольных фраз/файлов-ключей для одного устройства, резервные копии мастер-ключа и перешифровка устройства прямо в ходе его работы недоступны в plain-режиме.
Plain dm-crypt encryption может быть более устойчивым к повреждению, чем LUKS, так как он не зависит от ключа шифрования, который может быть одной точкой отказа, если поврежден или принудительно уничтожен. Однако использование режима plain также требует более тонкой настройки параметров шифрования для достижения той же криптографической стойкости. Смотрите также Data-at-rest encryption#Cryptographic metadata. Использование plain mode также может рассматриваться, если вы беспокоитесь о проблемах, описанных в dm-crypt/Specialties#Discard/TRIM support for solid state drives (SSD).
- dm-crypt LUKS режим с отделенным заголовком с использованием опции cryptsetup
--header
. Он не может использоваться со стандартным хуком encrypt, но хук может быть специально для этого модифицирован. - tcplay, который предлагает шифрование без заголовка, но с функцией PBKDF2.
Данный сценарий использует два USB-накопителя:
- Первый для загрузочного раздела, монтирующегося в
/boot
, что также позволит сохранить в конфигурации все параметры для разблокировки «простого» (plain) dm-crypt. Это удобно, чтобы избежать ошибок при ручном вводе сложных опций при каждой загрузке; - Другой для файла ключа шифрования, в данном случае он хранится среди сырых (raw) битов, так что для потенциального злоумышленника, который может завладеть накопителем, но не знающего какой именно ключ нужен для расшифровки, он будет выглядеть как случайные данные вместо того, чтобы быть похожим на обычный файл ключа (Wikipedia:ru:Безопасность через неясность). Следуйте инструкциям в dm-crypt/Device encryption#Keyfiles для подготовки файла ключа.
Диск схематически выглядит так:
+----------------------+----------------------+----------------------+ +----------------+ +----------------+ | Logical volume 1 | Logical volume 2 | Logical volume 3 | | Boot device | | Encryption key | | | | | | | | file storage | | / | [SWAP] | /home | | /boot | | (unpartitioned | | | | | | | | in example) | | /dev/MyVolGroup/root | /dev/MyVolGroup/swap | /dev/MyVolGroup/home | | /dev/sdb1 | | /dev/sdc | |----------------------+----------------------+----------------------| |----------------| |----------------| | disk drive /dev/sda encrypted using plain mode and LVM | | USB stick 1 | | USB stick 2 | +--------------------------------------------------------------------+ +----------------+ +----------------+
- Также возможно использовать одно физическое USB-устройство, одним из слудующих способов:
- Поместив ключ на другой раздел
/dev/sdb2
USB-устройства/dev/sdb
. - Скопировав файл ключа напрямую в initramfs. Пример файла ключа
/etc/cryptsetup-keys.d/root.key
копируется в образ initramfs установкойFILES=(/etc/cryptsetup-keys.d/root.key)
в/etc/mkinitcpio.conf
. Способ указать хукуencrypt
прочитать файл ключа в образе initramfs - использовать префиксrootfs:
перед именем файла, напримерcryptkey=rootfs:/etc/cryptsetup-keys.d/root.key
.
- Поместив ключ на другой раздел
- Другой вариант - использование пароля с хорошей энтропией.
Подготовка диска
Важно, чтобы отображенное устройство было заполнено случайными данными. В особенности, это относится данному к способу шифрования.
Смотрите dm-crypt/Drive preparation и dm-crypt/Drive preparation#dm-crypt specific methods
Подготовка незагрузочных разделов
Смотрите подроднее: dm-crypt/Device encryption#Encryption options for plain mode.
Используя устройство /dev/sda
, с методом шифрования aes-xts с размером ключа 512 бит и используя файл ключа, мы имеем следующие параметры для этого сценария:
# cryptsetup open --type plain --cipher=aes-xts-plain64 --offset=0 --key-file=/dev/sdc --key-size=512 --sector-size 4096 /dev/sda cryptlvm
В отличие от шифрования с использованием LUKS, вышеуказанная команда должна выполняться полностью всякий раз, когда маппинг необходимо переинициализировать, поэтому важно помнить метод шифрования и параметры файла ключа.
Мы можем теперь проверить что маппинг сработал в /dev/mapper/cryptlvm
:
# fdisk -l
- Более простая альтернатива использованию LVM, рекомендуемая в FAQ cryptsetup для случаев, когда LVM не нужен: просто создать файловую систему на всём замаппенном устройстве dm-crypt.
- Если логический том будет отформатирован в ext4, оставьте не менее 256 МиБ свободного места в группе томов для разрешения использования e2scrub(8). После создания последнего тома с
-l 100%FREE
это можно выполнить, уменьшив его размер с помощьюlvreduce -L -256M MyVolGroup/home
.
Далее мы настраиваем логические тома LVM на замаппенном устройстве. (Смотрите Install Arch Linux on LVM более детального описания команд):
# pvcreate /dev/mapper/cryptlvm # vgcreate MyVolGroup /dev/mapper/cryptlvm # lvcreate -L 32G MyVolGroup -n root # lvcreate -L 4G MyVolGroup -n swap # lvcreate -l 100%FREE MyVolGroup -n home
Далее форматируем и монтируем их, активируем подкачку. (более детальное описание комманд: File systems#Create a file system):
# mkfs.ext4 /dev/MyVolGroup/root # mkfs.ext4 /dev/MyVolGroup/home # mount /dev/MyVolGroup/root /mnt # mount --mkdir /dev/MyVolGroup/home /mnt/home # mkswap /dev/MyVolGroup/swap # swapon /dev/MyVolGroup/swap
Подготовка загрузочного раздела
/boot
раздел может быть типичным разделом FAT32 на USB-накопителе, если это необходимо. Но если нужно ручное разбиение, то 1 ГиБ раздела достаточно. Создайте раздел с помощью любого инструмента разбиения на свой вкус.
Создайте файловую систему на разделе, предназначенном для /boot
:
/boot
лучше создавать отдельные разделы для /boot
каждой системы, при этом EFI-раздел, в каждой системе можно монтировать в /efi
# mkfs.fat -F32 /dev/sdb1 # mount --mkdir /dev/sdb1 /mnt/boot
Настройка mkinitcpio
Убедитесь, что пакет lvm2 установлен.
Если используется стандартный initramfs на основе busybox, добавьте хуки keyboard
, encrypt
и lvm2
в mkinitcpio.conf. Если на этапе загрузки системы вы хотите использовать неамериканскую (не US) консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хуки keymap
и consolefont
соответственно.
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)
Пересоберите initramfs после сохранения изменений. Смотрите dm-crypt/System configuration#mkinitcpio для подробностей, например других хуков, которые вам могут понадобиться.
Настройка загрузчика
Чтобы загрузить зашифрованный корневой раздел, загрузчиком должны быть установлены следующие параметры ядра (обратите внимание, что 64 — это количество байт в 512 битах):
cryptdevice=/dev/disk/by-id/disk-ID-of-sda:cryptlvm:sector-size=4096 cryptkey=/dev/disk/by-id/disk-ID-of-sdc:0:64 crypto=:aes-xts-plain64:512:0:
Вместо disk-ID-of-disk
требуется указать id соответствующих дисков. Смотрите Persistent block device naming (Русский) для деталей.
Смотрите dm-crypt/System configuration#Kernel parameters для деталей и других параметров, которые вам могут понадобиться.
/boot
.
Для BIOS:
# grub-install --target=i386-pc --recheck /dev/sdb
Для UEFI:
# grub-install --target=x86_64-efi --efi-directory=/boot --removable
После установки
Вы можете захотеть извлечь из системы USB-накопители после загрузки. Поскольку /boot
раздел обычно не нужен, опцию noauto
можно добавить в соответствующую строку в /etc/fstab
:
/etc/fstab
# /dev/sdb1 UUID=XXXX-XXXX /boot vfat noauto,rw,noatime 0 2
Однако, когда обновление чего-либо в initramfs, или ядра, или загрузчика требуется; /boot
раздел должен быть присутствующим и смонтированным. Поскольку запись в fstab
уже существует, его можно просто смонтировать с помощью:
# mount /boot
Зашифрованный загрузочный раздел (GRUB)
Этот набор инструкций использует ту же схему разбиения и конфигурацию, что и раздел #LVM внутри LUKS, за исключением того, как в данном случае настраивается загрузчик GRUB, который способен загружаться и с логического тома LVM и с зашифрованного раздела для /boot
. Смотрите также: GRUB#Encrypted /boot.
Диск схематически выглядит так:
+---------------------+----------------------+----------------------+----------------------+----------------------+ | BIOS boot partition | EFI system partition | Logical volume 1 | Logical volume 2 | Logical volume 3 | | | | | | | | | /efi | / | [SWAP] | /home | | | | | | | | | | /dev/MyVolGroup/root | /dev/MyVolGroup/swap | /dev/MyVolGroup/home | | /dev/sda1 | /dev/sda2 |----------------------+----------------------+----------------------+ | unencrypted | unencrypted | /dev/sda3 encrypted using LVM on LUKS | +---------------------+----------------------+--------------------------------------------------------------------+
- Все сценарии предназначены в качестве примеров. Конечно, возможно применить оба вышеуказанных различных шага установки и с другими сценариями. Смотрите также варианты, связанные в #LVM внутри LUKS.
- Вы можете использовать скрипт
cryptboot
из пакета cryptbootAUR для упрощенного управления зашифрованной загрузкой (монтирование, размонтирование, обновление пакетов) и в качестве защиты от атак злой горничной с UEFI Secure Boot. Для получения дополнительной информации и ограничений смотрите страницу проекта cryptboot.
Подготовка диска
Перед созданием любых разделов вы должны узнать о важности безопасного стирания диска и его методах, описанных в dm-crypt/Drive preparation.
Ваша схема разделов должна выглятить примерно так:
# gdisk -l /dev/sda
... Number Start (sector) End (sector) Size Code Name 1 2048 4095 1024.0 KiB EF02 BIOS boot partition 2 4096 2101247 1024.0 MiB EF00 EFI system partition 3 2101248 69210111 32.0 GiB 8309 Linux LUKS
Для её получения на чистом диске:
Для систем с UEFI создайте EFI system partition с подходящим размером, он будет позже смонтирован в /efi
.
Для связки BIOS/GPT создайте BIOS boot partition с размером 1 MiB для GRUB, чтобы хранить второй stage загрузчика BIOS. Не монтируйте раздел. Для BIOS/MBR настроек это не нужно.
Создайте раздел типа 8309
, который позже будет содержать крипто-контейнер для LVM.
Создайте крипто-контейнер LUKS:
cryptsetup luksFormat --pbkdf pbkdf2
для разделов, котрорые должны быть расшифрованы напрямую самим GRUB'ом, вместо более требовательного к ресурсам Argon2, который используется в LUKS по умолчанию.# cryptsetup luksFormat --pbkdf pbkdf2 /dev/sda3
Для получения дополнительной информации о доступных параметрах cryptsetup смотрите LUKS encryption options перед выполнением вышеуказанной команды.
Откройте контейнер:
# cryptsetup open /dev/sda3 cryptlvm
Расшифрованный контейнер теперь доступен в /dev/mapper/cryptlvm
.
Подготовка логических томов
Логические тома этого примера аналогичны #LVM внутри LUKS. При необходимости вы можете выполнить любую похожую разбивку в соответствии с вашими целями.
Для UEFI-систем создайте точку монтирования для EFI system partition в /efi
для совместимости с grub-install
и смонтируйте его:
# mount --mkdir /dev/sda2 /mnt/efi
В этот момент у вас должны быть следующие разделы и логические тома внутри /mnt
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 550M 0 part /mnt/efi └─sda3 8:3 0 100G 0 part └─cryptlvm 254:0 0 100G 0 crypt ├─MyVolGroup-swap 254:1 0 4G 0 lvm [SWAP] ├─MyVolGroup-root 254:2 0 32G 0 lvm /mnt └─MyVolGroup-home 254:3 0 60G 0 lvm /mnt/home
Теперь в этот момент возвращаемся к общим шагам Installation guide (Русский)#Установка. Вернитесь на эту страницу, чтобы немного по другому выполнить шаги Installation guide (Русский)#Initramfs и Installation guide (Русский)#Загрузчик.
Настройка mkinitcpio
Убедитесь, что пакет lvm2 установлен.
Если используется стандартный initramfs на основе busybox, добавьте хуки keyboard
, encrypt
и lvm2
в mkinitcpio.conf. Если вы используете неамериканскую консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хуки keymap
и consolefont
соответственно.
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)
Если используется initramfs на основе systemd, вместо этого добавьте хуки keyboard
, sd-encrypt
и lvm2
. Если вы используете неамериканскую консольную карту клавиш или нестандартный шрифт консоли, дополнительно добавьте хук sd-vconsole
.
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)
Пересоберите initramfs после сохранения изменений. Смотрите dm-crypt/System configuration#mkinitcpio для деталей и других хуков, которые вам могут понадобиться.
Настройка GRUB
Настройте GRUB для разрешения загрузки с /boot
на зашифрованном при помощи LUKS разделе:
/etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
Установите параметры ядра, чтобы initramfs мог разблокировать зашифрованный корневой раздел. Используя хук encrypt
:
/etc/default/grub
GRUB_CMDLINE_LINUX="... cryptdevice=UUID=device-UUID:cryptlvm ..."
Если используется хук sd-encrypt, вместо этого нужно установить следующее:
/etc/default/grub
GRUB_CMDLINE_LINUX="... rd.luks.name=device-UUID=cryptlvm ..."
Смотрите dm-crypt/System configuration#Kernel parameters и GRUB#Encrypted /boot для деталей. device-UUID
следует заменить на UUID суперблока LUKS, в этом примере это UUID /dev/sda3
(раздел, который содержит lvm с корневой файловой системой). Смотрите Persistent block device naming (Русский).
Установите GRUB на смонтированный ESP для загрузки UEFI:
# grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB --recheck
Если нужно загрузка с BIOS, то установите GRUB таким способом:
# grub-install --target=i386-pc --recheck /dev/sda
Сгенерируйте конфигурационный файл GRUB:
# grub-mkconfig -o /boot/grub/grub.cfg
Если все команды завершились без ошибок, GRUB должен запросить пароль для разблокировки раздела /dev/sda3
после следующей перезагрузки.
Избегание ввода пароля дважды
Хотя GRUB запрашивает пароль для разблокировки зашифрованного раздела LUKS после вышеуказанных инструкций, разблокировка раздела не передается в initramfs. Поэтому без дополнительных настроек вам нужно будет ввести пароль дважды при загрузке: один раз для GRUB и ещё один раз для initramfs.
Этот раздел посвящен дополнительной конфигурации, чтобы система загружалась только получив пароль один раз, в GRUB. Это достигается путем использования с файла ключа, зашитого в сам же initramfs.
Сначала создайте файл ключа и добавьте его как ключ LUKS:
# dd bs=512 count=4 if=/dev/random iflag=fullblock | install -m 0600 /dev/stdin /etc/cryptsetup-keys.d/cryptlvm.key # cryptsetup -v luksAddKey /dev/sda3 /etc/cryptsetup-keys.d/cryptlvm.key
Добавьте файл ключа в образ initramfs:
/etc/mkinitcpio.conf
FILES=(/etc/cryptsetup-keys.d/cryptlvm.key)
Установите следующие параметры ядра для разблокировки раздела LUKS с помощью файла ключа. Используя хук encrypt
:
GRUB_CMDLINE_LINUX="... cryptkey=rootfs:/etc/cryptsetup-keys.d/cryptlvm.key"
При использовании хука sd-encrypt, /etc/cryptsetup-keys.d/name.key
будет использоваться по умолчанию, поэтому дополнительные параметры ядра устанавливать не нужно.
Если по какой-то причине файл ключа не сможет разблокировать загрузочный раздел, systemd автоматически перейдёт к "плану Б" и запросит пароль и, если он окажется правильным, продолжит загрузку.
/boot
для защиты от угроз физического вмешательства, хук mkinitcpio-chkcryptoboot был специально создан, чтобы помочь в этом.Использование USB-накопителя для разблокировки /boot
Чтобы избежать запоминания сложного пароля или использования простого пароля, который может быть угадан, файл ключа, хранящийся на внешнем USB-накопителе, может использоваться для разблокировки LUKS устройства. Чтобы это было безопасным, этот USB-накопитель желательно хранить отдельно от компьютера, когда он не используется.
Сначала создайте файл ключа таким же образом, как и в #Избегание ввода пароля дважды. Лучше не используйте тот же файл ключа, что и встроен в initramfs т.к. если USB-накопитель будет потерян или скомпрометирован, вам придется делать меньше теловижений: потребуется обновить только "внешний" файл ключа.
Скопируйте этот файл ключа на ваш USB-накопитель и создайте новый файл конфигурации GRUB:
/boot/grub/grub-pre.cfg
set crypto_uuid=UUID-of-the-luks-volume set key_disk=UUID-of-the-volume-with-the-key cryptomount -u $crypto_uuid -k ($key_disk)/the-location-of-the-key-on-your-usb set root=UUID-of-the-unlocked-volume-as-in-grub.cfg set prefix=($root)/boot/grub insmod normal normal
Создайте образ GRUB и установите его (не все эти модули могут понадобиться в зависимости от вашей файловой системы):
# grub-mkimage -p /boot/grub -O x86_64-efi -c /boot/grub/grub-pre.cfg -o /tmp/grubx64.efi part_gpt part_msdos cryptodisk luks gcry_rijndael gcry_sha512 lvm ext2 ntfs fat exfat # install -v /tmp/grubx64.efi /efi/EFI/GRUB/grubx64.efi
Root на ZFS
Чтобы использовать dm-crypt с ZFS, см. ZFS#Encryption in ZFS using dm-crypt.
Кроме того, ZFS имеет встроенное шифрование, которое также может использоваться для шифрования корня системы, исключая загрузчик и метаданные файловой системы. Смотрите:
- Arch Linux Root on ZFS guide на странице OpenZFS,
- Install Arch Linux on ZFS.
После установки загрузчик может быть проверен с Secure Boot на системах основанных на UEFI.