ฉันจะทำลายแผนผังไดเรกทอรีทั้งหมดซ้ำได้อย่างไร


47

ฉันมีแผนผังไดเรกทอรีที่ฉันต้องการทำลายด้วยยูทิลิตี้ 'ฉีก' ยูทิลิตี้ น่าเสียดายที่ shred ไม่มี-Rตัวเลือกสำหรับ shredding แบบเรียกซ้ำ

ฉันจะทำลายแผนผังไดเรกทอรีทั้งหมดแบบวนซ้ำได้อย่างไร

คำตอบ:


45

ใช้findคำสั่งเพื่อดำเนินการshredซ้ำ:

find <dir> -type f -exec shred {} \;

มันทำงานโดยไม่มีตัวเลือก -depth หรือไม่ มันทำงานกับระบบไฟล์ที่ทันสมัยและทำเจอร์นัลได้หรือไม่?
ผู้ใช้ที่ไม่รู้จัก

@userunknown ไม่ shred ไม่ทำงานกับระบบไฟล์ journaling ที่ทันสมัย man shredสำหรับข้อมูลที่แม่นยำยิ่งขึ้นโปรดดู
FanaticD

โปรดทราบว่าวิธีนี้จะไม่พยายามลบชื่อไฟล์ดังนั้นข้อมูลใด ๆ ที่เก็บไว้เช่นนี้จะถูกทิ้งไว้ข้างหลังแน่นอน ( srmจากคำตอบของ @ Cookie จะพยายามทำให้ปัญหานี้หมดไปอย่างน้อย)
ntninja

ใช้-exec shred {} +เพื่อทำให้เร็วขึ้นตั้งแต่เครื่องฉีกรับข้อโต้แย้งหลายข้อ
สุมิตร

28

ระวังฉีก!

จากหน้าเว็บย่อย:

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

  • ระบบไฟล์ที่มีโครงสร้างหรือเจอร์นัลเช่นที่มาพร้อมกับ AIX และ Solaris (และ JFS, ReiserFS, XFS, Ext3, ฯลฯ )

  • ระบบไฟล์ที่เขียนข้อมูลซ้ำซ้อนและดำเนินการต่อไปแม้ว่าบางการเขียนจะล้มเหลวเช่นระบบไฟล์ที่ใช้ RAID

  • ระบบไฟล์ที่สร้างสแน็ปช็อตเช่นเซิร์ฟเวอร์ NFS ของ Network Appliance

  • ระบบไฟล์ที่แคชในตำแหน่งชั่วคราวเช่นไคลเอ็นต์ NFS เวอร์ชัน 3

  • ระบบไฟล์บีบอัด

ในกรณีของระบบไฟล์ ext3 ข้อจำกัดความรับผิดชอบข้างต้นจะนำไปใช้ (และทำลายอย่างมีประสิทธิภาพ จำกัด ) เฉพาะใน data = โหมดเจอร์นัลซึ่งเจอร์นัลข้อมูลไฟล์นอกเหนือจากเมตาดาต้าเท่านั้น ในทั้ง data = สั่ง (ค่าเริ่มต้น) และ data = writeback โหมด shred ทำงานตามปกติ โหมดการเจอร์นัล Ext3 สามารถเปลี่ยนแปลงได้โดยการเพิ่ม data = something ตัวเลือกไปยังตัวเลือกการเมาท์สำหรับระบบไฟล์เฉพาะในไฟล์ / etc / fstab ดังที่บันทึกไว้ในหน้า man mount (man mount)

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

วิธีแก้ไข:ใช้ระบบไฟล์ที่เข้ารหัสและเพียงแค่ลบไฟล์ของคุณ


+1 สำหรับตัวชี้บนฉีกฉันมีกรณีที่คล้ายกันก่อน มันไม่ได้ทำงานบน NFS ของ NetApp NetApp ใช้ WAFL และใช้ copy-on-write รวมถึง metajournalling ดังนั้นมันจึงเหมาะสม นอกจากนี้ยังมี ZFS ของ Solaris ล่าสุดเป็นอีกกรณีหนึ่งที่มีการทำลายเอกสาร
Nikhil Mulley

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

3
@oleks: ทั้งการใช้งานshredและการเข้ารหัสข้อมูลป้องกันการอ่านข้อมูลจากอุปกรณ์เก็บข้อมูลออฟไลน์ (คิดว่าขโมยหรือตำรวจ) ด้วยการเข้ารหัสข้อมูลที่มีประโยชน์เพิ่มเติมในการปกป้องไฟล์ทั้งหมดไม่เพียง แต่ถูกลบ (อย่างถูกต้อง) เมื่อติดตั้งระบบไฟล์แล้วเราจะกลับไปใช้สิทธิ์ unix ที่ดีทั้งในกรณีและการปกป้องข้อมูลกลายเป็นหน้าที่ของความปลอดภัยของระบบปฏิบัติการและการบริหารระบบที่เหมาะสมอีกครั้ง การเข้ารหัสระบบไฟล์ล่วงหน้านั้นไม่ได้เลวร้ายยิ่งกว่าการปกป้องข้อมูลที่เหลือกว่าการใช้งานเชิงกลยุทธ์ของshred!
ntninja

12

ใช้การลบที่ปลอดภัยแทน

sudo apt-get install secure-delete
srm -r pathname

เสร็จสิ้น Secure delete เป็นหวาดระแวงมากกว่า shred โดยใช้ 38 pass แทน 3 ในการทำ single pass อย่างรวดเร็วให้ใช้

srm -rfll pathname

คุณจะได้รับตัวสร้างข้อมูลแบบสุ่มน้อยกว่าและมีเพียงครั้งเดียว


มันแก้ปัญหาที่กล่าวถึงในunix.stackexchange.com/a/27075/18886หรือไม่
Ian Dunn

เป็นไปได้อย่างไร ไม่
คุกกี้

โปรดทราบว่าวิธีนี้มีประโยชน์เพิ่มเติมจากfindวิธีที่เสนอมาซึ่งจะพยายามลบชื่อไฟล์ที่จัดเก็บไว้ด้วยการเปลี่ยนชื่อไฟล์ก่อนที่จะตัดทอนและยกเลิกการเชื่อมโยง
ntninja

@ntninja วิธีการค้นหาแบบใช้ shred และ shred ทำการเปลี่ยนชื่อไฟล์ก่อนที่จะเสร็จสิ้นเพื่อลบออก ประโยชน์เหมือนกันใช่ไหม
tuxayo

11

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

find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;

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

หากเป็นไปได้คำสั่ง find ควรเรียกเชลล์สคริปต์บนไฟล์ที่รัน:

shred -v -n 1 /path/to/your/file #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u /path/to/your/file #overwriting with zeroes and remove the file

ในแต่ละไฟล์


หลังจากอ่านและค้นคว้าคำตอบมากมายฉันพบ (imho) คำตอบนี้เป็นคำที่ละเอียดที่สุด ฉันจะเพิ่มไปเพียงเพราะว่า shred ไม่ลบไดเรกทอรีที่ฉันผนวกเข้าrm -rvf $1กับเชลล์สคริปต์ (โดยที่ $ 1 คือ / path / to / your / ไฟล์ที่ส่งผ่านจากการ{}ขยายในfind... -exec)
JoelAZ

4
shred ทำ fsync (2) แล้วหลังจากผ่านแต่ละครั้ง แม่นยำเพราะคุณจำเป็นต้องบังคับให้การเปลี่ยนแปลงไฟล์เพื่อเข้าถึงดิสก์ก่อนที่จะผ่านครั้งต่อไป
Ángel

ที่depthนี่ทำอะไร ยังไม่แน่ใจเกี่ยวกับเครื่องหมายแบ็กสแลชต่อท้าย
genorama

5
find /your/directory -exec shred {} \;

โหวตขึ้น แต่เจมส์เอาชนะคุณภายในหนึ่งนาทีเพื่อยอมรับ
Steve V.

มันทำงานโดยไม่มีตัวเลือก -depth หรือไม่ มันทำงานกับระบบไฟล์ที่ทันสมัยและทำเจอร์นัลได้หรือไม่?
ผู้ใช้ที่ไม่รู้จัก

3
find [dirname] -depth -type f -exec shred -n1 {} \;

นี่เป็นการค้นหาไฟล์ในไดเรกทอรี [dirname] ก่อนแล้วจึงรันshred -n1คำสั่งในแต่ละไฟล์ เมื่อลบไฟล์และ / หรือไดเรกทอรีการเพิ่ม-depthเป็นค่าเริ่มต้นเป็นสิ่งที่ดีแม้ว่าจะไม่จำเป็นสำหรับกรณีนี้ เมื่อใช้การเรียงลำดับของคำสั่งนี้กับrm -rfแทนshred, -depthเป็นสิ่งจำเป็นเพื่อให้แน่ใจว่าไดเรกทอรีจะไม่ถูกลบก่อนเนื้อหาของไดเรกทอรีที่มีความพยายามที่จะถูกลบ (จึงก่อให้เกิดข้อผิดพลาด)


3
คุณควรใช้shred -N 1เพราะค่าเริ่มต้นการหั่นย่อย 3 ครั้งคือน้ำมันงู ครั้งเดียวก็เพียงพอหรือ 30 ครั้งจะไม่ทำงาน
ผู้ใช้ที่ไม่รู้จัก

การให้คำสั่งง่ายๆเป็นคำตอบไม่ใช่วิธีที่ดีที่สุดในการตอบคำถาม ฉันขอแนะนำให้เพิ่มคำอธิบายเล็ก ๆ น้อย ๆ เกี่ยวกับสิ่งที่บรรทัดกำลังทำอยู่และข้อ จำกัด ที่เป็นไปได้ที่เกี่ยวข้องกับการใช้งาน
n0pe

0

shredวิธีที่ละเอียดที่สุดที่ฉันพบซึ่งรวมถึงการลบไดเรกทอรีด้วยคือการfindเรียกสคริปต์เพื่อให้shred:

  • เขียนทับไฟล์
  • ซิงค์
  • จากนั้นลบ
  • และในที่สุดก็เรียก rm เพื่อลบชื่อไดเรกทอรี

วิธีนี้ยังจัดการกับชื่อไฟล์อย่างถูกต้องด้วยช่องว่าง

ก่อน - shredสคริปต์ (ฉันชื่อฉันdirShredder.shและเก็บไว้ใน/rootไดเรกทอรี:

shred -v -n 1 "$1" #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u "$1" #overwriting with zeroes and remove the file
rm -rvf "$1" # call rm to remove the directories

จากนั้นเรียกสคริปต์เช่นนี้:

find /volume1/pathToShred/ -mindepth 1 -depth -exec /root/dirShredder.sh "{}" \;

ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายkillit.shไฟล์เรียกทำงาน ( chmod +x) และแน่นอนอัปเดตพา ธ สำหรับ dir ที่คุณต้องการทำลายและdirShredder.shหากคุณเก็บไว้ที่อื่น

NOTA BENE - shredมีปัญหาเกี่ยวกับระบบไฟล์ Copy-on-Write (ZFS, BTRFS, et al) และแม้กระทั่งในระบบไฟล์ Journaling ไม่มีวิธีที่ดีที่สุดในการจัดการกับสิ่งนี้ที่ฉันพบว่าไม่ใช่ "ระบบไฟล์ที่เข้ารหัส" ที่แท้จริง แต่ฉันไม่แน่ใจว่าวิธีนี้มีประสิทธิภาพมากน้อยเพียงใด
สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับคือเขียนทับพื้นที่ว่างทั้งหมดบนไดรฟ์ด้วยข้อมูลสุ่มหลังจาก ops shredding ของคุณ (ไม่ใช่ศูนย์ดูเหมือนว่ามันจะไม่น่าเชื่อถือเสมอไป) นอกจากนี้ SSD อาจมีข้อควรพิจารณาอื่น ๆ เช่น TRIM

ฉันจะไม่เข้าไปในที่นี่มีคำตอบอื่น ๆ สแต็ค (คำตอบของ @user ที่ไม่รู้จักในคำถามนี้) และการอภิปรายมากมายตลอดทั้ง 'เน็ตที่ครอบคลุมหัวข้อเหล่านี้เพื่อค้นหาพวกเขาหากคุณต้องการระดับความปลอดภัยระดับนั้น

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