Bagaimana membuat suspend ke RAM aman di Ubuntu dengan enkripsi disk penuh (LVM di atas LUKS)?

20

Saya menggunakan Ubuntu 13,04 menggunakan enkripsi disk penuh (LVM di atas LUKS).

Saya ingin memasukkan luksSuspendke dalam prosedur menangguhkan (dan kemudian menggunakan luksResume) sehingga saya dapat menangguhkan ke RAM tanpa meninggalkan materi utama pada memori dan root tidak terkunci.

Saya telah mencoba selama 7 jam terakhir untuk mem-port sebuah script untuk Arch Linux , sejauh ini tidak berhasil: Sejujurnya saya tidak tahu apa yang saya lakukan ...

Adakah yang bisa membantu saya port ini (atau membuat sesuatu seperti ini dari awal)? Atau, setidaknya, adakah yang bisa mengarahkan saya ke dokumentasi tentang bagaimana cara menghubungkan hal-hal ke dalam prosedur menangguhkan dan bagaimana membuat biner dan skrip yang diperlukan (seperti cryptsetup) tersedia bahkan setelah semua IO untuk root telah diblokir (oleh luksSuspend)?

Mengenai cara membuat biner dan skrip yang diperlukan tersedia untuk resume, posting blog lain ini (juga untuk Arch) menyalinnya ke /boot; Namun saya ingin menggunakan sesuatu yang lebih sesuai dengan yang digunakan Vianney dalam naskah yang saya sebutkan sebelumnya, karena pendekatan itu tampaknya sedikit lebih elegan dalam aspek ini.

Jonas Malaco
sumber
Saya menghabiskan beberapa jam lagi untuk ini ...
Jonas Malaco
Saya mengedit skrip yang membentuk pm-suspenddan tampaknya saya hampir sampai. Namun, saya mengetahui bahwa saya tidak bisa hanya menangguhkan sistem ( echo -n "mem" > /sys/power/state) setelah membekukan root fs ( cryptsetup luksSuspend ...), untuk itu memerlukan beberapa i / o masih ...
Jonas Malaco
1
Saya membaca beberapa diskusi tentang daftar Debian (dan beberapa daftar lain yang menautkan atau ditautkan dengan yang ini) dan, sejauh ini, tampaknya pada solusi akan memerlukan sesuatu seperti "deinitramfs": kernel akan menangani kontrol ke deinitramfs sesaat sebelum benar-benar menangguhkan sistem, sehingga tmpfs ini dapat melakukan tindakan pembersihan akhir (seperti menghapus kunci enkripsi untuk rootfs).
Jonas Malaco
Saya benar-benar ingin melihat pertanyaan ini dijawab juga.
BenAlabaster

Jawaban:

3

Saya telah menemukan masalah yang sama, jadi saya mencoba lagi porting script yang sama, yang dapat Anda lihat di sini . Itu tidak menyentuh penyimpanan non-volatil setelahnya luksSuspend, jadi itu bekerja bahkan dengan enkripsi full-disk nyata dengan dienkripsi / boot. Namun, Anda harus berhati-hati - itu mungkin tidak berfungsi seperti yang diharapkan sesekali!

Script porting melakukan hal berikut:

  • Buat ramfs mount di suatu tempat
  • Ekstrak isi initramfs di sana (termasuk skrip menangguhkan initramfs)
  • Bind mount direktori yang relevan (misalnya /sys, /proc, /dev, /run) ke ramfs me-mount
  • Hentikan layanan apa pun yang dapat mengganggu (systemd-udevd, systemd-journald)
  • Remount sistem file root (ext4 atau btrfs) dengan nobarrier sehingga Linux tidak hang ketika mencoba masuk ke S3, lalu sinkronisasi
  • Chroot ke mount initramfs, yang disinkronkan lagi, dijalankan luksSuspend, dan mematikan komputer
  • Setelah bangun,, luksResumeremount sistem file, restart layanan, lepas ikatan mount di mount initramfs
  • Akhirnya, unmount mount initramfs sehingga kita membebaskan RAM yang digunakan untuk file initramfs

Saya belum melakukan pengujian ekstensif pada skrip saya, tetapi tampaknya bekerja dengan baik untuk saya. Jika Anda menggunakan sistem file lain (yaitu bukan ext4 atau btrfs), maka Anda mungkin mengalami masalah dengan penghalang, jadi Anda harus memodifikasi skrip juga.

Either way, ada baiknya untuk menguji dan memverifikasi bahwa skrip bekerja terlebih dahulu. Jika Anda mengalami hang saat mencoba memasukkan Linux ke S3 (yaitu di echo mem > /sys/power/state), maka Anda harus dapat memulihkan:

  • Sebelum menangguhkan, buka terminal atau terminal lain (yang dapat diakses, sehingga idealnya terminal)
  • Muat cryptsetup dan perpustakaan yang relevan ke dalam RAM: sudo cryptsetup luksResume anything_here
  • Tangguhkan menggunakan skrip
  • Jika hang setelah chroot (mis. Setelah starting version xxxditampilkan pada vt baru), beralih ke tty yang Anda buka sebelumnya dan jalankansudo cryptsetup luksResume your_luks_device_name_here
  • Jika itu hang juga, buka vt lain dan chroot ke /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Coba jalankan luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Komputer Anda kemudian harus ditangguhkan. Anda kemudian dapat membangunkannya, bunuh skrip jika masih berjalan, lepaskan ikatan mount dan /run/initramfs, dan pasang kembali sistem file root Anda dengan penghalang jika berlaku.
zhongfu
sumber
1

Saya tidak memiliki pengalaman dengan pengaturan ini, tetapi banyak orang mengklaim sukses dalam hal ini. Ini beberapa di antaranya.

dm-crypt with LUKS - Enkripsi partisi Swap
Howto: Harddisk yang sepenuhnya terenkripsi termasuk partisi disk yang ditangguhkan dengan Ubuntu 6.10 Edgy Eft
ubuntu-penuh-disk-enkripsi-lvm-luks

Namun tidak satupun dari mereka menggunakan luksSuspend (yang mungkin menjadi alasan mereka bekerja).

harrymc
sumber
Terima kasih atas tautannya ... Saya menggunakan pengaturan yang mirip dengan tautan terakhir (otomatis dibuat oleh penginstal 13.04).
Jonas Malaco
Tidak ada luksSuspend sejauh ini, harus dimatikan untuk menghapus kunci dari memori ... Namun demikian, terima kasih atas tautannya! Mungkin dengan memahami cara mengkonfigurasi ini secara manual saya bisa mendapatkan beberapa wawasan tentang cara menggunakan luksSuspend untuk menangguhkan ram.
Jonas Malaco
1
luksSuspend tampaknya sangat sulit digunakan. Karena membekukan semua I / O, kita perlu skrip menangguhkan yang sangat akrobatik. Saya hanya dapat menemukan satu kisah sukses dalam bahasa Jerman yang dapat (buruk) diterjemahkan ke dalam bahasa Inggris . Coba gunakan itu sebagai templat.
harrymc
2
Anda mungkin juga perlu menggunakan ram-disk dan cryptsetup yang terhubung secara statis.
harrymc
1

Saya menghabiskan beberapa waktu untuk mendapatkan ini berfungsi penuh pada Ubuntu 15.10. Jika Anda mencoba membuat ini bekerja pada ext2, ext3, atau ext4 Anda perlu memperbarui / etc / fstab untuk me-mount volume dengan opsi 'nobarrier'. Kalau tidak, saya sarankan menggunakan BTRFS.

Setelah filesystem Anda siap, gunakan skrip di sini: https://github.com/Microcentillion/ubuntu-lukssuspend

pengguna569427
sumber