Как создать в Debian случайно зашифрованный раздел подкачки, ссылаясь на него «byuuid»?

8

Разумно, что если в вашей системе 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! Doh!

Поэтому нам нужно как-то сохранить 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

Geeb
источник
«Можно использовать ecryptfs для достижения тех же целей [...] без проблем, которые препятствуют шифрованию блочных устройств». Нет, потому что ecryptfs-setup-swapэто просто помощник, который настраивает dm-crypt/ crypttabдля вас. Как ecryptfsи драйвер на уровне файлов, он не обрабатывает целые разделы, поэтому он переходит на это dm-crypt. Этот метод может показаться вам более удобным, но в конечном итоге вы не добьетесь ничего другого. Во всяком случае, причуды этого метода (включая UUID), вероятно, запутали меня больше, чем если бы я сам сделал это из первых принципов ... хотя я узнал больше.
underscore_d

Ответы:

6

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

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

#<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, который вы можете узнать для своего диска, набрав в CLI следующее:

ls -lF /dev/disk/by-id
Jun_in_Jeju
источник
Обратите внимание, что имя by-id относится как к модели, так и к серийному номеру, который вряд ли будет совпадать с любым другим устройством, которое вы можете подключить.
cscracker
... что для читателей, которые могут быть удивлены, это очень хорошая вещь. Вы не хотите настраивать свой зашифрованный /dev/sdaNраздел подкачки, а затем подключите другой диск и обнаружите, что порядок именования вашего ядра был смещен, а один из разделов без подкачки был уничтожен. UUID тоже подойдет, но я думаю, что ключевая проблема заключается в том, что он хранится в первых нескольких байтах раздела, поэтому мы получаем сценарий неразрешимой курицы и яйца, который обсуждается здесь.
underscore_d
3

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

# <target name>  <source device>        <key file>   <options>
swap             /dev/mapper/cswap      /dev/random  swap

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

Эндрю Шульман
источник
0

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

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

idupree
источник
Спасибо за ваш ответ. Да, я согласен, что скрипт Arch - это проверка работоспособности, чтобы убедиться, что раздел выглядит как раздел подкачки. Но я представляю, что оставил USB-накопитель подключенным и перезагрузился, чтобы найти используемый раздел без подкачки. Я думаю, что заплакал бы настоящими слезами ... Я благодарен за все проверки вменяемости, которые я могу получить!
Geeb
Этого не должно быть, потому что вы используете его UUID, чтобы найти его в первую очередь. Так что все, что он найдет, это раздел подкачки, или ничего.
idupree
0

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

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

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

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

Отключить своп

своп -а

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

lsblk

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

Перезаписать старый своп

дд если = / dev / ноль бс = 1024000 из = / dev / sda <#>

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

Настройка FSTAB

vim / etc / fstab

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

OLD UUID = d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc swap swap default по умолчанию 0 0

NEW

/ dev / mapper / cswap none swap pri = 1, по умолчанию 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, шифр = aes-cbc-essiv: sha256, размер = 256

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

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

Проверьте зашифрованные операции обмена

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

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

lsblk

Пример ├─sda3 8: 3 0 8G 0 part
│ └─cswap 253: 0 0 8G 0 crypt [SWAP]

cat / proc / swaps

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

Тимоти Баттерворт
источник