Как создать зашифрованный раздел подкачки с случайным ключом, ссылаясь на него как “by-uuid”, на Debian?

Содержание
  1. Вопрос или проблема
  2. Предположения
  3. Проблема
  4. Доступность ссылок на устройства
  5. Ссылки на устройства LVM
  6. НАСТРОЙКА
  7. Отключить гибернацию
  8. Создать LVM
  9. Переименовать раздел подкачки
  10. Создать физический объем LVM
  11. Создать группу томов LVM
  12. Создать логический том LVM
  13. Зашифрованный раздел подкачки
  14. Создать пространство подкачки
  15. Активировать пространство подкачки
  16. Заключение
  17. Переключитесь на учетную запись администратора/root
  18. Отключить подкачку
  19. Найдите существующий раздел подкачки
  20. Перезапишите старую подкачку
  21. Настройка FSTAB
  22. Настройка Crypto
  23. Активная зашифрованная подкачка
  24. Проверьте операции зашифрованной подкачки
  25. Ответ или решение
  26. Предварительные требования
  27. Шаги по созданию зашифрованного раздела подкачки
  28. 1. Создание физического и логического тома
  29. 2. Настройка /etc/crypttab
  30. 3. Настройка /etc/fstab
  31. 4. Создание зашифрованного раздела подкачки
  32. Проверка состояния
  33. Заключение

Вопрос или проблема

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

Смотря на страницу man для “crypttab” в дебian, я вижу пример создания раздела подкачки с случайным ключом при загрузке, так что ключ устанавливается случайным образом по ходу загрузки и известен только самой системе:

# Зашифрованное устройство подкачки
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap

В этом примере устройство подкачки ссылается на стандартный путь устройства, т.е. /dev/sda6

Абсолютные пути устройств могут изменяться и переопределяться при загрузке, если, скажем, подключен USB-накопитель, например. Пользователь будет очень недоволен, если /dev/sda6 окажется другим разделом, чем ожидалось, и впоследствии будет перезаписан произвольными данными подкачки!!

Таким образом, решение, по-видимому, состоит в том, чтобы: использовать UUID вместо пути устройства (так как UUID не должен меняться), заменив /dev/sda6 на /dev/disk/by-uuid/<uuid устройства /dev/sda6>

НО … вот в чем проблема:
Каждый раз, когда cryptsetup воссоздает зашифрованный раздел подкачки при загрузке, он генерирует для него новый UUID! Упс!

Поэтому нам нужно как-то сохранить UUID этой зашифрованной файловой системы. Я думаю, что cryptsetup может сделать это с помощью своего переключателя --offset, который позволяет сохранить заголовок LUKS и, таким образом, UUID.

Я нашел этот URL:
https://wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions

Кто-нибудь знает, как реализовать описанное решение для Arch Linux на Debian OS?
Скрипты инициализации, упомянутые в документе, похоже, отсутствуют в Debian OS

Спасибо!

ИЗМЕНЕНИЕ
Можно использовать ecryptfs для достижения тех же целей (зашифрованное пространство подкачки) с помощью команды:
ecryptfs-setup-swap
Без проблем, которые связаны с шифрованием блочных устройств.
Посмотрите это сообщение на AskUbuntu

Каждый раз, когда cryptsetup воссоздает зашифрованный раздел подкачки при загрузке, он генерирует для него новый UUID! Упс!

В /etc/crypttab используйте /dev/disk/by-id вместо /dev/disk/by-UUID, чтобы сослаться на ваш раздел подкачки. Например, ваша запись в /etc/fstab для подкачки может быть

#<файловая система> <точка монтирования> <тип> <опции> <дамп> <передача>
/dev/mapper/cswap none swap sw 0 0

Тогда соответствующая запись в /etc/crypttab будет чем-то вроде

# <имя> <устройство> <пароль> <опции>
cswap /dev/disk/by-id/ata-SAMSUNG_SSD_830_Series_S0XYNEAC762041-part5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Обратите внимание, что устройство выше ссылается на /dev/disk/by-id, что вы можете определить для вашего диска, набрав следующее в командной строке:

ls -lF /dev/disk/by-id

В моем /etc/crypttab у меня есть

# <целевая имя>  <исходное устройство>        <файл ключа>   <опции>
swap             /dev/mapper/cswap      /dev/random  swap

Здесь /dev/mapper/cswap – логический том, созданный с помощью LVM, который заботится о правильном назначении имен логических томов независимо от имен букв диска. Он также позволяет мне легко изменять размер моего раздела подкачки.

Чтобы использовать раздел подкачки на зашифрованном файле через LVM с опцией by-uuid, это невозможно … на стадии загрузки initramfs или на большинстве стадий загрузки systemd.

Вот почему…

Или переходите к разделу “Шаги”, чтобы начать создание столь же безопасного зашифрованного пространства подкачки LVM, которое создается в нормальном режиме загрузки (для systemd, Debian 10).

Предположения

Вы создали раздел LVM с именем lv_swap_encrypted, используя 100% пространства VG vg_swap, как указано:

lvcreate -l 1000%VG -n lv_swap_encrypted vg_swap

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

/dev/sda3
                            LVM Физический Объём (PV)
/dev/mapper/dm-7
                            LVM Группа Томов (VG)
/dev/vg_swap
                            LVM Логический Том (LV)
/dev/vg_swap/lv_swap_encrypted
                            cryptsetup plain
/dev/mapper/swap_unencrypted           
                            пространство подкачки

Проблема

Взгляните на новый созданный раздел LVM с именем vg_swap-lv_swap_encrypted, предназначенный только для использования с подкачкой (или зашифрованной подкачкой):

# ./lsblk-uuid 
NAME                          UUID                                   MOUNTPOINT
sda                                                                  
├─sda1                                                               
├─sda2                        XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /boot
├─sda3                        XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX 
│ └─vg_swap-lv_swap_encrypted                                        
└─sda4                        XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX 
  ├─arca_v1-root              XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /
  └─arca_v1-spare  
...

Обратите внимание, что для этого раздела vg_swap-lv_swap_encrypted нет UUID?

Вы МОГЛИ бы выполнить mkswap vg_swap-lv_swap_encrypted на этом LVM и получить этот UUID, но тогда мы пропустим крайне необходимую часть шифрования, которую мы хотели.

ПРЕДУПРЕЖДЕНИЕ: О, вы выполнили mkswap? Тогда очистите его, выполнив:

dd if=/dev/urandom of=/dev/mapper/vg_swap-lv_swap_encrypted 

Выполнение dmsetup info /dev/dm-7 показывает другой формат UUID:

   LVM-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Я уже пробовал опцию UUID= с тем причудливым значением LVM выше, и оно не сработает во 2-м поле /etc/crypttab. Это стоило мне перезагрузки.

Примечание: X представляет UUID VG и Y – UUID LV в терминологии LVM.

Доступность ссылок на устройства

Во время стадии загрузки initramfs не так много символических ссылок доступно для использования на стадии загрузки. Мы исследуем, какие пути устройств доступны для зашифрованной подкачки.

Нет необходимости выполнять update-initramfs или другую реконструкцию initfs здесь.

Ссылки на устройства LVM

В каталоге /dev LVM создает несколько символических ссылок для каждого раздела LV (логического тома), который lvcreate (или systemd-lvm2 во время загрузки) активирует.

Во время стадии загрузки initramfs активация LVM создает следующие блочные и символические файлы:

  • /dev/dm-X
  • /dev/mapper/vg_swap-lv_swap_encrypted
  • /dev/vg_swap/lv_swap_encrypted

Во время нормальной стадии загрузки ядра ОС заботится о остальных следующих ссылках. Нет необходимости исследовать, кем или где, так как наше внимание сосредоточено на доступности ссылок для зашифрованного раздела подкачки В ТЕЧЕНИЕ стадии загрузки initramfs.

  • /dev/block/254:X
  • /dev/254:X
  • /dev/vg_swap-lv_swap_encrypted
  • /dev/lv_swap_encrypted
  • /dev/dm-name-vg_swap-lv_swap_encrypted
  • /dev/disk/by-id/dm-uuid-LVM-XXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
  • /dev/dm-uuid-LVM-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Двадцать перезагрузок на уровне 2 позже, я узнал, что никогда не будет возможно (в течение стадии загрузки initramfs) использовать монтирование by-uuid, потому что каждый раз, когда сваппер записывает нешифрованные данные в первые пару блоков зашифрованного раздела, любой UUID, который у него был до того, как его зашифрованные данные написали его, теперь давно потерян.

Для нормальной пост-загрузочной стадии UUID может использоваться в cryptsetup/cryptdisks_*.

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

ОПАСНОСТЬ: Вкратце, единственная опасность для вас заключается в повторном использовании этого же раздела LVM для чего-то еще, кроме подкачки. В противном случае, при следующей перезагрузке, этот раздел снова будет преобразован в пространство подкачки, и любые вновь установленные данные будут потеряны (просто порадуйтесь, что это не старые и ценные данные).

НАСТРОЙКА

Эта схема использования имени LVM VG/LV была бы неуязвима к потере данных, вызванной добавлением, удалением и перераспределением жесткого диска, будь то подкачка или файловая система.

В этом примере /etc/crypttab:

swap_unencrypted /dev/mapper/vg_swap-lv_swap_encrypted /dev/random none

Пространство подкачки с использованием рандомизированного ключа на основе памяти И с использованием пути VG/LV, этот подход возьмет ваш существующий раздел подкачки и преобразует его в зашифрованное пространство подкачки.

По существу, следующие шаги

  • отключить гибернацию,
  • создать раздел LVM для зашифрованной части пространства подкачки,
  • сделать новую запись в /etc/crypttab
  • заставить dm-crypt/LUKS создать ещё один раздел, swap_unencrypted.
  • изменить запись о подкачке в /etc/fstab
  • Создать пространство подкачки (mkswap)
  • Включить пространство подкачки (‘swapon`)

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

Отключить гибернацию

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

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

Примечание: мы ХОТИМ установить физический или расширенный раздел на SWAP, чтобы обмануть этот системный генератор initramfs и не отключать часть SUSPEND/SLEEP.

В Debian вы можете выполнить:

systemctl mask hibernate.target hybrid-sleep.target
systemctl restart systemd-logind.service  # или перезагрузите, если используете менеджер дисплея Gnome/gdm3

Хорошая новость в том, что аппаратный режим ожидания или сна все равно будет работать.

Создать LVM

Эти шаги предполагают, что у вас уже есть физический или расширенный (а не LVM) раздел для раздела подкачки.

Переименовать раздел подкачки

Предположим, что /dev/sda – это имя диска.
Предположим, что 3 – это номер раздела диска /dev/sda, на котором находится подкачка.

Выполните fdisk и используйте опцию t, чтобы переименовать Linux swap в Linux LVM, введя 31 (или вы можете использовать L, чтобы перечислить все опции после этой команды t).

# fdisk /dev/sda

Добро пожаловать в fdisk (util-linux 2.33.1).
Изменения останутся в памяти только до тех пор, пока вы не решите записать их.
Будьте осторожны при использовании команды записи.


Команда (m для помощи): t
Номер раздела (1-4, по умолчанию 4): 3
Тип раздела (введите L, чтобы перечислить все типы): 31

Изменен тип раздела 'Linux swap' на 'Linux LVM'.

Команда (m для помощи): w
Таблица разделов была изменена.
Синхронизируйте диски.

Создать физический объем LVM

Создайте физический объем для LVM, выполнив:

pvcreate /dev/sda3

Создать группу томов LVM

Создайте группу томов для LVM, выполнив:

vgcreate vg_swap /dev/sda3

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

Создать логический том LVM

Создайте логический том для LVM, выполнив:

lvcreate -l 100%vg -n lv_swap_encrypted vg_swap

# Заставить LVM создать специальный файл в /dev/vg_swap/lv_swap_encrypted
lvchange -a y vg_swap

Теперь у нас есть доступный блочный файл /dev/dm-7.

Вы обнаружите, что:

  • /etc/mapper/vg_swap-lv_swap_encrypted
  • /etc/vg_swap/lv_swap_encrypted

все указывает на тот же /dev/dm-7.

Я буду настаивать на использовании /etc/mapper/vg_swap-lv_swap_encrypted, потому что это
согласованное место, которое большинство из нас может ожидать.
Мало кто знает, чтобы искать это имя группы томов LVM здесь, как /dev/vg_swap. Некоторые другие (как большинство BOFH), кто создаёт труднодоступные /etc/mapper_other (имя VG mapper), чтобы усложнить поиск.

Мы не будем использовать /dev/dm-7, потому что это может быть dm-19 или другое, в зависимости от вашей схемы разбиения.

Теперь у нас есть путь к диску, логическому диску, но ещё не зашифрованному диску с произвольным ключом, указывающим на /dev/mapper/vg_swap-lv_swap_encrypted.

Зашифрованный раздел подкачки

Добавьте или измените следующую запись в /etc/crypttab:

swap_unencrypted /dev/mapper/vg_swap-lv_swap_encrypted /dev/urandom swap,cipher=
aes-cbc-essiv:sha256,size=256

Затем активируйте шифрование и создайте еще одно устройство dm под блочным устройством /dev/mapper :
Выберите одну из двух команд ниже:

# cryptsetup open /dev/mapper/vg_swap-lv_swap_encrypted  \
                swap_unencrypted

или

# cryptdisks_start swap_unencrypted
[ ok ] Запуск крипто-диска...swap_unencrypted (работает)...готово.

Была создана новая символическая ссылка, выполните lsblk

# lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0   3.7T  0 диск  
├─sda1                          8:1    0     1M  0 часть  
├─sda2                          8:2    0   381M  0 часть  /boot
├─sda3                          8:3    0  15.3G  0 часть  
│ └─vg_swap-lv_swap_encrypted 254:7    0  15.3G  0 lvm   
│   └─swap_unencrypted        254:8    0  15.3G  0 crypt [SWAP]
└─sda4                          8:4    0   3.6T  0 часть  
  ├─arca_v1-root              254:0    0 186.3G  0 lvm   /
...                            11:0    1  1024M  0 rom   

Вы могли бы взглянуть на UUID этого раздела LVM, но это бесполезно на данный момент.

Выполните lsblk -o name,uuid,mountpoint

# ~/bin/lsblk -o name,uuid,mountpoint
NAME                          UUID                                   MOUNTPOINT
sda                                                                  
├─sda1                                                               
├─sda2                        XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /boot
├─sda3                        XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX 
│ └─vg_swap-lv_swap_encrypted                                        
│   └─swap_unencrypted
└─sda4                        XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX 
  ├─arca_v1-root              XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /
...

Новосозданное блочное устройство /dev/mapper/swap_unencrypted теперь существует.

Детали по /dev/mapper/swap_unencrypted:

# cryptsetup status swap_unencrypted
/dev/mapper/swap_unencrypted активен.
  тип:    PLAIN
  шифр:  aes-cbc-essiv:sha256
  размер ключа: 256 бит
  местоположение ключа: dm-crypt
  устройство:  /dev/mapper/vg_swap-lv_swap_encrypted
  размер сектора:  512
  смещение:  0 секторов
  размер:    31997952 секторов
  режим:    чтение/запись

Создать пространство подкачки

Создайте пространство подкачки:

# mkswap /dev/mapper/swap_unencrypted 
Настройка пространства подкачки версии 1, размер = 15.3 GiB (16382947328 байт)
нет метки, UUID=8cd89984-9892-4d62-a9ba-ecfb6476379c

Теперь обратите внимание на созданный UUID для swap_unencrypted? Это всегда будет отличаться для каждой перезагрузки.

# ~/bin/lsblk-uuid 
NAME                          UUID                                   MOUNTPOINT
sda                                                                  
├─sda1                                                               
├─sda2                        XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /boot
├─sda3                        XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX 
│ └─vg_swap-lv_swap_encrypted                                        
│   └─swap_unencrypted        8cd89984-9892-4d62-a9ba-ecfb6476379c   [SWAP]
└─sda4                        XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX 
  ├─arca_v1-root              XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /
...

Активировать пространство подкачки

В /etc/fstab, измените или добавьте строку с записью подкачки:

/etc/mapper/swap_unencrypted none swap sw 0 0

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

# swapon /dev/mapper/swap_unencrypted

Пространство подкачки теперь зашифровано с использованием случайного ключа.
Поскольку dm-crypt использует UUID, предоставляемый блочным устройством LV LVM, это должно быть достаточным ответом для функционально защищенного зашифрованного пространства подкачки.

Заключение

UUID не может быть использован для зашифрованного раздела подкачки из-за стохастической природы зашифрованных данных, которые предотвращают идентификацию такого раздела (подкачка, ext4, btfs).

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

Вы можете использовать /dev/disk/by-id.

Но LVM предлагает более чем достаточную защиту благодаря вашей уникальной системе именования для каждого из разделов VG и LV.

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

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

Я также буду осторожен, если мне не изменяет память, Debian и ArchLinux имеют разные форматы для /etc/crypttab (безумие, я знаю, но я перешел с Ubuntu на Arch пару лет назад и в конечном итоге решил использовать банальный bash, а не мудрить с crypttabs).

выполните ecryptfs-setup-swap или вручную:

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

Переключитесь на учетную запись администратора/root

su root или sudo для каждой команды

Отключить подкачку

swapoff -a

Найдите существующий раздел подкачки

lsblk

пример:
sda3 8:3 0 8G 0 часть [SWAP]

Перезапишите старую подкачку

dd if=/dev/zero bs=1024000 of=/dev/sda<#>

пример:
dd if=/dev/zero bs=1024000 of=/dev/sda3

Настройка FSTAB

vim /etc/fstab

Замените старое устройство SWAP на имя маппера crypttab: /dev/mapper/cswap

СТАРОЕ
UUID=d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc swap swap defaults 0 0

НОВОЕ

/dev/mapper/cswap none swap pri=1,defaults 0 0

Настройка Crypto

ls -lF /dev/disk/by-id

Пример:
ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 -> ../../sda3

vim /etc/crypttab

cswap /dev/disk/by-id/ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Активная зашифрованная подкачка

Перезагрузите компьютер

Проверьте операции зашифрованной подкачки

dmsetup -C info

Пример:
cswap 253 0 L–w 2 1 0 CRYPT-PLAIN-cswap

lsblk

Пример
├─sda3 8:3 0 8G 0 часть
│ └─cswap 253:0 0 8G 0 crypt [SWAP]

cat /proc/swaps

пример:
Filename Type Size Used Priority
/dev/dm-0 partition 8385532 0 -1

Если вы используете GPT таблицы разделов, то, например, /dev/disk/by-partuuid/d1a59352-aa44-4748-85fc-4cf785702f99 является стабильным именем устройства, которое не изменится, даже когда содержимое изменится.

Не Debian, а Fedora 36

Подтверждение, что идея @Brian Minton использовать UUID раздела, содержащегося в GUID Partition Table, может быть эффективно использована для решения этой конкретной проблемы. Конечно, вам нужна структура диска, использующая GUID Partition Table, а не старомодная MS-DOS таблица разделов

Например, я хочу иметь изменчивый, но зашифрованный раздел подкачки на /dev/sda3, и мы можем найти UUID GUID Partition, посмотрев в /dev/disk/by-partuuid/ (или вызвав blkid /dev/sda3)

# ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx. 1 root root 10 Jun 22 09:54 1bcc8619-ab8d-4709-b1a6-dcb6ac8bdd1b -> ../../sda3

И затем мы просто должны добавить соответствующие строки в /etc/cryptsetup и /etc/fstab как показано (оранжевым) на диаграмме ниже.

После загрузки мы находим следующее в журнале systemd с journalctl:

systemd-makefs[693]: Настройка пространства подкачки версии 1, размер = 2 GiB (2147479552 байта)
systemd-makefs[693]: LABEL=cryptoswap, UUID=5d930dd4-4799-4f7a-928e-b2da1c5b9508
systemd-makefs[691]: /dev/mapper/cryptoswap успешно отформатирован как подкачка (метка "cryptoswap", uuid 5d930dd4-4799-4f7a-928e-b2da1c5b9508)
systemd[1]: Завершена настройка [email protected] - Настройка шифрования для cryptoswap.
systemd[1]: Достигнута цель [email protected] - Подготовка блочного устройства для /dev/mapper/cryptoswap.

Диаграмма о том, как настроить зашифрованный изменчивый раздел подкачки

В Arch wiki это частично обсуждается, но некоторые детали упускаются, которые я заполню здесь. В основном вам нужно сделать небольшую файловую систему в начале раздела с меткой и UUID, которые вы хотите, затем используйте параметр смещения в crypttab, чтобы сделать так, чтобы cryptfs начиналась после файловой системы.

Скажем, вы используете 4-й первичный раздел на NVME (вместо этого может быть раздел LVM, но это именно то, что я только что сделал)

Сначала создайте файловую систему с меткой и UUID, который я хочу (поскольку я создаю файловую систему – обычно вы позволите создать случайный UUID). Я создаю файловую систему размером 512K байт на 8 ГБ разделе, потому что мне не нужно больше места для UUID и метки. Размер интерпретируется иначе, если вы укажете размер блока или опустите суффикс, так что прочитайте страницу man перед добавлением дополнительных аргументов. 🙂

sudo mkfs.ext2 -L cryptswap -U b84f0e58-b1b5-4aaf-b717-4c893af2e1c1 /dev/nvme0n1p4 512K

Строка из crypttab выглядит так. Важная часть здесь – это offset=1024, что кажется двойным. Если вы посмотрите на вывод fdisk -l, вы увидите, что диск использует 512-байтные сектора. Так что, чтобы сместить на 512K байт, вам нужно пройти 1024 сектора. Файловые системы полны наследия; не беспокойтесь слишком сильно, почему. Остальные аргументы – обычные “что угодно, что вы хотите сделать” вещи.

cryptswap UUID=b84f0e58-b1b5-4aaf-b717-4c893af2e1c1 /dev/urandom swap,plain,offset=1024,cipher=aes-xts-plain64,size=512

Запустите диск с помощью удобного обертки cryptdisks_start:

sauer@host:~$ sudo cryptdisks_start cryptswap 
* Запуск крипто-диска...
* cryptswap (запускается)...
* cryptswap (запущен)...
[ OK ] 

Проверьте, что устройство теперь работает. Обратите внимание, что устройство dm-2; это будет иметь значение позже.

sauer@host:~$ ls -l /dev/mapper/cryptswap 
lrwxrwxrwx 1 root root 7 Oct 13 16:01 /dev/mapper/cryptswap -> ../dm-2

Затем просто создайте и активируйте новое устройство

sauer@host:~$ sudo mkswap /dev/mapper/cryptswap
mkswap: /dev/mapper/cryptswap: предупреждение: стирание старой подписи подкачки.
Настройка пространства подкачки версии 1, размер = 8 GiB (8589406208 байт)
нет метки, UUID=c00afcb1-de7b-4b19-9890-da3562ce88e5
sauer@host:~$ sudo swapon -a
sauer@host:~$ sudo swapon -s
Имя файла   Тип       Размер     Использовано  Приоритет
/dev/dm-2  раздел   8388092  0     -2

“Фактическое” крипто-устройство – это dm-2, поэтому оно отображается в выводе swapon таким образом, а не с uuid или меткой. Итак, если я сейчас проверю disk-by-uuid, есть две записи – одна для заполнительной файловой системы с постоянным UUID и одна для зашифрованной, смещенной файловой системы подкачки с UUID, который будет воссоздан каждый раз, когда файловая система будет воссоздана.

sauer@host:~$ ls -l /dev/disk/by-uuid/ | grep -e p4 -e dm-2
lrwxrwxrwx 1 root root 15 Oct 13 15:58 b84f0e58-b1b5-4aaf-b717-4c893af2e1c1 -> ../../nvme0n1p4
lrwxrwxrwx 1 root root 10 Oct 13 16:01 c00afcb1-de7b-4b19-9890-da3562ce88e5 -> ../../dm-2

Редактировать: после перезагрузки, теперь у меня это. Обратите внимание, что заполнительная файловая система (nvme0n1p4) по-прежнему эффективно устанавливает тот же UUID для раздела, но зашифрованный раздел подкачки (dm-2) имеет новый UUID, так как он был воссоздан. 🙂

sauer@host:~$ ls -l /dev/disk/by-uuid/ | grep -e p4 -e dm-2
lrwxrwxrwx 1 root root 10 Oct 13 16:39 80e3b280-4256-47ea-a0ab-99b77241fab5 -> ../../dm-2
lrwxrwxrwx 1 root root 15 Oct 13 16:39 b84f0e58-b1b5-4aaf-b717-4c893af2e1c1 -> ../../nvme0n1p4

Ответ или решение

Создание зашифрованного раздела подкачки (swap) с случайным ключом в Debian – это важный шаг для повышения безопасности вашей системы. Этот процесс включает в себя использование LUKS (Linux Unified Key Setup) для шифрования раздела и гарантирует, что данные в памяти не могут быть просмотрены при случайном доступе к разделу подкачки. В этом руководстве вы узнаете, как правильно настроить шифрованный раздел подкачки, ссылаясь на него по UUID.

Предварительные требования

  1. Установить необходимые утилиты: Убедитесь, что у вас установлены cryptsetup и lvm2. Вы можете это сделать с помощью команды:

    sudo apt update
    sudo apt install cryptsetup lvm2
  2. Отключить режим гибернации: Поскольку шифрование раздела подкачки с использованием случайных ключей не поддерживает режим гибернации, необходимо отключить эту функцию:

    systemctl mask hibernate.target hybrid-sleep.target

Шаги по созданию зашифрованного раздела подкачки

1. Создание физического и логического тома

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

# Создаем физический том
sudo pvcreate /dev/sda3  # Предположим, что /dev/sda3 - это ваш раздел для подкачки

# Создаем группу томов (VG)
sudo vgcreate vg_swap /dev/sda3

# Создаем логический том (LV)
sudo lvcreate -l 100%FREE -n lv_swap_encrypted vg_swap

2. Настройка /etc/crypttab

Добавьте строку в файл /etc/crypttab. Это сообщает системе, как открывать зашифрованный раздел подкачки при загрузке:

swap_unencrypted /dev/mapper/vg_swap-lv_swap_encrypted /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

3. Настройка /etc/fstab

Теперь настройте файл /etc/fstab, чтобы использовать новую зону подкачки:

/dev/mapper/swap_unencrypted none swap sw 0 0

4. Создание зашифрованного раздела подкачки

После настройки файлов crypttab и fstab, активируйте зашифрованный раздел:

# Откройте зашифрованный раздел
sudo cryptsetup open /dev/mapper/vg_swap-lv_swap_encrypted swap_unencrypted

# Создайте пространство подкачки
sudo mkswap /dev/mapper/swap_unencrypted

# Активируйте раздел подкачки
sudo swapon --all

Проверка состояния

После завершения всех шагов проверьте, что зашифрованный раздел подкачки работает корректно:

swapon --show

Вы должны увидеть что-то вроде этого:

NAME                    TYPE      SIZE   USED PRIO
/dev/mapper/swap_unencrypted partition 15GiB  0    -1

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...