LUKS Keyscript ที่กำลังถูกเพิกเฉย…ขอรหัสผ่าน


10

ให้ฉันเริ่มด้วยการบอกว่าฉันไม่ใช่คนใหม่กับ LUKS ฉันตั้งค่า LUKS ด้วย keyscripts หลายครั้งโดยมีและไม่มี LVM ฉันไม่แน่ใจว่าเกิดอะไรขึ้นที่นี่ ฉันมีระบบที่มีพาร์ทิชันเข้ารหัสเดียว ไดรฟ์ของฉันถูกจัดระเบียบดังนี้:

# lsblk

ชื่อ MAJ: MOUNTPOINT ประเภทขั้นต่ำของ RM RM
sda 8: 0 0 128G 0 ดิสก์  
└─sda1 8: 1 0 128G 0 ส่วนหนึ่ง  
  ├─vg0-root 253: 1 0 20G 0 lvm /
  ├─vg0ปลอดภัย 253: 6 0 100M 0 lvm   
  25 └─s 253: 7 0 98M 0 crypt / root / secure
  └─vg0-swap 253: 4 0 1G 0 lvm [SWAP]

/etc/crypttabไฟล์ของฉันมีลักษณะเช่นนี้

# UUID ไม่จำเป็นต้องใช้ที่นี่เนื่องจากเส้นทางไปยัง LV จะไม่เปลี่ยนแปลง
secure / dev / vg0 / ไม่มีความปลอดภัย luks, keyscript = / lib / cryptsetup / สคริปต์ / ที่ไม่ปลอดภัย

/lib/cryptsetup/scripts/insecureไฟล์ของฉันใช้งานได้และมีลักษณะเช่นนี้

#!/bin/sh
# My actual file looks somewhat different because it dumps the key file with dd.
# This accomplishes virtually the same thing though.

echo -n "my-encryption-password"

ฉันทำงานupdate-initramfs -k all -uหลายครั้งหลังจากกำหนดค่า crypttab และวางไฟล์ keyscript ของฉันไว้

เท่าที่ฉันสามารถบอกได้ไฟล์สคริปต์ของฉันไม่ได้ถูกคัดลอกไปยังไฟล์ initrd.img ตอนนี้ฉันคิดแล้วฉันไม่คิดว่ามันจะถูกคัดลอกไปยังไฟล์ initrd.img เนื่องจากรูทพาร์ติชันไม่ได้เข้ารหัสและไฟล์สคริปต์ควรเข้าถึงได้ง่ายจากที่นั่น

เมื่อรีบูตระบบจะเห็นบันทึกจาก crypttab และขอรหัสผ่าน (ซึ่งในกรณีของฉันไม่มีอยู่จริงเพราะคีย์เดียวคือ keyfile ที่เต็มไปด้วยบิตสุ่ม) แทนที่จะใช้ keyscript เพื่อปลดล็อกพาร์ติชัน LUKS ฉันลองนำ LUKS ออกจาก LVM แล้ววางลงบน sda2 และผลลัพธ์ก็เหมือนกัน ฉันรู้ว่า keyscript ใช้งานได้เพราะใช้cryptsetup luksOpen /dev/vg0/secure secure -d - <<< "$(/lib/cryptsetup/scripts/insecure)"งานได้อย่างมีเสน่ห์และถอดรหัสพาร์ทิชัน LUKS ของฉัน

ฉันได้ลองใน Ubuntu 16.04.2 และ Ubuntu Mate 16.04.2 ด้วยผลลัพธ์เดียวกัน ฉันใช้ keyscripts มาก่อนโดยไม่มีปัญหาใด ๆ ข้อแตกต่างคือในอดีตที่ผ่านมา / พาร์ทิชันของฉันถูกเข้ารหัสเสมอ หากใครสามารถทำให้แสงสว่างบางอย่างฉันจะขอบคุณมัน ฉันต้องการพาร์ติชั่นเข้ารหัสที่มีขนาดเล็กมากเท่านั้นเนื่องจากฉันวางแผนที่จะโคลนระบบนี้และฉันไม่ต้องการโคลนด้วยพาร์ติชันที่เข้ารหัส / ทั้งหมด


อัพเดท 2017-04-26

ในการขุดผ่านบันทึกฉันพบว่ามีข้อผิดพลาดต่อไปนี้ซึ่งไม่สมเหตุสมผล ตั้งแต่ 'keyscript = / path / to / script' ตัวเลือกที่ไม่รู้จักสำหรับ crypttab คืออะไร?

... systemd-cryptsetup [737]: พบตัวเลือก / etc / crypttab ที่ไม่รู้จัก 'keyscript = / lib / cryptsetup / script / insecure' โดยไม่สนใจ

แค่เตะฉันพยายามลบตัวเลือก keyscript และใช้ keyfile และมันก็ใช้ได้ดี! อันที่จริงฉันลองตัวเลือกอื่น ๆ เช่น keyfile-offset และพวกมันก็ทำงานเช่นกัน ดังนั้นปัญหาอยู่ที่ตัวเลือก keyscript ไม่มีใครมีความคิดใด ๆ ว่าทำไม?


3
ฉันคิดว่า systemd เป็นปัญหาของคุณ ของ Google อย่างรวดเร็วสำหรับการแสดง systemd และ keyscript ข้อผิดพลาดและการร้องขอการดึงสำหรับการดำเนินการใน keyscript systemd ที่นี่ แม้จะมีวิธีแก้ไขปัญหาจากลิงก์แรก
sergtech

นี่เป็นความสงสัยของฉันเช่นเดียวกับฉันได้ขุดลงในปัญหาของฉันอย่างต่อเนื่องและผลการค้นหาที่ฉันได้พบออนไลน์ ฉันลองใช้คำแนะนำที่นี่แต่ฉันไม่แน่ใจว่าจะนำไฟล์สคริปต์ไปสู่ ​​initrd ได้อย่างไร
b_laoshi

คำตอบ:


3

ลองใช้ตัวเลือก "initramfs" ใน / etc / crypttab ของคุณ (ตามhttps://unix.stackexchange.com/a/447676/356711 ) คุณ/etc/crypttabจะมีลักษณะเช่นนี้:

# UUID is not required here since the path to the LV won't change
secure      /dev/vg0/secure       none      luks,keyscript=/lib/cryptsetup/scripts/insecure,initramfs

โปรดทราบว่าอาจเป็นปัญหาที่รูท fs ของคุณอยู่ในคอนเทนเนอร์ LVM มีการกล่าวถึงปัญหานี้ในบทความที่ลิงก์ด้านบน: " แต่ตอนนี้ใช้งานได้ (เชื่อถือได้) หากอุปกรณ์รูทไม่ได้อยู่ใน LVM " โชคดีที่ดูเหมือนว่าจะมีวิธีแก้ปัญหา

ระบบของฉันมีลักษณะเช่นนี้:

$ lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0 931.5G  0 disk
└─sda1                          8:1    0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdb                             8:16   0 931.5G  0 disk
└─sdb1                          8:17   0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdc                             8:32   0 465.8G  0 disk
├─sdc1                          8:33   0   953M  0 part  /boot
└─sdc2                          8:34   0 464.8G  0 part
  └─sdc2_crypt                253:0    0 464.8G  0 crypt
    ├─system_crypt_vg-data_lv 253:1    0   447G  0 lvm   /
    └─system_crypt_vg-swap_lv 253:2    0  17.8G  0 lvm   [SWAP]

... และสิ่งต่อไปนี้/etc/crypttabใช้การถอดรหัสลับด้วย keyscript (!)ใน Ubuntu 18.04.2 LTS:

$ cat /etc/crypttab
# <target name> <source device>                           <key file> <options>
sdc2_crypt      UUID=[...]                                none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh
md1_crypt       /dev/md1                                  none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh,initramfs

โปรดทราบว่าการถอดรหัสsdc2_cryptโดยใช้ keyscript ที่มีให้นั้นทำงานโดยไม่มีตัวเลือก initramfs (เนื่องจากมี root fs และถือว่าเป็น "โดยอัตโนมัติ" ซึ่งถือว่าอยู่ในขั้นตอนการบูตของ initramfs) md1_cryptถูกถอดรหัสแล้วเท่านั้นในช่วงเริ่มต้นการบูต initramfs (และด้วย keyscript ตามรายการ crypttab) หลังจากที่ฉันเพิ่มตัวเลือก initramfs ถอดรหัสภายหลัง md1_crypt ระหว่างขั้นตอนการบูต systemd ไม่ได้ทำงานกับ keyscript ที่กำหนดใน crypttab เพราะ "cryptsetup systemd" ไม่สนับสนุน keyscript ตัวเลือกในการดูhttps://github.com/systemd/systemd/pull/3007

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