Làm cách nào để tạm dừng RAM an toàn trên Ubuntu với mã hóa toàn bộ đĩa (LVM trên LUKS)?


20

Tôi đang sử dụng Ubuntu 13.04 bằng mã hóa toàn bộ đĩa (LVM trên đầu LUKS).

Tôi muốn kết hợp luksSuspendvào quy trình tạm dừng (và sử dụng sau này luksResume) để tôi có thể tạm dừng RAM mà không để lại tài liệu chính trên bộ nhớ và root đã được mở khóa.

Tôi đã cố gắng trong 7 giờ qua để chuyển một tập lệnh cho Arch Linux , cho đến nay vẫn không thành công: Tôi thực sự không biết tôi đang làm gì ...

Bất cứ ai có thể giúp tôi cổng này (hoặc tạo ra một cái gì đó như thế này từ đầu)? Hoặc, ít nhất, bất cứ ai cũng có thể chỉ cho tôi tài liệu về cách móc các công cụ vào quy trình tạm ngưng và cách giữ các tệp nhị phân và tập lệnh cần thiết (như cryptsetup) ngay cả khi tất cả IO để root đã bị chặn (bởi luksSuspend)?

Liên quan đến cách giữ các tệp nhị phân và tập lệnh cần thiết có sẵn cho sơ yếu lý lịch, bài đăng trên blog khác này (cũng dành cho Arch) đã sao chép chúng vào /boot; Tuy nhiên, tôi muốn sử dụng một cái gì đó nhiều hơn trong các dòng mà Vianney đã sử dụng trong kịch bản mà tôi đã đề cập trước đây, bởi vì cách tiếp cận đó có vẻ thanh lịch hơn một chút trong khía cạnh này.


Tôi dành thêm vài giờ cho việc này ...
Jonas Malaco

Tôi đã chỉnh sửa các kịch bản tạo nên pm-suspendvà có vẻ như tôi đã ở gần đó. Tuy nhiên, tôi phát hiện ra rằng tôi không thể tạm dừng hệ thống ( echo -n "mem" > /sys/power/state) sau khi đóng băng root fs ( cryptsetup luksSuspend ...), vì điều đó đòi hỏi một số tôi vẫn ...
Jonas Malaco

1
Tôi đã đọc một vài cuộc thảo luận về danh sách Debian (và một số danh sách khác được liên kết hoặc được liên kết với những danh sách này) và cho đến nay, có vẻ như trên giải pháp sẽ yêu cầu một cái gì đó giống như "deinitramfs": kernel sẽ xử lý quyền kiểm soát đối với deinitramfs ngay trước khi thực sự đình chỉ hệ thống, để các tmpfs này có thể thực hiện các hành động dọn dẹp cuối cùng (chẳng hạn như xóa khóa mã hóa cho rootfs).
Jonas Malaco

Tôi thực sự muốn thấy câu hỏi này trả lời quá.
BenAlabaster

Câu trả lời:


3

Tôi đã gặp một vấn đề tương tự, vì vậy tôi đã thực hiện một cú bắn khác khi chuyển cùng một kịch bản, mà bạn có thể thấy ở đây . Nó không chạm vào bất kỳ bộ lưu trữ không bay hơi nào sau đó luksSuspend, vì vậy nó hoạt động ngay cả với mã hóa toàn bộ đĩa thực với mã hóa / khởi động. Tuy nhiên, bạn sẽ cần phải cẩn thận - đôi khi nó có thể không hoạt động như mong đợi!

Kịch bản được chuyển đổi thực hiện như sau:

  • Tạo một ramfs mount ở đâu đó
  • Trích xuất nội dung của initramfs ở đó (bao gồm tập lệnh treo initramfs)
  • Ràng buộc gắn kết các thư mục có liên quan (ví dụ như /sys, /proc, /dev, /run) đến ramfs gắn kết
  • Dừng bất kỳ dịch vụ nào có thể can thiệp (systemd-udevd, systemd-journald)
  • Kết nối hệ thống tập tin gốc (ext4 hoặc btrfs) bằng nobarrier để Linux không bị treo khi cố gắng truy cập S3, sau đó đồng bộ hóa
  • Chroot vào mount initramfs, đồng bộ lại, chạy luksSuspendvà đặt máy tính ngủ
  • Sau khi thức dậy, luksResumehãy kết nối lại các hệ thống tập tin, khởi động lại các dịch vụ, ngắt kết nối các liên kết trong mount initramfs
  • Cuối cùng, ngắt kết nối mount initramfs để chúng tôi giải phóng RAM được sử dụng cho các tệp initramfs

Tôi vẫn chưa thực hiện thử nghiệm rộng rãi cho kịch bản của mình, nhưng nó dường như hoạt động đáng tin cậy đối với tôi. Nếu bạn sử dụng một hệ thống tập tin khác (không phải là ext4 hoặc btrfs), thì bạn có thể gặp sự cố với rào cản, do đó bạn cũng cần sửa đổi tập lệnh.

Dù bằng cách nào, thật tốt để kiểm tra và xác minh rằng các tập lệnh hoạt động trước. Nếu bạn gặp phải tình trạng treo máy trong khi cố gắng đưa Linux vào S3 (tức là tại echo mem > /sys/power/state), thì bạn sẽ có thể khôi phục:

  • Trước khi tạm dừng, hãy mở một tty hoặc thiết bị đầu cuối khác (có thể truy cập được, vì vậy lý tưởng là một tty)
  • Tải cryptsetup và các thư viện có liên quan vào RAM: sudo cryptsetup luksResume anything_here
  • Tạm dừng sử dụng tập lệnh
  • Nếu nó bị treo sau chroot (ví dụ sau khi starting version xxxđược hiển thị trên vt mới), hãy chuyển sang tty bạn đã mở trước đó và chạysudo cryptsetup luksResume your_luks_device_name_here
  • Nếu nó cũng bị treo, hãy mở một vt khác và chroot vào /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Cố gắng chạy luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Máy tính của bạn sẽ bị đình chỉ. Sau đó, bạn có thể đánh thức nó, tiêu diệt (các) tập lệnh nếu chúng vẫn đang chạy, ngắt kết nối các liên kết gắn kết và /run/initramfs, và giới thiệu lại hệ thống tập tin gốc của bạn với rào cản nếu có.

1

Tôi không có kinh nghiệm với thiết lập này, nhưng nhiều người khẳng định thành công trong việc này. Dưới đây là một vài trong số họ.

dm-crypt với LUKS - Mã hóa phân vùng Hoán đổi
Cách thực hiện: Ổ cứng được mã hóa hoàn toàn bao gồm cả việc tạm dừng phân vùng đĩa với Ubuntu 6.10 Edgy Eft ub
Ubuntu-full-đĩa-mã hóa-lvm-luks

Tuy nhiên không ai trong số họ sử dụng luksSuspend (có thể là lý do tại sao họ làm việc).


Cảm ơn các liên kết ... Tôi đang sử dụng một thiết lập tương tự như liên kết cuối cùng (tự động được tạo bởi trình cài đặt 13.04).
Jonas Malaco

Không có luksSuspend cho đến nay, phải tắt nguồn để xóa các phím khỏi bộ nhớ ... Tuy nhiên, cảm ơn vì các liên kết! Có lẽ bằng cách hiểu cách cấu hình thủ công này, tôi có thể hiểu rõ hơn về cách sử dụng luksSuspend cho việc sử dụng ram.
Jonas Malaco

1
luksSuspend có vẻ cực kỳ khó sử dụng. Khi nó đóng băng tất cả I / O, người ta cần một kịch bản đình chỉ rất nhào lộn. Tôi chỉ có thể tìm thấy một câu chuyện thành công bằng tiếng Đức có thể được dịch sang tiếng Anh . Hãy thử sử dụng nó như một mẫu.
harrymc

2
Bạn cũng có thể cần phải sử dụng đĩa ram và cryptsetup được liên kết tĩnh.
harrymc

1

Tôi đã dành một chút thời gian để có được chức năng đầy đủ này trên Ubuntu 15.10. Nếu bạn đang cố gắng để làm cho công việc này hoạt động trên ext2, ext3 hoặc ext4, bạn sẽ cần cập nhật / etc / fstab để gắn kết âm lượng với tùy chọn 'nobarrier'. Mặt khác, tôi đề nghị sử dụng BTRFS.

Khi hệ thống tập tin của bạn được chuẩn bị sẵn, hãy sử dụng tập lệnh tại đây: https://github.com/Microcentillion/ubfox-lukssuspend

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.