วิธีการติดตั้ง Ubuntu พร้อมทั้งการเข้ารหัสดิสก์และการแคช SSD


10

ฉันใช้ Ubuntu ในสภาพแวดล้อมขององค์กรและนโยบายความปลอดภัยของเราระบุว่าเราต้องใช้การเข้ารหัสดิสก์เต็มรูปแบบ

ฉันยังมีแล็ปท็อปที่มี 32GB mSATA SSD และสนิมหมุน 750GB การติดตั้งปัจจุบันของฉันใช้ bcache เพื่อใช้ประโยชน์จากสิ่งนี้ติดตั้งโดยใช้ขั้นตอนนี้ นี่เป็นการเพิ่มประสิทธิภาพการต้อนรับอย่างมากโดยที่ฉันไม่ต้องกังวลกับการเติม SSD

นี่จะเป็นคำถามที่ได้รับการโปรดปราน เงินรางวัลจะมอบให้สำหรับ:

  • วิธีการที่ชัดเจนและเชื่อถือได้ในการติดตั้ง Ubuntu ใหม่
    • การเปิดตัวใด ๆ ที่เป็นที่ยอมรับ แต่ 15.04 (สดใส) จะดี
  • ระบบไฟล์ทั้งหมดจะถูกเข้ารหัส
    • การตั้งค่าที่นี่คือการใช้ช่องทำเครื่องหมายที่เกี่ยวข้องในโปรแกรมติดตั้ง Ubiquity เริ่มต้น (การเข้ารหัส dm-crypt)
  • ระบบไฟล์จะถูกแคชบน SSD
    • สำหรับการตั้งค่าวิธีเคอร์เนล dm-cache / lvmcache ดูที่นี่สำหรับวิธีการทำสิ่งนี้กับ Debian Jessie
    • แคชนั้นจะต้องปลอดภัย (เช่นเข้ารหัส)
    • จะต้องมีคำอธิบายที่ชัดเจนว่าเหตุใดจึงเข้ารหัสแคช

ลองใช้วิธีสำหรับ Debian Jessie ด้านบนแล้ว แต่ไม่ยอมบูตให้ฉัน ไม่ได้เพื่อให้ห่างไกลพยายามวิธีการอธิบายในการแสดงความคิดเห็นที่นี่

โซลูชั่นที่โพสต์จะได้รับการทดสอบบน VirtualBox VM พร้อมด้วยดิสก์เสมือนเปล่าสองแผ่นและสำเนารีลีสของเดสก์ท็อป 15.04 (รุ่น amd64) เงินรางวัลไปที่โซลูชันแรกที่ฉันใช้เพื่อติดตั้งฮาร์ดแวร์จริงของฉัน

โปรดเขียนวิธีการแก้ปัญหาของคุณราวกับว่ามันจะเข้าไปในวิกิชุมชน


ฉันได้รับรางวัล - ฉันคิดว่ายังคงมีศักยภาพสำหรับโซลูชัน "LUKS-on-LVM" ที่รวมความสะดวกของคำตอบที่ได้รับการอนุมัติในการมีรหัสผ่านเพียงครั้งเดียวด้วยการใช้ส่วนประกอบอุปกรณ์ตัวทำแผนที่


จากสิ่งที่ฉันเข้าใจคุณไม่ต้องการใช้ lvmcache ใน LVM เริ่มต้นบน LUKS ubuntu ติดตั้งเพราะแคชจะไม่ได้เข้ารหัส
solsTiCe

@ solsTiCe - มันเป็นความเข้าใจของฉันที่ lvmcrypt เป็นเลเยอร์ง่าย ๆ ที่ดีบน dm-cache น่าจะเป็นไปได้ที่จะคืนดีกับ LUKS เช่นกัน (LUKS เป็นอีกสิ่งหนึ่งในอุปกรณ์ mapper, dm-crypt) สิ่งต่าง ๆ รอบตัวคุณ
เอเดรียน

คุณควรเข้าใจว่า / boot พาร์ทิชันส่วนใหญ่จะต้องมีการเข้ารหัส bcache เข้ากันไม่ได้กับด้วงบน Ubuntu 14.04 และฉันเชื่อว่ามันยังคงเป็น
Adam Ryczkowski

@AdamRyczkowski ใช่ฉันมีการกำหนดค่าที่ตอนนี้ เป็นที่ยอมรับ แต่ฉันต้องการกำหนดค่า LUKS
เอเดรีย

ฉันไม่เห็นว่าทำไม LUKS ถึงแยก bcache ... พวกเขาไม่ได้พึ่งพาซึ่งกันและกันและใคร ๆ ก็สามารถนั่งทับกันได้อย่างมีความสุข
Adam Ryczkowski

คำตอบ:


7

LVM บน LUKS บน bcache

ที่นี่เกมตุ๊กตารัสเซียนี้มีความลึกเล็กน้อยด้วย 3 กอง / ชั้น ...

แนวคิดเริ่มต้นของฉันเกี่ยวกับคำถามนี้คือการใช้การติดตั้ง Ubuntu เริ่มต้นด้วยLVM บน LUKSและแปลงเป็นอุปกรณ์สำรองข้อมูลbcacheด้วยบล็อกแต่มันไม่ได้ผลสำหรับการทดสอบกับ LVM ของฉัน

ยิ่งไปกว่านั้นตัวติดตั้ง ubuntu ( ubiquity ) ถูก จำกัด เกินกว่าที่จะติดตั้งในอุปกรณ์bcache ที่เตรียมไว้ล่วงหน้า (อย่างน้อยก็มี LUKS บน LVM) ดังนั้นเราจึงกลับไปใช้วิธีการทำสิ่งต่าง ๆ ด้วยตนเอง

บูตเข้าสู่ CD / USB สดแล้วเลือก "ลอง Ubuntu" และเปิดเทอร์มินัล

ติดตั้งล่วงหน้า

sudo -i
# Define some variable to avoid confusion and error
luks_part=/dev/sda3
boot=/dev/sda2                    # boot partition
caching_bcache=/dev/sdb           # SSD or partition in SSD

# Do secure erase of encrypted backing and caching device (see Notes [1])
dd if=/dev/urandom of=$luks_part || dd if=/dev/urandom of=$caching_bcache
# Go and grab some coffe, this will take a while...

apt-get install bcache-tools
# Setup bcache caching and backing devices
make-bcache -C $caching_bcache -B $luks_part
# (Optional) Tweak bcache
echo writeback > /sys/block/bcache0/bcache/cache_mode

# Below we now create manually what ubiquity should have done for us
# Setup LUKS device on bcache device
cryptsetup --key-size 512 luksFormat /dev/bcache0
cryptsetup luksOpen /dev/bcache0 crypted

# Setup LVM on LUKS
# You can skip that part if you don't want to use a swap
# or don't want to use multiple partition. Use /dev/mapper/crypted
# as you root latter on
pvcreate  /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
lvcreate -L 1G vg -n swap
lvcreate -l 100%FREE vg -n root

การติดตั้ง

เปิดเทอร์มินัลค้างไว้และทำการติดตั้งในขณะนี้ เลือก "อย่างอื่น" เมื่อแบ่งพาร์ติชันและระบุ

  • พาร์ติชันสำหรับเริ่มระบบของคุณ ( /dev/sda2)
  • พาร์ติชั่นรูทของคุณ ( /dev/mapper/vg-root)
  • การแลกเปลี่ยนของคุณ ( /dev/mapper/vg-swap)

และทำเครื่องหมายในช่องเพื่อจัดรูปแบบพาร์ติชันของคุณ

ในตอนท้ายของการติดตั้งอย่ารีบูตแต่เพียงแค่คลิก "ลองอูบุนตูต่อ"

โพสต์ติดตั้ง

ในเทอร์มินัลที่เปิดของเรา

# Install bcache-tools to add bcache module to initramfs
mount /dev/mapper/vg-root /mnt
mount $boot /mnt/boot
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
# To get apt-get running in the chroot
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
apt-get install bcache-tools

# Create /etc/crypttab to add crypted bcached partition
echo "crypted UUID=`blkid -o value /dev/bcache0|head -1` none luks" > /etc/crypttab

exit
sync
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt
vgchange -an /dev/mapper/crypted
cryptsetup luksClose crypted
sync

# Reboot & enjoy

มีข้อผิดพลาด Ubuntu 15.04 รีบูทที่รู้จักจาก Live CD / USB ดังนั้นคุณอาจต้องบังคับให้รีบูต / ปิดเครื่อง

ตรวจสอบ

เมื่อบู๊ตแล้วคุณสามารถตรวจสอบว่า/dev/bcache0จริง ๆ แล้วเป็นพาร์ติชันLUKSด้วย

if sudo cryptsetup isLuks /dev/bcache0; then \
    echo "crypted";\
    else echo "unencrypted";\
fi

นี่เป็นเพราะมันเป็นแคชของพาร์ติชัน LUKS ของคุณและตอนนี้คุณเข้าถึงข้อมูลของคุณผ่านอุปกรณ์/dev/bcache0และไม่เคยมาจากอุปกรณ์สำรองข้อมูล ( /dev/sda3ที่นี่)

อ้างอิง

http://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://wiki.archlinux.org/index.php/Dm-crypt

bcache-statusยังไม่ถูกรวมเข้ากับ bcache-tools อย่างเป็นทางการ คุณสามารถรับได้ที่นี่: https://gist.github.com/djwong/6343451

[1] อาจมีวิธีที่ดีกว่าในการเช็ดสิ่งนี้


ตรวจสอบให้แน่ใจว่าได้รันupdate-initramfs -uk allหลังจากการสร้าง crypttab และทำตามexitคำสั่ง
กลัด

4

LVM สำหรับ LUKS + LUKS / dm-cache

เครื่องมือติดตั้ง Ubuntu ใช้LVM บนการกำหนดค่าLUKSเพราะเป็นการเข้ารหัสดิสก์เต็มรูปแบบ

หากคุณต้องการใช้ dm-cache / lvmcache เพื่อเพิ่มประสิทธิภาพคุณจะต้องวางแคชพูลของคุณลงในโวลุ่มที่เข้ารหัสเพื่อรักษาความปลอดภัยของข้อมูลของคุณ

ขั้นตอนคือ

  • สร้างปริมาณ LUKS บนอุปกรณ์บล็อกเป้าหมาย
  • ขยายกลุ่มวอลุ่มดีฟอลต์ด้วยวอลุ่ม LUKS ที่เข้ารหัสใหม่
  • สร้างข้อมูลเมตาแคชและปริมาณข้อมูลในวอลุ่ม LUKS ใหม่
  • ผูกไว้ด้วยกันเป็นพูลแคช
  • ผูกแคชพูลนี้กับโวลุ่มรูต
  • ตรวจสอบให้แน่ใจว่าสามารถติดตั้งวอลลุ่มลับที่เข้ารหัสใหม่ตอนบูตโดยเพิ่มลงใน /etc/crypttab
  • ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมการบูตของคุณรองรับ dm-cache

สคริปต์ด้านล่างแสดงตัวอย่างและจะเพิ่มแคชพูลที่เข้ารหัสไปยังระบบไฟล์รูทที่มีอยู่ มันถูกออกแบบมาสำหรับระบบที่ใช้ตัวเลือกการเข้ารหัสดิสก์เริ่มต้นในตัวติดตั้ง Ubuntu - เช่น; ดิสก์ทั้งพาร์ติชันและเข้ารหัสไม่มีพาร์ติชันแบบกำหนดเอง ฯลฯ

โปรดทราบว่ามีการตรวจสอบหรือการเขียนโปรแกรมป้องกันน้อยมากในสคริปต์นี้ ถ้ามันทำลายระบบการทำงานของคุณนั่นคือความรับผิดชอบของคุณ

โทรหา:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. ต้องการรูทเพื่อทำงาน
  2. เรียกใช้สคริปต์ในทุบตี
  3. ชื่อสคริปต์
  4. อุปกรณ์บล็อกที่คุณต้องการใช้ (ทดสอบกับดิสก์ทั้งหมดเท่านั้น)
  5. ขนาดข้อมูลเมตา
  6. ขนาดข้อมูลแคช

พารามิเตอร์ขนาดเป็นค่าเริ่มต้นเป็น MB: คุณจะต้องมีอัตราส่วน 1: 1,000 พื้นที่ข้อมูลเมตาต่อพื้นที่แคช (เช่นหากดิสก์แคชของคุณคือ 180GB คุณต้องมีพื้นที่ข้อมูลเมตา 180MB และพื้นที่ข้อมูล 179820MB - คุณอาจต้องการปัดเศษ เมตาดาต้าที่จะระมัดระวังเล็กน้อยมีขีด จำกัด ต่ำกว่าสำหรับเมตาดาต้าของ 8M.)

คุณจะได้รับแจ้งรหัสผ่านสำหรับปริมาณแคชของคุณ - คุณจะได้รับแจ้งรหัสผ่านสำหรับทั้งสองของดิสก์ของคุณในระหว่างการบูต

อ้างอิง


#! / bin / ทุบตี
#
# lvmcryptocache
#
# เพิ่มพูลแคช LVM และเชื่อมต่อกับปริมาณรูท
# รวมถึงการเข้ารหัส LUKS
# สมมติว่าคุณใช้การตั้งค่า "all on root"
# ถ้าคุณไม่ปรับมันถ้าคุณชอบ
#
# สคริปต์ลิขสิทธิ์ GPL3 หรือใหม่กว่า
# © Adrian Wilkins พฤษภาคม 2015
#
# ส่งชื่ออุปกรณ์ดิสก์ที่คุณใช้เป็นแคช
# สิ่งนี้ควรจะว่างเปล่าโดยสิ้นเชิงดังนั้นควรดำเนินการ
#
# dd if = / dev / zero of = / dev / $ {DISK}
#
# เหนือมันเป็นเวลาสั้น ๆ เพื่อนุ๊กตารางพาร์ทิชัน

CACHE_DISK = $ 1
META_SIZE = $ 2
DATA_SIZE = $ 3

DISK_NAME = $ (ชื่อฐาน $ CACHE_DISK)

CRYPT_VOLUME = $ {} DISK_NAME _crypt
CACHE_PV = / dev / mapper / $ {} CRYPT_VOLUME

# สร้างปริมาณ LUKS ในดิสก์ดิบ

cryptsetup luksFormat $ CACHE_DISK
cryptsetup open - ประเภท luks $ CACHE_DISK $ CRYPT_VOLUME

# เริ่มลองและหาขนาดของดิสก์ แต่มันซับซ้อน
# ไปถ้าคุณชอบฉันยังคงวิ่งออกไปจากขอบเขต
#
# DISK_SIZE = $ (fdisk -l | grep "ดิสก์ $ {CACHE_DISK}" | awk '{พิมพ์ $ 5}')
# 
# META_SIZE = $ ((DISK_SIZE / 1,000))
# META_SIZE = $ ((META_SIZE + 512))
# MOD = $ ((META_SIZE% 512))
# MOD_OFFSET = $ ((512 - MOD))
# META_SIZE = $ ((META_SIZE + 512)) 
# META_SIZE = $ ((META_SIZE + MOD_OFFSET))
# 
# DATA_SIZE = $ ((DISK_SIZE - META_SIZE))
# 

# สร้าง PV ใหม่ภายในโวลุ่มที่เข้ารหัส

pvcreate $ CACHE_PV
vgextend ubuntu-vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n cachemeta ubuntu-vg $ CACHE_PV
lvcreate -L $ {DATA_SIZE} -n cachedata ubuntu-vg $ CACHE_PV
lvconvert - ประเภทแคชสระ --poolmetadata ubuntu-vg / cachemeta - cachemode writethrough ubuntu-vg / cachedata - ใช่
lvconvert - แคชชนิด --cepepool อูบุนตู - vg / cachedata อูบุนตู - vg / ราก

# ตอนนี้เพิ่ม UUID ของแคชพูล PHYSICAL DRIVE (/ dev / sdb) ไปที่ / etc / crypttab
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{พิมพ์ $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} ไม่มี luks, ละทิ้ง" >> / etc / crypttab

apt-get install - มี thin-provisioning-tools

HOOK = $ (tempfile)
# เพิ่มเบ็ดสคริปต์เพื่อเริ่มต้นเพื่อเพิ่มเครื่องมือและโมดูลที่เหมาะสม

echo "#! / bin / sh"> $ HOOK
echo "PREREQ =" lvm2 "" >> $ HOOK
echo "prereqs ()" >> $ HOOK
echo "{" >> $ HOOK
echo "echo \" $ PREREQ \ "" >> $ HOOK
echo "}" >> $ HOOK
echo "กรณี $ 1 ใน" >> $ HOOK
echo "prereqs)" >> $ HOOK
echo "prereqs" >> $ HOOK
echo "exit 0" >> $ HOOK
echo ";;" >> $ ตะขอ
echo "esac" >> $ HOOK
echo "if [! -x / usr / sbin / cache_check];" >> $ HOOK
echo "exit 0" >> $ HOOK
echo "fi" >> $ HOOK
echo ". / usr / share / initramfs-tools / hook-function" >> $ HOOK
echo "copy_exec / usr / sbin / cache_check" >> $ HOOK
echo "manual_add_modules dm_cache dm_cache_mq dm_persistent_data dm_bufio" >> $ HOOK

cp $ HOOK / etc / initramfs-tools / hooks / lvmcache
chmod + x / etc / initramfs-tools / hooks / lvmcache

echo "dm_cache" >> / etc / initramfs-tools / modules
echo "dm_cache_mq" >> / etc / initramfs-tools / modules
echo "dm_persistent_data" >> / etc / initramfs-tools / modules
echo "dm_bufio" >> / etc / initramfs-tools / modules

# อัปเดต initramfs

update-initramfs -u

echo ทีนี้รีบูต!

1.คุณแนะนำให้ล้างดิสก์แคชของคุณด้วยศูนย์ แต่คุณควรลบทิ้งด้วยข้อมูลแบบสุ่มหากคุณต้องการวาง LUKS ที่เข้ารหัสไว้ 2.ในการตั้งค่าคุณมีพาร์ติชั่น 2 LUKS แม้ว่าคุณจะใช้ข้อความรหัสผ่านเดียวกันคุณต้องใส่มันสองครั้งใช่มั้ย
solsTiCe

1. การลบดิสก์แบบสุ่มนั้นล้าสมัยไปเล็กน้อยบนฮาร์ดแวร์ที่ทันสมัย ​​- เลขศูนย์ก็เพียงพอที่จะวางดิสก์ให้อยู่เหนือมาตรการระดับที่ไม่ใช่เชิงวิชาการมากที่สุดและแน่นอนกว่าห้องปฏิบัติการกู้คืนดิสก์ในเชิงพาณิชย์ นอกจากว่าคุณกำลังใช้ข้อมูลที่สำคัญที่เก็บไว้ก่อนหน้านี้มันไม่จำเป็นเพราะบล็อกทั้งหมดที่เขียนไปนั้นจะถูกเข้ารหัส เนื่องจากอัลกอริธึมการสึกหรอระดับคุณไม่ควรใช้ SSD ที่มีข้อมูลที่ละเอียดอ่อนแบบธรรมดาเลย 2. ใช่มีพาร์ทิชัน 2 LUKS อย่างที่ฉันพูดในข้อความคุณจะได้รับพร้อมท์สำหรับข้อความรหัสผ่านทั้งสองระหว่างการบูต
Adrian

การลบแบบสุ่มนั้นไม่ใช่เพื่อลบข้อมูลบน SSD อย่างปลอดภัย แต่เพื่อหลีกเลี่ยงการตรวจสอบและสามารถแยกแยะข้อมูลที่เข้ารหัสจากช่องว่างเช่น 00000000zerazer000000000000 ตรงนี้คุณจะเห็นข้อมูลที่เข้ารหัสตรงกลาง สิ่งนี้ทำให้การเข้ารหัสของคุณลดลงแทนที่จะเป็นการซ่อนตัวอยู่กลางซุปแบบสุ่ม
solsTiCe

ฉันลงเอยด้วยเส้นทางนี้หลังจากติดตั้ง bcache แล้ว | cache_utilization_pct | 79.096846147 |มันดูเหมือนว่ามันทำงานสวยดี: อย่างไรก็ตามในtopฉันเห็น iowait ระบุ 20-50% อย่างต่อเนื่อง นั่นอาจเป็นผลข้างเคียงของการบัฟเฟอร์หรือไม่?
Jean Jordaan

ฉันไม่สามารถอ้างสิทธิ์ได้ว่ารู้จริง ๆ - แต่ฉันเดาว่ามันอาจเป็นผลข้างเคียงของการเพิ่มประสิทธิภาพที่เกี่ยวข้องกับการลดการเขียนลง SSD บทความเกี่ยวกับ IOWait ที่นี่: thattommyhall.com/2011/02/18/iops-linux-iostat
Adrian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.