ลบไฟล์อย่างปลอดภัยบนระบบไฟล์ btrfs


22

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

การออกง่าย ๆrmบนระบบไฟล์ทั่วไปจะลบ inode ("ตัวชี้") ไปยังไฟล์ แต่จะไม่ลบเนื้อหาของไฟล์ในฟิสิคัลดิสก์ - สิ่งเหล่านี้จะอยู่ที่นั่นจนกว่าจะถูกเขียนทับเมื่อระบบไฟล์ต้องการพื้นที่ว่าง

ในระบบไฟล์จำนวนมากโปรแกรม shredช่วยให้การลบที่ปลอดภัย อย่างไรก็ตามในระบบแฟ้มวัวเช่น btrfs, วิธีการนี้จะไม่ได้ผล ปัญหานี้รุนแรงขึ้นเนื่องจากข้อเท็จจริงที่ว่าไฟล์นั้นอาจมีอยู่ในสแนปชอตของโวลุ่ม

มีวิธีลบไฟล์อย่างปลอดภัยบนระบบไฟล์ btrfs หรือไม่? เพียงพอที่จะลบพอยน์เตอร์ทั้งหมด (บนโวลุ่มทั้งหมด) และเติมพื้นที่ว่างด้วยศูนย์ ?


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

@mithithub แน่นอนการเข้ารหัสไฟล์ดังกล่าวเป็นความคิดที่ดีเสมอตั้งแต่แรกเช่นเดียวกับ FDE มันไม่สามารถพิจารณาทุกกรณีการใช้งานแม้ว่า (ระบบฝังตัวเช่น - แม้ว่ามันจะพิสูจน์ได้ถ้าระบบดังกล่าวจะทำงาน btrfs อยู่แล้ว ... ) ฉันถามเรื่องนี้จริง ๆ เพราะฉันลืมติดตั้งการเข้ารหัสก่อนที่จะคัดลอกไฟล์ที่ละเอียดอ่อน แต่ฉันต้องการที่จะหลีกเลี่ยงการเช็ดพาร์ทิชันทั้งหมด
goncalopp

คำตอบ:


9

การลบอย่างปลอดภัยเป็นเรื่องที่ยากในระบบไฟล์ใด ๆ ยกเว้นว่าระบบไฟล์นั้นแปลกมากและรับประกันว่าไม่มีไฟล์อื่นวางอยู่รอบ ๆ คุณต้องล้างพื้นที่ว่างทั้งหมดบนอุปกรณ์ ในขณะที่คุณมีแนวโน้มที่จะพบไฟล์จำนวนมากในระบบไฟล์แบบคัดลอก - เขียน - เขียน แต่ระบบไฟล์แบบ "คงที่" ยิ่งไม่มีการรับประกันนี้ในทางปฏิบัติเพราะไฟล์จำนวนมากได้รับการแก้ไขดังนั้นจึงมีบิตจากเวอร์ชันเก่าของ ไฟล์โกหกรอบ

โปรดทราบว่าการลบด้วยเลขศูนย์นั้นดีเท่ากับการลบแบบสุ่มไบต์และคุณไม่จำเป็นต้องใช้บัตรผ่านหลายใบ การลบด้วยศูนย์จะเหลือข้อมูลที่สามารถกู้คืนได้บางส่วนในสภาพห้องปฏิบัติการด้วยเทคโนโลยีฮาร์ดดิสก์ในปี 1980 วันนี้ไม่สามารถใช้งานได้อีกต่อไป ดูเหตุใดการเขียนเลขศูนย์ (หรือข้อมูลแบบสุ่ม) ลงบนฮาร์ดไดรฟ์หลาย ๆ ครั้งดีกว่าทำเพียงครั้งเดียว

คุณสามารถกำจัดข้อมูลลับ cleartext โดยการเข้ารหัสทุกอย่างบนดิสก์ ตั้งค่าปริมาตรecryptfsเหนือระบบไฟล์นั้นและย้ายไฟล์ทั้งหมดของคุณ (เป็นความลับ) ไปที่มัน จากนั้นเขียนทับพื้นที่ที่ไม่ได้ใช้ทั้งหมดของระบบไฟล์ cat /dev/zero >zeroคุณสามารถลบมากที่สุดของมันโดยการกรอกข้อมูลระบบแฟ้มที่มี อาจยังมีข้อมูลบางส่วนที่เหลืออยู่ในบล็อกที่ไม่สมบูรณ์ (บล็อกที่มีไฟล์อันสุดท้ายของไฟล์ตามด้วยขยะบางส่วน - ซึ่งอาจเป็นของที่เหลือจากไฟล์ที่เป็นความลับ) เพื่อให้แน่ใจว่าไม่มีบล็อกที่ไม่สมบูรณ์ให้ย้ายทุกอย่างในระบบไฟล์ไปยัง ecryptfs (ไฟล์ของ ecryptfs ใช้ทั้งบล็อกอย่างน้อยในการตั้งค่าทั่วไปที่บล็อกคือ 4kB) ตรวจสอบให้แน่ใจว่าได้ใช้สิ่งนี้กับทุกเล่มและเพื่อลบสแนปชอตทั้งหมดที่มีข้อมูลลับที่เป็นข้อความธรรมดา

อาจมีข้อมูลบางส่วนที่เหลืออยู่ในวารสาร ฉันไม่รู้จะขัดมันอย่างไร

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


3
ศูนย์มีข้อเสียที่พวกเขาสามารถบีบอัดหรือละเว้นทั้งหมด (SSD อาจ TRIM แทนการเขียนศูนย์เป็นภาค TRIM จะส่งกลับศูนย์เมื่อคุณอ่านพวกเขา) ทำให้ศูนย์ไม่ปลอดภัยในปัจจุบัน การใช้ข้อมูลแบบสุ่มบังคับให้ระบบไฟล์และดิสก์เขียนข้อมูลตามจริง
frostschutz

@frostschutz จะเขียนตัวละครตัวอื่นนอกจาก0จะโอเคและไม่ต้องมีการตัดแต่งพูดการเขียนทั้งหมด1แทนไหม? หรือบางไดรฟ์ใช้การบีบอัดทุกอย่าง?
Xen2050

@frostschutz หากคุณเติมปริมาตร ecryptfs ด้วยเลขศูนย์ (ซึ่งเป็นสิ่งที่ฉันคิดว่าคำตอบนั้นเสนอที่นี่แม้ว่าในการตรวจสอบเพิ่มเติมฉันเห็นว่าการใช้ถ้อยคำของเขานั้นคลุมเครือจริง ๆ ) จากนั้นคุณจะเขียนแบบสุ่ม ไม่สามารถทำข้อมูล) ลงดิสก์ได้หรือไม่?
JamesTheAwesomeDude

@ JamesTheAwesomeDude ไม่ฉันกำลังเสนอการเขียนเลขศูนย์ไปยังส่วนที่ไม่ได้เข้ารหัส แต่ฉันพูดถึงว่านี่ไม่เพียงพอใน SSD ด้านล่าง
Gilles 'หยุดความชั่วร้าย' ใน

6

อืม btrfs ดูเหมือนจะเอาชนะวิธีการทำลายเอกสารปกติทั้งหมด ...

  • มีตัวเลือกเมาท์ที่เรียกว่าnodatacowแต่ดูเหมือนจะไม่มีผลกับไฟล์ที่มีอยู่แล้ว
  • เนื่องจากคุณมีไฟล์ที่เหมาะสมบนดิสก์อยู่แล้วรายการbtrfs คำถามที่พบบ่อยนี้จะไม่ช่วยคุณเช่นกัน
  • debugfsจากนั้นก็มี มันใช้สำหรับ ext filesystems เท่านั้น แต่มันมีpatchสำหรับมันที่อาจใช้งานได้ คุณสามารถใช้เพื่อค้นหาที่อยู่บล็อกที่ได้รับผลกระทบจากนั้นเขียนทับที่อยู่เหล่านั้นโดยตรงบน / dev / sdXY แต่มันอันตรายมากและอาจใช้งานไม่ได้ (โดยเฉพาะถ้ามีสแนปชอตของไฟล์มากกว่า)
  • เขียนแพทช์ btrfs ที่ช่วยให้หนึ่งในการปรับเปลี่ยนภาพรวมที่เฉพาะเจาะจง (หรือฉีก) หรือไฟล์ทั้งหมด
  • ความพยายามที่สะอาดที่สุด (สำหรับข้อมูลที่ละเอียดอ่อนจริงๆ) คือ:

    • ซื้อดิสก์อื่น (นอกเสียจากคุณจะมีพื้นที่ว่างเพียงพอสำหรับสำเนาพาร์ติชันที่ได้รับผลกระทบในพาร์ติชันแรก)
    • ตั้งค่าการเข้ารหัสดิสก์เต็มรูปแบบและระบบไฟล์ของคุณ
    • คัดลอกทุกอย่างจากดิสก์ a ไป b
    • บูตเข้าสู่ระบบ b และทำลายดิสก์ทั้งหมด a ...

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


nodatacowตั้งค่าสถานะเริ่มต้นของการCตั้งค่าสถานะสำหรับไฟล์ที่สร้างขึ้นใหม่ แน่นอนหนึ่งสามารถเพียงchattr +C ~/.browser/logins.sqliteแล้วshredมันได้หรือไม่
JamesTheAwesomeDude

-6

มีshred(1)ไว้สำหรับ Unix / Linux (ควรอยู่ในแพ็คเกจการกระจายของคุณ) ฉันเป็นสิ่งที่เอฟเอฟแนะนำ


3
หากคุณตรวจสอบคำถามอีกครั้งคุณจะเห็นว่าฉันพูดถึงเรื่องฉีกแล้วทำไมมันจึงไม่เพียงพอสำหรับงาน
goncalopp

ทั้งหมดที่ฉันพบคือคำแนะนำในการใช้การเข้ารหัสไฟล์ที่ละเอียดอ่อนด้วยเหตุผลที่คุณพูดถึง
vonbrand

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