Как обеспечить безопасность приостановки к ОЗУ в Ubuntu с помощью полного шифрования диска (LVM поверх LUKS)?


20

Я на Ubuntu 13.04 с использованием полного шифрования диска (LVM поверх LUKS).

Я хотел бы включить luksSuspendв процедуру приостановки (и последующего использования luksResume), чтобы я мог приостановить к ОЗУ, не оставляя ключевой материал в памяти и рут разблокирован.

Последние 7 часов я пытался перенести скрипт для Arch Linux , но пока безуспешно: честно говоря, понятия не имею, что я делаю ...

Может кто-нибудь помочь мне портировать это (или создать что-то подобное с нуля)? Или, по крайней мере, может кто-нибудь указать мне на документацию о том, как подключить вещи к процедурам приостановки и как сохранить необходимые двоичные файлы и сценарии (такие как cryptsetup) доступными даже после того, как все операции ввода-вывода в root были заблокированы (пользователем luksSuspend)?

Относительно того, как сохранить необходимые двоичные файлы и сценарии, доступные для резюме, этот другой пост в блоге (также для Arch) скопировал их /boot; Однако я хотел бы использовать в строках то, что использовал Вианни в сценарии, о котором я упоминал ранее, потому что этот подход выглядит немного более элегантным в этом аспекте.


Я провожу еще несколько часов на этом ...
— Йонас Малако

Я отредактировал сценарии, которые составляют, pm-suspendи оказалось, что я почти там. Тем не менее, я обнаружил, что не могу просто приостановить system ( echo -n "mem" > /sys/power/state) после замораживания root fs ( cryptsetup luksSuspend ...), потому что для этого требуется еще какой- то ввод / вывод ...
— Jonas Malaco

1
Я прочитал несколько обсуждений списков Debian (и некоторых других списков, которые связаны или были связаны с этими списками), и до сих пор кажется, что для решения потребуется что-то вроде "deinitramfs": ядро ​​будет обрабатывать контроль над deinitramfs непосредственно перед фактическим приостановлением работы системы, чтобы эти tmpfs могли выполнить окончательные действия по очистке (например, очистка ключа шифрования для rootfs).
— Джонас Малако

Мне бы очень хотелось, чтобы на этот вопрос тоже отвечали.
— BenAlabaster

Ответы:


3

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

Портированный скрипт выполняет следующие действия:

  • Создайте рамф-маунт где-нибудь
  • Извлеките там содержимое initramfs (включая скрипт initramfs suspend)
  • BIND монтировать соответствующие каталоги (например /sys, /proc, /dev, /run) к Ramfs крепления
  • Остановите все службы, которые могут помешать (systemd-udevd, systemd-journald)
  • Перемонтируйте корневую файловую систему (ext4 или btrfs) с помощью nobarrier, чтобы Linux не зависал при попытке войти в S3, а затем синхронизируйте
  • Загрузитесь в монтирование initramfs, которое снова синхронизируется, запускается luksSuspendи переводит компьютер в спящий режим
  • После пробуждения luksResumeперемонтируйте файловые системы, перезапустите службы, размонтируйте bind mounts в монтировании initramfs
  • Наконец, отключите монтирование initramfs, чтобы освободить оперативную память, используемую для файлов initramfs.

Я еще не провел обширное тестирование своего сценария, но, похоже, он работает надежно для меня. Если вы используете другую файловую систему (например, не ext4 или btrfs), то у вас могут возникнуть проблемы с барьером, поэтому вам также придется изменить скрипт.

В любом случае, хорошо проверить и убедиться, что сценарии работают первыми. Если вы испытываете зависания при попытке установить Linux на S3 (то есть на echo mem > /sys/power/state), то вы сможете восстановить:

  • Перед приостановкой откройте tty или другой терминал (который будет доступен, так что в идеале tty)
  • Загрузите cryptsetup и соответствующие библиотеки в RAM: sudo cryptsetup luksResume anything_here
  • Приостановить использование скрипта
  • Если он зависает после chroot (например, after starting version xxxотображается на новом vt), переключитесь на tty, который вы открыли ранее, и запуститеsudo cryptsetup luksResume your_luks_device_name_here
  • Если это тоже зависает, откройте другой vt и выполните chroot в /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Попробуйте запустить luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Ваш компьютер должен затем приостановить работу. Затем вы можете разбудить его, уничтожить сценарии (и), если они все еще работают, размонтировать bind mounts and /run/initramfsи перемонтировать корневую файловую систему с барьером, если это применимо.

1

У меня нет опыта в этой настройке, но многие люди утверждают, что успех в этом. Вот пара из них.

dm-crypt с LUKS - шифрование раздела подкачки
. Практическое руководство. Полностью зашифрованный жесткий диск, включая раздел приостановки на диск, с помощью Ubuntu 6.10. Edgy Eft
ubuntu-full-disk-encryption-lvm-luks

Однако ни один из них не использует luksSuspend (возможно, именно поэтому они работают).


Спасибо за ссылки ... Я использую настройку, аналогичную последней ссылке (автоматически генерируется установщиком 13.04).
— Йонас Малако

Пока luksSuspend, должен отключиться, чтобы очистить ключи от памяти ... Тем не менее, спасибо за ссылки! Может быть, понимая, как настроить это вручную, я могу получить некоторое представление о том, как использовать luksSuspend для приостановки в оперативную память.
— Йонас Малако

1
luksSuspend кажется чрезвычайно сложным в использовании. Поскольку он замораживает все операции ввода-вывода, нужен очень акробатический скрипт приостановки. Я мог найти только одну историю успеха на немецком языке, которую можно (плохо) перевести на английский . Попробуйте использовать его как шаблон.
— Harrymc

2
Вам также может понадобиться ram-диск и статически связанная криптографическая установка.
— Harrymc

1

Я потратил некоторое время на то, чтобы сделать это полностью функциональным в Ubuntu 15.10. Если вы пытаетесь заставить это работать на ext2, ext3 или ext4, вам нужно обновить / etc / fstab, чтобы смонтировать том с опцией «nobarrier». В противном случае я предлагаю использовать BTRFS.

Как только ваша файловая система подготовлена, используйте скрипт здесь: https://github.com/Microcentillion/ubuntu-lukssuspend

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.