Разумно, что если в вашей системе 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 здесь.
в /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, этот подход возьмет существующий раздел подкачки и преобразует его в зашифрованное пространство подкачки.
В основном следующие шаги будут
/etc/crypttab
/etc/fstab
mkswap
)все, чтобы заново зашифровать пространство подкачки сейчас и после каждой перезагрузки.
Чтобы использовать случайный ключ, вы должны понимать, что функция гибернации больше не поддерживается.
Вам также следует отключить спящий режим, прежде чем продолжить. 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) раздел для раздела подкачки.
Предположим, что /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, выполнив:
pvcreate /dev/sda3
Создайте группу томов для LVM, выполнив:
vgcreate vg_swap /dev/sda3
Хорошая особенность группы томов заключается в том, что вы можете позже расширить пространство подкачки с помощью другого физического жесткого диска.
Создайте логический том для 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 и установить для нее значение «Завершение работы при критическом состоянии», чтобы избежать потери данных!
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
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).