เปลี่ยนรหัสผ่านบนระบบไฟล์ LUKS โดยไม่ทราบรหัสผ่าน


30

ฉันมีเซิร์ฟเวอร์ Debian Wheezy ที่ทำงานมาระยะหนึ่งด้วยไดรฟ์ที่เข้ารหัส รหัสผ่านสำหรับไดรฟ์ที่เข้ารหัส ( /dev/sda5) หายไปเมื่อไฟล์รหัสผ่านที่เข้ารหัสของฉันเสียหาย

ฉันต้องการที่จะรีบูตเซิร์ฟเวอร์นี้ แต่แน่นอนว่าจะต้องใช้รหัสผ่านนั้น เนื่องจากไดรฟ์อยู่ในสถานะถอดรหัสอย่างชัดเจนจึงมีวิธีการเปลี่ยนรหัสผ่านโดยไม่รู้จักตัวเก่าหรือไม่

cryptsetup luksChangeKey /dev/sda5 ต้องใช้รหัสผ่านของไดรฟ์

แน่นอนฉันสามารถrsyncปิดและสร้างใหม่ได้ แต่ฉันต้องการหลีกเลี่ยงสิ่งนั้น ฉันมองผ่านความทรงจำ ( #cat /dev/mem | less) แต่หาไม่เจอ (ซึ่งเป็นสิ่งที่ดีมาก!)


2
Hmmmm .... สิ่งที่เป็นจุดของการมีระบบไฟล์ที่เข้ารหัสถ้ามันเป็นเรื่องง่ายมากที่จะได้รับการเข้าถึงโดยไม่ต้องใช้รหัสผ่าน
mdpc

7
@mdpc: สำนวนของคุณไม่สมเหตุสมผล เขามีการเข้าถึงระบบแฟ้มเพราะเขามีรหัสผ่านเมื่อเซิร์ฟเวอร์ booted สุดท้าย
G-Man กล่าวว่า 'Reinstate Monica'

2
เพียงเพราะคุณได้รหัสผ่าน (และมันได้รับความเสียหาย) ไม่ได้ทำให้ความคิดเห็นของฉัน โดยทั่วไปหากคุณลืมรหัสผ่านสำหรับวัสดุที่เข้ารหัสชนิดใด ๆ มันควรจะหายไปตลอดกาลมิฉะนั้นสิ่งที่เป็นจุดเริ่มต้นของการเข้ารหัสในครั้งแรก?
mdpc

3
@mdpc ปัจจุบันกาลเขามีการเข้าถึงระบบไฟล์ในปัจจุบัน
Patrick

คำถามเดียวกันกับผู้ใช้ขั้นสูง: ลืมรหัสผ่าน LUKS, พาร์ทิชันเข้ารหัสเปิด (ไม่ตอบ)
G-Man กล่าวว่า 'Reinstate Monica'

คำตอบ:


40

ใช่คุณสามารถทำได้โดยการเข้าถึงคีย์หลักในขณะที่มีการถอดรหัสระดับเสียง

วิธีที่รวดเร็วและสกปรกในการเพิ่มข้อความรหัสผ่านใหม่:

device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)

deviceและvolume_nameควรตั้งอย่างเหมาะสม เป็นชื่อของปริมาณการถอดรหัสหนึ่งที่คุณเห็นใน
volume_name/dev/mapper


คำอธิบาย:

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

ให้ฉีกคำสั่งดังกล่าวข้างต้น

$ dmsetup table --showkeys $volume_name

สิ่งนี้จะทิ้งข้อมูลจำนวนมากเกี่ยวกับปริมาณที่ถอดรหัสอย่างแข็งขัน ผลลัพธ์มีลักษณะดังนี้:

0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096

ฟิลด์ # 5 เป็นคีย์หลัก

 

$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p

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

 

$ cryptsetup luksAddKey $device --master-key-file <(...)

นี่คือการบอก cryptsetup เพื่อเพิ่มคีย์ใหม่ให้กับโวลุ่ม โดยปกติการกระทำนี้ต้องการคีย์ที่มีอยู่อย่างไรก็ตามเราใช้--master-key-fileเพื่อบอกว่าเราต้องการใช้คีย์หลักแทน
การ<(...)แทนที่ & เปลี่ยนเส้นทางคำสั่งของเชลล์คือ โดยทั่วไปแล้วมันจะดำเนินการทุกอย่างภายในส่งออกไปยังไพพ์แล้วแทนที่<(...)ด้วยพา ธ ไปยังไพพ์นั้น

 

ดังนั้นคำสั่งทั้งหมดเป็นเพียงหนึ่งซับเพื่อย่อการดำเนินการหลายอย่าง


ฉันไม่แน่ใจว่าฉันทำอะไรผิดหรือไม่ แต่ LUKS ของฉันไม่แสดงสตริงเหมือนที่คุณแสดงในตัวอย่าง มันเป็นตัวเลขสั้น ๆ 9 หลัก ฉันยังแสดงให้เห็นว่า "เชิงเส้น 8: 3"
slm

@slm หากแสดงขึ้นแสดงlinearว่านั่นไม่ใช่ปริมาณ LUKS ที่เปิดอยู่ (ค่าผิดสำหรับvolume_nameคำสั่งที่ระบุ) ปริมาณ LUKS ที่เปิดอยู่จะมีcryptในฟิลด์ที่ 3 ในcryptsetup luksOpen /dev/foo barที่คุ้มค่าที่จะเป็นvolume_name bar
Patrick

รับทันที ภายใต้การมีปริมาณเป็นชื่อ/dev/mapper luks-.....นั่นคือปริมาณที่คุณต้องใช้ไม่ใช่ LVM ซึ่งเป็นโลจิคัลวอลุ่มที่แม็พ
slm

1
ดูเหมือนว่าด้วยรุ่นล่าสุดของ dmsetup รูปแบบที่dmsetup tableมีการเปลี่ยนแปลง $6อย่างน้อยสำหรับฉันคีย์หลักจะปรากฏในคอลัมน์
Karol Babioch

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