Назад | Перейти на главную страницу

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

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

Глядя на страницу руководства debian для "crypttab", я вижу пример создания раздела подкачки со случайным ключом при загрузке, поэтому ключ устанавливается случайным образом во время загрузки и известен только самой системе:

# Encrypted swap device
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/<whatever the uuid of dev/sda6 is>

НО ... вот в чем проблема: каждый раз, когда 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? Скрипты инициализации, упомянутые в документе, похоже, не существуют в ОС Debian.

Спасибо!

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

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

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

#<file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cswap none swap sw 0 0

Тогда правильная соответствующая запись в / etc / crypttab будет примерно такой:

# <name> <device> <password> <options>
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 у меня есть

# <target name>  <source device>        <key file>   <options>
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_swap Следующее пространство VG:

lvcreate -l 1000%VG -n lv_swap_encrypted vg_swap

так что наша цель - получить следующую логическую схему:

/dev/sda3
                            LVM Physical Volume (PV)
/dev/mapper/dm-7
                            LVM Volume Group (VG)
/dev/vg_swap
                            LVM Logical Volume (LV)
/dev/vg_swap/lv_swap_encrypted
                            cryptsetup plain
/dev/mapper/swap_unencrypted           
                            swap space

Проблема

Взгляните на недавно созданный раздел 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  
...

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

ВЫ МОЖЕТЕ выполнить 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 выше не будет работать во втором поле /etc/crypttab либо. Здесь мне стоила перезагрузка.

Примечание. X представляет VG UUID, а Y - LV UUID на языке 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-XXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYY
  • /dev/dm-uuid-LVM-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY YYYY

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

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

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

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

НАСТРОИТЬ

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

В этом /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`)

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

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

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

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

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

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

systemctl mask hibernate.target hybrid-sleep.target
systemctl restart systemd-logind.service  # or reboot if using Gnome/gdm3 display manager

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

Создать LVM

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

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

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

Выполнить fdisk и использовать t возможность переименовать Linux swap в Linux LVM введя в 31 (или вы можете использовать L чтобы перечислить все варианты после этого t запятая nd.

# fdisk /dev/sda

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): t
Partition number (1-4, default 4): 3
Partition type (type L to list all types): 31

Changed type of partition 'Linux swap' to 'Linux LVM'.

Command (m for help): w
The partition table has been altered.
Syncing disks.

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

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

pvcreate /dev/sda3

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

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

vgcreate vg_swap /dev/sda3

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

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

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

lvcreate -l 100%vg -n lv_swap_encrypted vg_swap

# Make the LVM create a special file under /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 ] Starting crypto disk...swap_unencrypted (running)...done.

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

# lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0   3.7T  0 disk  
├─sda1                          8:1    0     1M  0 part  
├─sda2                          8:2    0   381M  0 part  /boot
├─sda3                          8:3    0  15.3G  0 part  
│ └─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 part  
  ├─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 is active.
  type:    PLAIN
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  key location: dm-crypt
  device:  /dev/mapper/vg_swap-lv_swap_encrypted
  sector size:  512
  offset:  0 sectors
  size:    31997952 sectors
  mode:    read/write

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

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

# mkswap /dev/mapper/swap_unencrypted 
Setting up swapspace version 1, size = 15.3 GiB (16382947328 bytes)
no label, 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, предоставленный блочным устройством LVM LV, это должно быть достаточным ответом на функционально защищенное зашифрованное пространство подкачки.

Вывод

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

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

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

Но LVM предлагает более чем достаточную защиту благодаря ВАШЕМУ уникальному соглашению об именах для каждого раздела VG и LV.

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

запустите ecryptfs-setup-swap или вручную:

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

Переключитесь на учетную запись администратора / 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 / и т. д. / fstab

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

СТАРЫЙ UUID = d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc swap swap по умолчанию 0 0

НОВАЯ

/ dev / mapper / cswap none swap pri = 1, по умолчанию 0 0

Настройка криптографии

ls -lF / dev / disk / по идентификатору

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

vim / и т.д. / crypttab

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

Активный зашифрованный своп

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

Проверить закодированные операции свопа

dmsetup -C информация

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

lsblk

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

cat / proc / swaps

пример: Имя файла Тип Размер Используемый приоритет / dev / dm-0 раздел 8385532 0-1

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

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