จะกำหนดค่า LVM & LUKS ให้เป็น autodecrypt partition ได้อย่างไร?


21

ฉันเพิ่งติดตั้งเซิร์ฟเวอร์อูบุนตู 11.04 ด้วยการเข้ารหัส lvm เต็มรูปแบบ (ติดตั้งจากการตั้งค่า) ตอนนี้ฉันต้องการใช้ไฟล์กุญแจเพื่อทำการปลดล็อคอัตโนมัติ ฉันได้ลองทำตามคำแนะนำนี้http://ubuntuforums.org/showthread.php?t=837416

ฉันสร้างรหัสด้วยคำสั่งนี้: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

ฉันใส่ใน/boot/grubเพราะฉันคิดว่ามันไม่ได้เข้ารหัส เมื่อฉันพยายามที่จะเพิ่มกุญแจด้วยคอมม่านี้sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile มันถามฉันสำหรับวลีรหัสผ่านและเมื่อฉันใส่มันไม่มีอะไรเกิดขึ้นไม่มีอะไรถูกพิมพ์ไปที่หน้าจอ! ฉันไม่สนใจมันและทำตามขั้นตอนอื่น ๆ และเริ่มต้นใหม่ แต่ไม่มีอะไรเกิดขึ้นและมันขอรหัสผ่าน

ขอบคุณสำหรับความช่วยเหลือ


คุณหมายถึงถอดรหัสโดยไม่ต้องใส่วลีรหัสผ่าน? หากกระบวนการบู๊ตสามารถทำเช่นนั้นได้คีย์ที่จำเป็นในการถอดรหัสโวลุ่มจะต้องอยู่ในระบบที่สามารถเข้าถึงได้ในระหว่างการบู๊ต คุณคาดหวังสิ่งนั้นอย่างไรเพื่อปกป้องคุณจากการโจรกรรมข้อมูล
James Henstridge

ใช่ฉันคิดว่าฉันจะใส่กุญแจในพาร์ทิชันที่ซ่อนอยู่หรือแฟลชไดรฟ์ usb เป็นไปได้ไหม
isoman

ปัญหาคือว่าถ้าตัวโหลดการบูตสามารถค้นหาคีย์ได้มีคนตรวจสอบรหัสการบูต (ไม่เข้ารหัส) ก็จะสามารถค้นหาได้ หากคุณเก็บกุญแจไว้ในแท่ง USB คุณต้องแน่ใจว่าก้านนั้นจะไม่ถูกขโมยกับคอมพิวเตอร์ หากคุณเพียงแค่เสียบก้านไม้ระหว่างการบู๊ตมันก็ไม่สะดวกไปกว่าการป้อนข้อความรหัสผ่าน
James Henstridge

คำตอบ:


27

ฉันเพิ่งผ่านสิ่งนี้ไปที่บ้านเซิร์ฟเวอร์ใหม่ของฉันมันใช้เวลามากและการคาดเดา googling แต่ฉันได้ทำงาน ฉันจะพยายามทำซ้ำขั้นตอนที่นี่ ฉันใช้ Ubuntu Server 11.10 และเริ่มต้นด้วยการติดตั้งมาตรฐานที่ค่อนข้างใช้การเข้ารหัส LVM ดังนั้นฉันจะเชื่อมโยงการเปลี่ยนแปลงที่เกิดขึ้นจากที่นั่น

ติดตั้ง:

  • / dev / sda1 เป็นพาร์ติชัน / boot ที่ไม่ได้เข้ารหัสของฉัน
  • / dev / sda5 เป็นพาร์ทิชัน lvm ของฉันซึ่งมีทุกอย่างอื่น - รูท, swap, และ home
  • / dev / sdc1 เป็นพาร์ติชันในแฟลชไดรฟ์ USB ของฉันที่ฉันจะเก็บคีย์ไฟล์

ก่อนอื่นฉันสร้าง keyfile ในไดเรกทอรีหลักของฉัน

dd if=/dev/urandom of=keyfile bs=512 count=4

(คุณสามารถใช้ขนาดใหญ่กว่าบล็อกหรือนับเป็นคีย์ขนาดใหญ่กว่า)

บอกให้ cryptsetup คีย์ใหม่ (เป็นเนื้อหาที่สำคัญไม่ใช่ชื่อไฟล์):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

จากนั้นฉันฟอร์แมตแฟลชไดรฟ์ USB ที่มี ext2 และให้ป้ายกำกับ ฉันใช้ป้ายกำกับเพื่อที่ในภายหลังจะสามารถติดป้ายกำกับได้และแทนที่แฟลชไดรฟ์ USB ในกรณีที่มีบางอย่างผิดปกติ

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(แน่นอนอุปกรณ์ของคุณจะแตกต่างกันไป)

ตอนนี้คัดลอก keyfile ไปยังแฟลชไดรฟ์ USB เป็นเจ้าของโดยโหมด root 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

แก้ไข / etc / crypttab เหมืองเดิมมี

sd5_crypt UUID=(...) none luks

ซึ่งฉันเปลี่ยนเป็น

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

ในที่สุดอัปเดต initramfs:

sudo update-initramfs -uv

ตอนนี้บูทโดยใช้คีย์ไฟล์บน USB แฟลชไดรฟ์ ถ้าฉันถอดแฟลชไดรฟ์ (พูดเมื่อฉันไปเที่ยวพักผ่อน) มันจะไม่บู๊ตและข้อมูลของฉันก็ปลอดภัย

หากใครรู้วิธีที่จะให้มันถามรหัสผ่านหากแฟลชไดรฟ์ USB หายไปนั่นจะเป็นประโยชน์อย่างมาก หวังว่านี่จะช่วยได้การเพิ่มเติมหรือการแก้ไขใด ๆ จะเป็นมากกว่าการต้อนรับ!


3
หากคุณไม่แน่ใจว่าจะรับพรอมต์รหัสผ่านได้อย่างไรคุณสามารถใช้พาร์ติชันที่สามารถบู๊ตได้ในแฟลชไดรฟ์เพื่อโหลดผ่าน initramfs สำรองที่ค้นหา keyfile และมีการบูตเริ่มต้นบนฮาร์ดดิสก์โหลด initram ปกติที่พร้อมท์ให้ รหัสผ่าน
Reinstate Monica - ζ--

1
@ 3pic ฉันไม่แน่ใจ 100% ตั้งแต่ฉันทำแบบนี้มาหลายเดือนแล้ว แต่ Ubuntu ก็บูทเข้าสู่ระบบไฟล์เสมือน keyscript=/lib/cryptsetup/scripts/passdevเพิ่มpassdevสคริปต์ให้กับมัน จากนั้นupdate-initramfs -uvสร้างไฟล์เก็บถาวรระบบไฟล์อีกครั้ง
VarunAgw

1
@RandyOrrison นี่มันยอดเยี่ยมจริงๆ มันได้ผล. แต่ ... หลังจากที่มันได้รับ initram ที่ผ่านมามันก็จะอยู่เป็นเวลาหนึ่งหรือสองนาทีกับA start job is running for dev-sda8:-keyfile.device (1min 18s...)มัน ฯลฯ มันผ่านไปทุกอย่างถูกติดตั้งแล้ว แต่มันก็หยุดสักครู่ บันทึกบอกว่า "หมดเวลารออุปกรณ์ dev-sda8: -sda7keyfile.device การอ้างอิงล้มเหลวสำหรับ Crypto Setup สำหรับ sda7crypt" แน่นอนมันถูกติดตั้งโดย initram แต่ .... ฉันทำอะไรผิดหรือเปล่า?
deitch

1
ด้วยเหตุผลบางอย่างดูเหมือนจะไม่ชอบ / ทำงานกับ systemd; มันจะละเว้นkeyscriptฟิลด์ทั้งหมด
Etienne Bruines

1
ใน Ubuntu 17.10+ เครื่องมือ update-initramfs จะไม่สร้างอิมเมจ initramfs ที่สามารถบูทไดรฟ์ข้อมูล luks ได้หากระบบไฟล์รูทของคุณอยู่ในวอลุ่ม luks และมีไฟล์คีย์ คุณสามารถทำให้มันทำงานได้โดยปล่อยให้ "none" เป็นค่า keyfile และการตั้งค่าตัวเลือกเพื่อให้ keyscript = / etc / my-keyscript โดยที่ / etc / my-keyscript เป็นเชลล์สคริปต์ที่พิมพ์คีย์
Macil

6

คำแนะนำเหล่านี้จาก howtoforge.com ทำให้ฉันใช้งานได้กับโวลุ่มการถอดรหัสอัตโนมัติ

วิธีการ: ปลดล็อกไดรฟ์ที่เข้ารหัส LUKS โดยอัตโนมัติด้วย A Keyfile

ขั้นตอนที่ 1: สร้างคีย์ไฟล์แบบสุ่ม

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

ขั้นตอนที่ 2: ทำให้ keyfile เป็นแบบอ่านอย่างเดียวเพื่อรูท

sudo chmod 0400 /root/keyfile

ซึ่งจะทำให้ keyfile สามารถอ่านได้โดย root เท่านั้น หากมีคนเข้าถึงไฟล์คีย์นี้แสดงว่าคุณมีปัญหาใหญ่ในคอมพิวเตอร์ของคุณอยู่แล้ว

อีกทางเลือกหนึ่งที่จะทำให้คีย์ไฟล์ที่คุณต้องการรูท: รูทและย้ายไปไว้ที่โฟลเดอร์ / รูท

ขั้นตอนที่ 3: เพิ่ม keyfile ไปยัง LUKS

อุปกรณ์ที่เปิดใช้งาน LUKS / dm_crypt อาจเก็บคีย์ไฟล์ / รหัสผ่านได้สูงสุด 10 รายการ ดังนั้นถัดจากการมีรหัสผ่านการตั้งค่าแล้วเราจะเพิ่ม keyfile นี้เป็นวิธีการอนุญาตเพิ่มเติม

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX แน่นอนอุปกรณ์ LUKS ของคุณ

ก่อนอื่นคุณจะได้รับแจ้งให้ป้อนรหัสผ่าน (ที่มีอยู่) เพื่อปลดล็อกไดรฟ์ หากทุกอย่างทำงานได้ดีคุณควรได้ผลลัพธ์ดังนี้:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

ขั้นตอนที่ 4: สร้างผู้ทำแผนที่

อุปกรณ์ LUKS จำเป็นต้องสร้าง mapper ที่สามารถอ้างอิงได้ใน fstab เปิด / etc / crypttab

sudo nano /etc/crypttab

และเพิ่มบรรทัดเช่นนี้:

sdX_crypt      /dev/sdX  /root/keyfile  luks

หรือคุณสามารถใช้ UUID ของอุปกรณ์:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt เป็นชื่อของผู้ทำแผนที่ที่กำลังสร้าง คุณสามารถใช้ชื่อใดก็ได้เช่น "เพลง" หรือ "ภาพยนตร์" หรือ "sfdsfawe" ....

บันทึกและปิดไฟล์โดยใช้ ctrl-x, enter, enter Ctrl-x ปิด nano แต่ก่อนอื่นขอให้บันทึกไฟล์ [ใช่ = enter] และชื่อจะเป็นชื่อใด [ชื่อเดียวกัน = ใส่]

สิ่งที่เราทำที่นั่นจริงบอกว่าจะใช้ / root / keyfile แทนการป้อนรหัสผ่านเพื่อปลดล็อกไดรฟ์

ขั้นตอนที่ 5: ติดตั้งอุปกรณ์ใน fstab

ตอนนี้เรามีอุปกรณ์ที่ปลดล็อคแล้ว (แต่ยังเมื่อระบบกำลังบู๊ตด้วย) และตอนนี้เราก็ต้องติดตั้งทันที เปิด / etc / fstab:

sudo nano /etc/fstab

และเพิ่มรายการใหม่เช่น:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

ตรวจสอบให้แน่ใจว่าคุณมีชื่อ mapper ที่ถูกต้องที่คุณเพิ่มในขั้นตอนที่ 4 นอกจากนี้ตรวจสอบให้แน่ใจว่ามีจุดเชื่อมต่อ / โฟลเดอร์อยู่ หลังจากเพิ่มไฟล์แล้วให้บันทึกไฟล์อีกครั้งและปิด (ctrl-x, enter, enter)

ขั้นตอนที่ 6: รีบูตหรือเมานต์ใหม่

แค่นั้นแหละ. ตอนนี้คุณสามารถรีบู๊ตและอุปกรณ์เพิ่มเติมควรถูกปลดล็อคและติดตั้งโดยอัตโนมัติ คุณสามารถทดสอบได้โดยการติดตั้งอุปกรณ์ทั้งหมดใหม่:

sudo mount -a

1
คุณลืมอัปเดตinitramfsต้องการ 100%
3pic

6

การปรับปรุงคำตอบของ Randy Orrisonนี่เป็นสคริปต์เล็ก ๆ ที่ฉันสร้างขึ้นซึ่งจะทำให้ระบบสำรองเพื่อขอรหัสผู้ใช้หากไม่สามารถค้นหา keyfile ได้

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

บันทึกมันและแทนที่keyscript=/lib/cryptsetup/scripts/passdevใน/etc/crypttabที่มีเส้นทางไปยังแฟ้มนี้และการทำงานsudo update-initramfs -uvและคุณจะทำ


ฉันเดาว่าโซลูชันของคุณใช้ไม่ได้กับไดรฟ์ usb สำหรับมากกว่าหนึ่งไฟล์ keyfile ฉันหมายความว่าถ้าฉันมีพาร์ทิชันที่เข้ารหัสมากกว่าหนึ่ง (home, swap, root) มันเห็นว่ามันไม่ได้ unmount ไดรเวอร์ USB หลังจากคำสั่ง cat คุณมีความคิดวิธีการแก้ไขหรือไม่?
Khamidulla

มันใช้งานได้สำหรับฉัน (Xubuntu 17.10) แต่ฉันต้องแก้ไขด้วงและลบ "สแปลช" นอกจากนี้ฉันต้องบันทึกไฟล์ในตำแหน่งที่เหมาะสม (/ lib / cryptsetup / สคริปต์ / unlock_custom) และ chmod 755 ไม่แน่ใจว่าสาดหรือคัดลอกในสถานที่เฉพาะทำให้มันใช้งานได้สำหรับฉัน แต่มันไม่ได้ผลมาก่อน อย่างไรก็ตามมันใช้งานได้ แต่ตอนบูตหลังจาก Startet AppArmor initialization.ฉันได้รับ: งานเริ่มต้นกำลังทำงานสำหรับ dev-disk keyfile.device (1m 30s) หลังจากที่ 90s X เริ่มต้นและฉันสามารถใช้ระบบของฉัน ... ความคิดวิธีการแก้ไขงานนี้เริ่มไม่ ...
firepol

1

@deitch ฉันมีการตั้งค่าแบบเดียวกันเช่น @Randy Orrison และพบปัญหาเดียวกันกับคุณและมันกลับกลายเป็นข้อผิดพลาดของ systemd ซึ่งพยายามเมานต์ / filesystem อีกครั้งเนื่องจากพบรายการที่เกี่ยวข้องใน / etc / crypttab

เพื่อแก้ไขปัญหานี้ฉันเพิ่งลบรายการสำหรับ sda5_crypt จาก / etc / crypttab เมื่อคำสั่ง update-initramfs -uv ถูกรัน

Reeboot และทุกอย่างทำงานได้ดีตามที่ตั้งใจไว้

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