Bagaimana cara saya merobek seluruh pohon direktori secara rekursif?

48

Saya memiliki pohon direktori yang ingin saya hancurkan dengan utilitas 'shred' Linux. Sayangnya, -Rshredding tidak memiliki opsi untuk shredding rekursif.

Bagaimana saya bisa merusak seluruh pohon direktori secara rekursif?

Steve V.
sumber

Jawaban:

46

Gunakan findperintah untuk mengeksekusi shredsecara rekursif:

find <dir> -type f -exec shred {} \;
jamesallman
sumber
Apakah ini berfungsi tanpa opsi -depth? Apakah ini berfungsi pada sistem file jurnal modern?
pengguna tidak diketahui
@ penggunaunknown Tidak, rusak tidak berfungsi pada sistem file penjurnalan modern. Untuk informasi yang lebih tepat, silakan lihat man shred.
FanaticD
Perhatikan juga bahwa metode ini bahkan tidak akan mencoba menghapus nama file , sehingga data yang disimpan seperti ini pasti akan tertinggal ( srmdari jawaban @ Cookie setidaknya akan mencoba untuk memperbaiki masalah ini).
ntninja
Gunakan -exec shred {} +untuk membuatnya lebih cepat karena shred menerima beberapa argumen.
Sumit
28

Waspadalah terhadap kerusakan!

Dari halaman rusak:

PERHATIAN: Perhatikan bahwa shred bergantung pada asumsi yang sangat penting: bahwa sistem file menimpa data yang ada. Ini adalah cara tradisional untuk melakukan sesuatu, tetapi banyak desain sistem file modern tidak memenuhi asumsi ini. Berikut ini adalah contoh sistem file yang rusak tidak efektif, atau tidak dijamin efektif dalam semua mode sistem file:

  • sistem file log-terstruktur atau dijurnal, seperti yang disediakan dengan AIX dan Solaris (dan JFS, ReiserFS, XFS, Ext3, dll.)

  • sistem file yang menulis data yang berlebihan dan melanjutkan bahkan jika beberapa penulisan gagal, seperti sistem file berbasis RAID

  • sistem file yang membuat snapshot, seperti server NFS Network Appliance

  • sistem file yang melakukan cache di lokasi sementara, seperti klien NFS versi 3

  • sistem file terkompresi

Dalam kasus sistem file ext3, penafian di atas berlaku (dan karena itu efektivitasnya terbatas) hanya dalam mode data = jurnal, yang membuat jurnal file data selain hanya metadata. Baik dalam data = teratur (default) dan data = mode kembali, rusak bekerja seperti biasa. Mode penjurnalan ext3 dapat diubah dengan menambahkan data = opsi sesuatu ke opsi mount untuk sistem file tertentu dalam file / etc / fstab, seperti yang didokumentasikan dalam halaman manual mount (man mount).

Selain itu, cadangan sistem file dan mirror jarak jauh dapat berisi salinan file yang tidak dapat dihapus, dan itu akan memungkinkan file robek dipulihkan nanti.

Solusi: Gunakan sistem file terenkripsi, dan hapus saja file Anda.

Pengguna tidak diketahui
sumber
+1 untuk penunjuk rusak, saya memiliki kasus serupa sebelumnya. Itu tidak bekerja pada NFS NetApp. NetApp menggunakan WAFL dan yang menggunakan copy-on-write termasuk metajournalling, jadi itu benar. Juga dengan ZFS Solaris terbaru adalah kasus lain di mana gudang rusak.
Nikhil Mulley
6
Ini solusi yang buruk. Sistem file terenkripsi hanya aman selama terkunci (dan tidak di-mount). Segera setelah OS Anda aktif dan berjalan, data siap digunakan.
oleks
3
@oleks: Baik penggunaan shredmaupun enkripsi data mencegah pembacaan data dari perangkat penyimpanan offline (pikirkan pencurian atau polisi) dengan enkripsi data yang memiliki manfaat tambahan melindungi semua file, bukan hanya yang (dengan benar) dihapus. Setelah sistem file dipasang, kita kembali ke izin unix yang baik dalam hal apapun dan perlindungan data menjadi tugas keamanan OS dan administrasi sistem yang tepat lagi. Enkripsi sistem file dimuka jelas tidak lebih buruk dalam melindungi data saat istirahat daripada penggunaan strategis shred!
ntninja
12

Gunakan hapus aman sebagai gantinya.

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

Selesai. Hapus aman jauh lebih paranoid daripada rusak, menggunakan 38 lintasan alih-alih 3. Untuk melakukan lintasan cepat tunggal, gunakan

srm -rfll pathname

fll memberi Anda generator data yang kurang acak, dan hanya satu lintasan.

Kue kering
sumber
Apakah itu memecahkan masalah yang disebutkan di unix.stackexchange.com/a/27075/18886 ?
Ian Dunn
Bagaimana mungkin? Tidak
Cookie
Perhatikan bahwa metode ini memiliki manfaat tambahan dibandingkan findmetode yang diusulkan yang akan mencoba juga menghapus nama file yang disimpan dengan mengubah nama file sebelum memotong dan memutuskan tautannya.
ntninja
@ntninja metode berbasis pencarian menggunakan shred dan shred tidak mengganti nama file sebelum selesai untuk menghapusnya. Jadi manfaatnya sama kan?
tuxayo
11

Menggabungkan jawaban ini dengan opsi yang paling dikenal untuk rusak menggunakan tautan stack overflow ini ' Menghapus File Secara Permanen dan Aman di CentOS ':

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

Sunting: Perlu diketahui bahwa jawaban terbaik untuk merobek-robek file tunggal memaksa sinkronisasi yang menulis perubahan pada media sebelum menghapus file karena beberapa atau semua sistem file yang dijurnal memiliki buffer.

Jika memungkinkan, perintah find harus memanggil skrip shell pada file yang berjalan:

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

pada setiap file.

im3r3k
sumber
Setelah membaca dan meneliti banyak jawaban, saya menemukan (imho) jawaban ini sebagai yang paling menyeluruh. Saya hanya akan menambahkan bahwa karena shred tidak menghapus direktori saya menambahkan rm -rvf $1ke skrip shell (di mana $ 1 adalah / path / ke / file Anda lewat dari {}ekspansi di find... -exec)
JoelAZ
4
Rusak sudah melakukan fsync (2) setelah setiap lulus. Justru karena Anda perlu memaksa perubahan file untuk mencapai disk sebelum lulus selanjutnya.
Ángel
Apa yang depthdilakukan di sini? Juga tidak yakin tentang garis miring terbalik
geneorama
5
find /your/directory -exec shred {} \;

sumber
Terpilih, tetapi James mengalahkan Anda satu menit untuk menerima.
Steve V.
Apakah ini berfungsi tanpa opsi -depth? Apakah ini berfungsi pada sistem file jurnal modern?
pengguna tidak diketahui
3
find [dirname] -depth -type f -exec shred -n1 {} \;

Ini melakukan pencarian mendalam-pertama untuk file dalam direktori [dirname], kemudian jalankan shred -n1perintah pada setiap file. Saat menghapus file dan / atau direktori, menambahkan -depthsebagai default adalah kebiasaan yang baik, meskipun itu tidak sepenuhnya diperlukan untuk kasus ini. Ketika menjalankan perintah semacam ini dengan rm -rfalih - alih shred, -depthdiperlukan untuk memastikan bahwa direktori tidak dihapus sebelum isi direktori dicoba untuk dihapus (sehingga menyebabkan kesalahan).

Alexander
sumber
3
Anda harus menggunakan shred -N 1, karena default, mencabik-cabik 3 kali, adalah minyak ular. Satu kali saja sudah cukup, atau 30 kali tidak akan berhasil.
pengguna tidak diketahui
Memberikan perintah sederhana sebagai jawaban bukanlah cara terbaik untuk menjawab pertanyaan. Saya akan merekomendasikan menambahkan sedikit penjelasan tentang apa yang dilakukan jalur dan kemungkinan batasan yang terkait dengan penggunaannya.
n0pe
0

Metode paling menyeluruh shredyang saya temukan, termasuk penghapusan direktori, adalah dengan findmemanggil skrip untuk shred:

  • menimpa file
  • sinkronkan
  • lalu hapus
  • dan akhirnya panggil rm untuk menghapus nama direktori.

Metode ini juga menangani nama file dengan spasi di dalamnya.

Pertama - shredskrip (Saya menamai milik saya dirShredder.shdan menyimpannya di /rootdirektori:

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

Kemudian, panggil script seperti ini:

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

Pastikan untuk menandai killit.shfile executable ( chmod +x) dan tentu saja perbarui path untuk dir yang ingin Anda hancurkan dan dirShredder.shjika Anda menyimpannya di tempat lain.

NOTA BENE - shredmemiliki masalah pada sistem file Copy-on-Write (ZFS, BTRFS, et al) dan bahkan pada sistem file Journal. Tidak ada cara "terbaik" yang benar-benar diterima untuk menangani hal ini yang saya temukan selain "sistem file terenkripsi" tetapi saya tidak yakin seberapa efektif ini setelah fakta.
Yang paling dekat tampaknya bisa Anda dapatkan adalah menimpa semua ruang kosong pada drive dengan data acak setelah operasi merobek-robek Anda (bukan nol, tampaknya ini tidak selalu dapat diandalkan.) Selain itu, SSD mungkin memiliki pertimbangan lain juga (seperti TRIM.)

Saya tidak akan membahasnya di sini, ada jawaban Stack lainnya (@user jawaban yang tidak diketahui dalam pertanyaan ini misalnya) dan banyak diskusi di seluruh 'jaring yang membahas topik ini jadi cari mereka jika Anda membutuhkan tingkat keamanan itu.

JoelAZ
sumber