Як зробити так, щоб призупинити захист оперативної пам'яті на Ubuntu з повним шифруванням диска (LVM поверх LUKS)?


20

Я перебуваю на Ubuntu 13.04, використовуючи повне шифрування диска (LVM поверх LUKS).

Я хотів би включити luksSuspendв процедуру призупинення (і пізніше використання luksResume), щоб я міг призупинити оперативну пам’ять, не залишаючи ключових матеріалів у пам'яті та рут розблокованих.

Останні 7 годин я намагався перенести сценарій для Arch Linux , поки що без успіху: я, чесно кажучи, не маю уявлення, що я роблю ...

Хтось може допомогти мені перенести це (або створити щось подібне з нуля)? Або, принаймні, хтось може вказати мені на документацію про те, як підключити речі до процедур призупинення та як зберегти необхідні бінарні файли та скрипти (наприклад, cryptsetup), навіть якщо всі IO для root були заблоковані (від luksSuspend)?

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


Я витрачаю на це ще кілька годин ...
Йонас Малако

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

1
Я прочитав декілька дискусій зі списків Debian (та деяких інших списків, які пов'язували або були пов'язані з цими), і, поки що, здається, що для вирішення потрібен був би щось на зразок "deinitramfs": ядро ​​буде керувати контролем над deinitramfs перед тим, як фактично призупинити роботу системи, щоб цей tmpfs міг виконувати остаточні дії очищення (наприклад, стирання ключа шифрування для rootfів).
Йонас Малако

Мені б дуже хотілося, щоб на це питання також відповіли.
BenAlabaster

Відповіді:


3

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

Перенесений сценарій виконує такі дії:

  • Створіть десь кріплення рампи
  • Витягніть вміст initramfs там (включаючи сценарій призупинення програми initramfs)
  • BIND монтувати відповідні каталоги (наприклад /sys, /proc, /dev, /run) до Ramfs кріплення
  • Зупиніть будь-які послуги, які можуть заважати (systemd-udevd, systemd-journald)
  • Перезавантажте кореневу файлову систему (ext4 або btrfs) нобар'єром, щоб Linux не зависав під час спроби перейти в S3, а потім синхронізувати
  • Chroot в кріплення initramfs, яке знову синхронізується, запускається luksSuspendта переводить комп'ютер у режим сну
  • Після пробудження, luksResumeперезавантажте файлові системи, перезавантажте служби, відключіть прив’язані кріплення в кріпленні initramfs
  • Нарешті, відключіть кріплення initramfs, щоб ми звільнили оперативну пам’ять, що використовується для файлів initramfs

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

У будь-якому випадку, добре перевірити і переконатися, що сценарії працюють спочатку. Якщо під час спроби встановити Linux у S3 (тобто на echo mem > /sys/power/state), у вас виникає зависання , тоді ви маєте змогу відновити:

  • Перш ніж призупинити, відкрийте tty чи інший термінал (який буде доступний, в ідеалі - tty)
  • Завантажте криптовалюту та відповідні бібліотеки в оперативну пам’ять: sudo cryptsetup luksResume anything_here
  • Призупинити використання сценарію
  • Якщо він зависає після chroot (наприклад, після того, 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
  • Потім ваш комп'ютер слід призупинити. Потім ви можете його розбудити, вбити сценарій (-и), якщо вони все ще запущені, відключити кріплення прив'язки та /run/initramfs, і, якщо це застосовно, знову встановіть кореневу файлову систему.

1

Я не маю досвіду з цим налаштуванням, але багато людей претендують на успіх у цьому. Ось пара з них.

dm-crypt з LUKS - Шифрування розділу Swap
Howto: Повністю зашифрований жорсткий диск, включаючи призупинення дискового розділу з Ubuntu 6.10 Edgy Eft
ubuntu-full-disk-encryption-lvm-luks

Однак жоден з них не використовує luksSuspend (через що вони можуть працювати).


Дякую за посилання ... Я використовую налаштування, подібне до останнього посилання (автоматично створене інсталятором 13.04).
Йонас Малако

Поки що немає luksSuspend, повинно вимкнутись, щоб очистити ключі від пам'яті ... Тим не менше, дякую за посилання! Можливо, розуміючи, як це налаштувати вручну, я можу отримати деяке уявлення про те, як використовувати luksSuspend для того, щоб спричинити таран.
Йонас Малако

1
luksSuspend здається надзвичайно важким у використанні. Оскільки він заморожує всі введення / виведення, потрібен дуже акробатичний сценарій призупинення. Я міг знайти лише одну історію успіху німецькою мовою, яку можна (погано) перекласти англійською . Спробуйте використовувати його як шаблон.
harrymc

2
Можливо, вам також знадобиться використовувати оперативні диски та статично пов'язані криптовалюти.
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.