วิธีทำให้ RAM ปลอดภัยบน Ubuntu ด้วยการเข้ารหัสดิสก์เต็มรูปแบบ (LVM ด้านบนของ LUKS) เป็นอย่างไร


20

ฉันใช้ Ubuntu 13.04 โดยใช้การเข้ารหัสดิสก์เต็มรูปแบบ (LVM ด้านบนของ LUKS)

ฉันต้องการรวมluksSuspendไว้ในขั้นตอนการระงับ (และใช้ในภายหลังluksResume) เพื่อให้ฉันสามารถหยุดการทำงานของ RAM โดยไม่ทิ้งเนื้อหาสำคัญไว้ในหน่วยความจำและปลดล็อครูท

ฉันพยายาม 7 ชั่วโมงสุดท้ายในการย้ายสคริปต์สำหรับ Arch Linuxจนถึงขณะนี้ไม่ประสบความสำเร็จ: ฉันไม่ทราบเลยว่าฉันกำลังทำอะไร ...

ใครช่วยฉันพอร์ตนี้ (หรือสร้างสิ่งนี้ตั้งแต่เริ่มต้น)? หรืออย่างน้อยทุกคนสามารถชี้ให้ฉันเอกสารเกี่ยวกับวิธีการขอสิ่งที่เป็นขั้นตอนการระงับและวิธีการให้ไบนารีและสคริปต์ที่จำเป็น (เช่น cryptsetup) ใช้ได้แม้หลังจากทั้งหมด IO เพื่อรูทถูกบล็อก (โดยluksSuspend)?

เกี่ยวกับวิธีทำให้ไบนารีและสคริปต์ที่จำเป็นพร้อมใช้งานสำหรับการดำเนินการต่อโพสต์บล็อกอื่น (รวมถึง Arch) ที่คัดลอกไปยัง/boot; อย่างไรก็ตามฉันต้องการที่จะใช้บางสิ่งบางอย่างมากขึ้นในสิ่งที่ Vianney ใช้ในสคริปต์ที่ฉันพูดถึงก่อนหน้านี้


ฉันใช้เวลาอีกไม่กี่ชั่วโมงนี้ ...
โจนาส Malaco

ฉันแก้ไขสคริปต์ที่ทำขึ้นpm-suspendและดูเหมือนว่าฉันเกือบจะอยู่ที่นั่น อย่างไรก็ตามฉันพบว่าฉันไม่สามารถหยุดการทำงานของระบบ ( echo -n "mem" > /sys/power/state) หลังจากการตรึงรูต fs ( cryptsetup luksSuspend ...) เพื่อที่ยังคงต้องใช้ i / o อยู่ ...
Jonas Malaco

1
ฉันอ่านการสนทนาเล็กน้อยเกี่ยวกับรายการ Debian (และรายการอื่น ๆ ที่เชื่อมโยงหรือเชื่อมโยงกับรายการเหล่านี้) และจนถึงขณะนี้ปรากฏว่าในวิธีแก้ปัญหาจะต้องมีบางสิ่งเช่น "deinitramfs": เคอร์เนลจะจัดการควบคุม deinitramfs ก่อนที่จะระงับระบบจริงเพื่อให้ tmpfs นี้สามารถทำการดำเนินการล้างข้อมูลสุดท้าย (เช่นการลบคีย์การเข้ารหัสสำหรับ rootfs)
Jonas Malaco

ฉันต้องการเห็นคำถามนี้ตอบเหมือนกัน
BenAlabaster

คำตอบ:


3

ผมเคยเจอปัญหาเดียวกันดังนั้นฉันจึงยิงอีกที่ porting สคริปต์เดียวกันซึ่งคุณสามารถดูที่นี่ มันไม่ได้สัมผัสกับที่จัดเก็บข้อมูลแบบไม่ลบเลือนluksSuspendดังนั้นมันจึงสามารถใช้งานได้แม้จะมีการเข้ารหัสดิสก์เต็มรูปแบบจริง ๆ ด้วยการเข้ารหัส / การบูต อย่างไรก็ตามคุณจะต้องระมัดระวัง - อาจไม่ทำงานตามที่คาดไว้เป็นครั้งคราว!

สคริปต์พอร์ตทำสิ่งต่อไปนี้:

  • สร้าง ramfs เมานต์ที่ใดที่หนึ่ง
  • แยกเนื้อหาของ initramfs ที่นั่น (รวมถึงสคริปต์การระงับ initramfs)
  • ผูกติดไดเรกทอรีที่เกี่ยวข้อง (เช่น/sys, /proc, /dev, /run) เพื่อ ramfs ติด
  • หยุดบริการใด ๆ ที่อาจรบกวน (systemd-udevd, systemd-journald)
  • ติดตั้งระบบไฟล์รูทใหม่ (ext4 หรือ btrfs) ร่วมกับโนเบลเรียร์เพื่อให้ Linux ไม่หยุดขณะพยายามเข้าสู่ S3 จากนั้นซิงค์
  • Chroot ลงใน initramfs mount ซึ่งจะซิงค์อีกครั้งทำงานluksSuspendและทำให้คอมพิวเตอร์เข้าสู่โหมดสลีป
  • หลังจากปลุกแล้วluksResumeให้ติดตั้งระบบไฟล์ใหม่เริ่มบริการยกเลิกการเชื่อมต่อเชื่อมเมาท์ในการติดตั้งแบบเริ่มต้น
  • สุดท้ายให้ยกเลิกการเมานต์ของ initramfs เพื่อให้เราเพิ่ม RAM ที่ใช้สำหรับไฟล์ initramfs

ฉันยังไม่ได้ทำการทดสอบกับสคริปต์ของฉัน แต่ดูเหมือนว่าจะทำงานได้อย่างน่าเชื่อถือสำหรับฉัน หากคุณใช้ระบบไฟล์อื่น (เช่นไม่ใช่ ext4 หรือ btrfs) คุณอาจประสบปัญหากับสิ่งกีดขวางดังนั้นคุณจะต้องแก้ไขสคริปต์ด้วย

ไม่ว่าจะด้วยวิธีใดจะเป็นการดีที่จะทดสอบและตรวจสอบว่าสคริปต์ทำงานก่อน หากคุณประสบกับการแฮงค์ขณะพยายามใส่ Linux ลงใน S3 (เช่น at echo mem > /sys/power/state) คุณควรกู้คืนได้:

  • ก่อนที่จะระงับให้เปิด tty หรือเทอร์มินัลอื่น (ซึ่งจะสามารถเข้าถึงได้ดังนั้นควรเป็น tty)
  • โหลด cryptsetup และไลบรารีที่เกี่ยวข้องลงใน RAM: sudo cryptsetup luksResume anything_here
  • ระงับการใช้สคริปต์
  • หากแฮงค์หลังจาก chroot (เช่นหลังจากstarting version xxxแสดงบน vt ใหม่) ให้เปลี่ยนไปที่ tty ที่คุณเปิดก่อนหน้านี้แล้วรันsudo cryptsetup luksResume your_luks_device_name_here
  • หากแฮงค์ด้วยให้เปิด vt อีกอันแล้วเปลี่ยนเป็น/run/initramfs:sudo chroot /run/initramfs /bin/ash
  • พยายามเรียกใช้luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • คอมพิวเตอร์ของคุณควรหยุดการทำงานชั่วคราว จากนั้นคุณสามารถปลุกขึ้นมาฆ่าสคริปต์หากพวกเขายังคงทำงานอยู่ให้/run/initramfsถอนการเชื่อมต่อการผูกติดและและติดตั้งระบบไฟล์รูทของคุณอีกครั้งด้วยสิ่งกีดขวางหากทำได้

1

ฉันไม่มีประสบการณ์กับการตั้งค่านี้ แต่หลายคนอ้างว่าประสบความสำเร็จในเรื่องนี้ นี่คือคู่ของพวกเขา

dm-crypt พร้อม LUKS - การเข้ารหัสพาร์ทิชัน Swap
วิธีการ: เข้ารหัสอย่างสมบูรณ์ในฮาร์ดดิสก์รวมถึงการระงับพาร์ติชันดิสก์ด้วย Ubuntu 6.10 Edgy Eft
ubuntu-full-disk-encryption-lvm-luks

อย่างไรก็ตามไม่มีของพวกเขาใช้ luksSuspend (ซึ่งอาจเป็นสาเหตุที่พวกเขาทำงาน)


ขอบคุณสำหรับลิงค์ ... ฉันใช้การตั้งค่าที่คล้ายกับลิงค์สุดท้าย (สร้างโดยอัตโนมัติจากโปรแกรมติดตั้ง 13.04)
Jonas Malaco

ไม่ luksSuspend ต้องปิดเครื่องเพื่อล้างกุญแจจากหน่วยความจำ ... อย่างไรก็ตามขอบคุณสำหรับลิงค์! บางทีโดยการทำความเข้าใจวิธีการกำหนดค่านี้ด้วยตนเองฉันสามารถรับข้อมูลเชิงลึกเกี่ยวกับวิธีการใช้ luksSuspend สำหรับสงสัย ram
Jonas Malaco

1
luksSuspend ดูเหมือนใช้งานยากมาก เนื่องจากมันค้าง I / O ทั้งหมดจึงต้องมีสคริปต์ suspend กายกรรมมาก ฉันสามารถหาเพียงหนึ่งความสำเร็จในเรื่องในเยอรมันซึ่งสามารถ (ไม่ดี) แปลเป็นภาษาอังกฤษ ลองใช้เป็นเทมเพลต
harrymc

2
คุณอาจต้องใช้ ram-disk และ cryptsetup ที่ลิงก์แบบสแตติก
harrymc

1

ฉันใช้เวลาในการทำให้การทำงานอย่างสมบูรณ์บน Ubuntu 15.10 หากคุณพยายามที่จะทำให้การทำงานนี้ใน ext2, ext3 หรือ ext4 คุณจะต้องอัปเดต / etc / fstab เพื่อติดตั้งไดรฟ์ด้วยตัวเลือก 'nobarrier' มิฉะนั้นฉันแนะนำให้ใช้ BTRFS

เมื่อระบบไฟล์ของคุณถูก prepped ให้ใช้สคริปต์ที่นี่: https://github.com/Microcentillion/ubuntu-lukssuspend

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.