Ketika file dihapus, isinya mungkin masih tersisa di sistem file, kecuali secara eksplisit ditimpa dengan sesuatu yang lain. Perintah wipe
dapat menghapus file dengan aman, tetapi sepertinya tidak memungkinkan untuk menghapus ruang disk kosong yang tidak digunakan oleh file apa pun.
Apa yang harus saya gunakan untuk mencapai ini?
Peringatan: Perangkat keras disk/SSD modern dan sistem file modern dapat membuang data di tempat-tempat di mana Anda tidak dapat menghapusnya, jadi proses ini mungkin masih meninggalkan data pada disk. Satu-satunya cara yang aman untuk menghapus data adalah perintah ATA Secure Erase (jika diterapkan dengan benar), atau penghancuran fisik. Lihat juga Bagaimana saya bisa menghapus semua informasi pada hard drive?
Anda dapat menggunakan seperangkat alat yang disebut secure-delete.
Sudo apt-get install secure-delete
Ini memiliki empat alat:
srm
- menghapus file yang ada dengan amansmem
- menghapus jejak file dari ram dengan amansfill
- hapus semua ruang yang ditandai kosong di hard drive Andasswap
- hapus semua data dari ruang swap Anda.
Dari halaman manual srm
srm dirancang untuk menghapus data pada media dengan cara yang aman yang tidak dapat dipulihkan oleh pencuri, penegak hukum atau ancaman lainnya. Algoritme penghapusan didasarkan pada kertas "Penghapusan Aman Data dari Memori Magnetik dan Solid-State" disajikan pada Simposium Keamanan Usenix ke-6 oleh Peter Gutmann, salah satu kriptografi sipil terkemuka.
Proses penghapusan data aman srm berjalan seperti ini:
- 1 lulus dengan 0xff
- 5 operan acak.
/dev/urandom
digunakan untuk RNG yang aman jika tersedia.- 27 berlalu dengan nilai-nilai khusus yang didefinisikan oleh Peter Gutmann.
- 5 operan acak.
/dev/urandom
digunakan untuk RNG yang aman jika tersedia.- Ubah nama file menjadi nilai acak
- Pangkas file
Sebagai langkah tambahan keamanan, file dibuka dalam mode O_SYNC dan setelah setiap melewati panggilan
fsync()
dilakukan.srm
menulis 32k blok untuk keperluan kecepatan, mengisi buffer cache disk untuk memaksa mereka mem-flush dan menimpa data lama yang menjadi milik file tersebut.
Cara tercepat, jika Anda hanya memerlukan satu pass dan hanya ingin mengganti semuanya dengan nol, adalah:
cat /dev/zero > zero.file
sync
rm zero.file
(dijalankan dari direktori pada sistem file yang ingin Anda hapus)
(perintah sync
adalah ukuran paranoia yang memastikan semua data ditulis ke disk - manajer cache yang cerdas mungkin berhasil bahwa ia dapat membatalkan penulisan untuk blok yang tertunda ketika file tidak terhubung)
Akan ada waktu selama operasi ini ketika tidak akan ada ruang kosong sama sekali pada sistem file, yang bisa menjadi puluhan detik jika file yang dihasilkan besar dan terfragmentasi sehingga perlu beberapa saat untuk menghapus. Untuk mengurangi waktu ketika freespace benar-benar nol:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file
Ini harus cukup untuk menghentikan seseorang membaca konten file lama tanpa operasi forensik yang mahal. Untuk varian yang sedikit lebih aman, tetapi lebih lambat, ganti /dev/zero
dengan /dev/urandom
. Untuk lebih banyak paranoia, jalankan beberapa langkah dengan /dev/urandom
, meskipun jika Anda membutuhkan banyak upaya, utilitas shred
dari paket coreutils adalah cara yang harus dilakukan:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file
Perhatikan bahwa di atas file kecil diparut sebelum membuat yang lebih besar, sehingga dapat dihapus segera setelah yang lebih besar selesai daripada harus menunggu untuk diparut meninggalkan sistem file dengan nol ruang kosong untuk waktu yang diperlukan. Proses rusak dengan mengambil lama waktu lebih dari satu file besar dan kecuali Anda mencoba menyembunyikan sesuatu dari NSA tidak benar-benar diperlukan IMO.
Semua hal di atas harus bekerja pada sistem file apa pun.
Batas Ukuran File:
Seperti DanMoulding tunjukkan dalam komentar di bawah, ini mungkin memiliki masalah dengan batasan ukuran file pada beberapa sistem file.
Untuk FAT32 itu pasti menjadi perhatian karena batas file 2GiB: sebagian besar volume lebih besar dari ini hari ini (8TiB adalah batas ukuran volume IIRC). Anda dapat mengatasinya dengan memiparkan output output cat /dev/zero
besar melalui split
untuk menghasilkan beberapa file yang lebih kecil dan menyesuaikan rusak dan menghapus tahapan yang sesuai.
Dengan ext2/3/4 itu kurang menjadi perhatian: dengan blok standar/umum 4K batas ukuran file adalah 2TiB sehingga Anda harus memiliki volume besar untuk dapat menjadi masalah (ukuran volume maksimum dalam kondisi ini adalah 16TiB).
Dengan (masih eksperimental) btrf baik ukuran file dan volume maksimum adalah 16EiB besar.
Di bawah NTFS panjang file maks lebih besar dari panjang volume maks dalam beberapa kasus bahkan.
Titik awal untuk info lebih lanjut:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability
Perangkat Virtual
Seperti yang disebutkan dalam komentar baru-baru ini, ada pertimbangan tambahan untuk perangkat virtual:
Untuk disk virtual yang jarang dialokasikan, metode lain seperti yang digunakan oleh zerofree
akan lebih cepat (meskipun tidak seperti cat
dan dd
ini bukan alat standar yang dapat Anda andalkan tersedia di hampir semua OS mirip unix).
Sadarilah bahwa mem-nolkan blok pada perangkat virtual yang jarang mungkin tidak menghapus blok pada perangkat yang mendasari fisik , sebenarnya saya akan mengatakan bahwa tidak mungkin - disk virtual manajer hanya akan membuat blok karena tidak lagi digunakan sehingga dapat dialokasikan untuk hal lain nanti.
Bahkan untuk perangkat virtual ukuran tetap, Anda mungkin tidak memiliki kontrol di mana perangkat hidup secara fisik sehingga dapat dipindahkan di sekitar lokasi saat ini atau ke set disk fisik baru kapan saja dan yang paling bisa Anda hapus adalah lokasi saat ini, bukan lokasi sebelumnya yang mungkin dihuni oleh blok tersebut.
Untuk masalah di atas pada perangkat virtual: kecuali Anda mengontrol Host dan dapat melakukan pembersihan ruang yang tidak teralokasi dengan aman setelah itu menghapus disk di VM atau memindahkan perangkat virtual, tidak ada yang Anda dapat melakukan ini setelah fakta. Satu-satunya jalan adalah dengan menggunakan enkripsi disk penuh dari awal sehingga tidak ada yang tidak dienkripsi setiap ditulis ke media fisik di tempat pertama. Mungkin masih ada panggilan untuk pembersihan ruang kosong dalam VM tentu saja. Perhatikan juga bahwa FDE dapat membuat perangkat virtual yang jarang sangat berguna karena lapisan virtualisasi tidak dapat benar-benar melihat blok mana yang tidak digunakan. Jika lapisan sistem file OS mengirimkan perintah trim ke perangkat virtual (seolah-olah itu adalah SSD), dan pengontrol virtual mengartikan ini, maka itu mungkin menyelesaikan ini, tapi saya tidak tahu keadaan di mana ini benar-benar terjadi dan lebih luas diskusi tentang hal itu adalah masalah di tempat lain (kami sudah hampir tidak berada di luar topik untuk pertanyaan awal, jadi jika ini telah menarik minat Anda, beberapa percobaan dan/atau pertanyaan lanjutan mungkin dilakukan).
Saya terkejut dengan berapa banyak file photorec yang dapat diambil dari disk saya, bahkan setelah dihapus.
Apakah ada keamanan lebih dalam mengisi "ruang kosong" hanya 1 kali dengan 0x00 atau 38 kali dengan standar kabalistik yang berbeda lebih merupakan diskusi akademis. Penulis makalah seminal 1996 tentang merobek-robek menulis sendiri epilog yang mengatakan bahwa ini sudah usang dan tidak perlu untuk perangkat keras modern. Tidak ada kasus data terdokumentasi yang secara fisik diganti nol dan dipulihkan sesudahnya.
Tautan rapuh sebenarnya dalam prosedur ini adalah sistem file . Beberapa filesystem cadangan ruang untuk penggunaan khusus, dan itu tidak tersedia sebagai "ruang kosong". Tapi data Anda mungkin ada di sana . Itu termasuk foto, email teks biasa pribadi, apa pun. Saya baru saja googled reserved + space + ext4 dan mengetahui bahwa 5% dari partisi home
saya sudah dipesan. Saya kira ini adalah photorec
menemukan begitu banyak barang saya. Kesimpulan: metode merobek-robek bukan yang paling penting, bahkan metode multi-pass masih meninggalkan data di tempat .
Anda dapat mencoba # tune2fs -m 0 /dev/sdn0
sebelum memasangnya. (Jika ini akan menjadi partisi root setelah reboot, pastikan jalankan -m 5
atau -m 1
setelah melepaskannya).
Tapi tetap saja, dengan satu atau lain cara, mungkin masih ada ruang tersisa.
Satu-satunya cara yang benar-benar aman adalah menghapus seluruh partisi, membuat sistem file lagi, dan kemudian mengembalikan file Anda dari cadangan.
Cara cepat (disarankan)
Jalankan dari direktori pada sistem file yang ingin Anda hapus:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file
Catatan: tujuan file kecil adalah untuk mengurangi waktu ketika ruang kosong sama sekali nol; tujuan sinkronisasi adalah untuk memastikan data benar-benar ditulis.
Ini harus cukup baik bagi kebanyakan orang.
Cara lambat (paranoid)
Tidak ada kasus data yang didokumentasikan yang dipulihkan setelah pembersihan di atas. Akan mahal dan membutuhkan banyak sumber daya, jika mungkin sama sekali.
Namun, jika Anda memiliki alasan untuk berpikir bahwa agen rahasia akan menghabiskan banyak sumber daya untuk memulihkan file Anda, ini sudah cukup:
dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file
Butuh waktu lebih lama.
Peringatan. Jika Anda telah memilih cara paranoid, setelah ini Anda masih ingin melakukan penghapusan cepat, dan itu bukan paranoia. Kehadiran data acak murni mudah dan murah untuk dideteksi, dan menimbulkan kecurigaan bahwa itu adalah data yang dienkripsi. Anda bisa mati di bawah siksaan karena tidak mengungkapkan kunci dekripsi.
Cara sangat lambat (paranoid gila)
Bahkan penulis makalah seminal 1996 tentang merobek-robek menulis sebuah epilog yang mengatakan bahwa ini sudah usang dan tidak perlu untuk perangkat keras modern.
Tetapi jika Anda masih memiliki banyak waktu luang dan Anda tidak keberatan menghabiskan disk Anda dengan banyak overwritting, ini dia:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file
Catatan: ini pada dasarnya setara dengan menggunakan alat hapus-aman.
Sebelum diedit, postingan ini adalah penulisan ulang karya David Spillett. Perintah "cat" menghasilkan pesan kesalahan, tapi saya tidak bisa menulis komentar pada posting orang lain.
Setidaknya ada utilitas zerofree di Ubuntu:
http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html
zerofree — zero free blocks from ext2/3 file-systems
zerofree finds the unallocated, non-zeroed blocks in an ext2 or ext3
filesystem (e.g. /dev/hda1) and fills them with zeroes. This is useful
if the device on which this file-system resides is a disk image. In
this case, depending on the type of disk image, a secondary utility may
be able to reduce the size of the disk image after zerofree has been
run.
The usual way to achieve the same result (zeroing the unallocated
blocks) is to run dd (1) to create a file full of zeroes that takes up
the entire free space on the drive, and then delete this file. This has
many disadvantages, which zerofree alleviates:
· it is slow;
· it makes the disk image (temporarily) grow to its maximal extent;
· it (temporarily) uses all free space on the disk, so other
concurrent write actions may fail.
filesystem has to be unmounted or mounted read-only for zerofree to
work. It will exit with an error message if the filesystem is mounted
writable. To remount the root file-system readonly, you can first
switch to single user runlevel (telinit 1) then use mount -o remount,ro
filesystem.
Juga periksa tautan ini tentang zerofree: Menjaga gambar filesystem jarang - ini dari penulisnya - Ron Yorston (9 Agustus 2012)
Inilah cara melakukannya dengan GUI.
Kemajuan BleachBit lebih dari dd (yang dinyatakan sangat bagus) adalah ketika disk akhirnya penuh, BleachBit membuat file kecil untuk menghapus inode (yang berisi metadata seperti nama file, dll).
Anda dapat menghapus ruang kosong Anda dengan menggunakan paket penghapusan aman.
Dalam paket itu Anda dapat menemukan alat sfill
, yang dirancang untuk menghapus data yang terletak pada ruang disk yang tersedia pada media secara aman yang tidak dapat dipulihkan oleh pencuri, penegak hukum atau ancaman lainnya.
Untuk menginstal paket penghapusan aman di Linux (Ubuntu), instal dengan perintah berikut:
$ Sudo apt-get install secure-delete
Kemudian untuk menghapus data Anda tanpa ruang kosong, coba perintah berikut:
sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY
Di mana/YOUR_MOUNTPOINT/OR_DIRECTORY adalah titik pemasangan Anda (df -h
, mount
) atau direktori untuk menghapus ruang kosong.
Baca manual di http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html
Bersihkan drive dengan kecepatan tinggi.
Instruksi umum untuk mengenkripsi drive saat ini akan meminta Anda untuk terlebih dahulu WIPE drive.
Perintah di bawah ini akan mengisi drive Anda dengan ciphertext AES.
Gunakan live CD jika Anda perlu menghapus drive boot utama Anda.
Buka terminal dan tingkatkan hak istimewa Anda:
Sudo bash
Mari kita buat daftar semua drive di sistem agar aman:
cat /proc/partitions
CATATAN: Ganti /dev/sd{x}
dengan perangkat yang ingin Anda hapus.
PERINGATAN: Ini bukan untuk amatir! Anda dapat membuat sistem Anda tidak dapat di-boot !!!
Sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}
Saya terkejut melihat seberapa cepat ini.
Saya menggunakan dd
untuk mengalokasikan satu atau lebih file besar untuk mengisi ruang kosong, kemudian menggunakan utilitas penghapusan aman.
Untuk mengalokasikan file dengan dd coba:
dd if=/dev/zero of=delete_me bs=1024 count=102400
Ini akan menghasilkan file bernama delete_me
yang berukuran 100 MB. (Di sini bs
adalah "ukuran blok" yang disetel ke 1k, dan count
adalah jumlah blok yang dialokasikan.)
Kemudian gunakan utilitas penghapusan aman favorit Anda (Saya telah menggunakan shred
) pada file yang dibuat.
Tapi PERHATIKAN INI: buffering berarti bahkan jika Anda melakukanseluruhdisk, Anda mungkin tidak mendapatkan semuanya!
Tautan ini merekomendasikan scrub
untuk penghapusan ruang kosong. Belum mencobanya.
Anda mungkin sudah menginstal paket GNU coreutils pada sistem Anda. Ini memberikan perintah rusak .
Lebih mudah menggunakan scrub :
scrub -X dump
Ini akan membuat folder dump
di lokasi saat ini dan membuat file hingga disk penuh. Anda dapat memilih pola dengan opsi -p
(nnsa|dod|bsi|old|fastold|gutmann
).
Tidak mudah untuk menginstal scrub ( lihat Forum Ubuntu tentang ini ), tetapi begitu instalasi selesai, Anda memiliki alat yang SANGAT SEDERHANA dan efisien di tanganmu.
Saya menemukan solusi sederhana yang berfungsi di Linux dan di MacOS. Pindahkan di folder root disk Anda dan luncurkan perintah ini:
for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;
di mana // DISKSPACE // adalah ukuran dalam GB hard disk Anda.
gunakan dd dan kosongkan ruang kosong. itu adalah data mitos yang harus ditulis berulang kali (tanyakan peter guntmann) dan data acak, berbeda dengan 1 lalu 0 berarti aktivitas yang tidak wajar. maka hasil akhirnya adalah drive bersih dengan cara yang lebih sedikit menghabiskan waktu menulis. selain itu, program penghapusan aman tidak dapat menjamin mereka bahkan menimpa file nyata pada sistem file modern (dijurnal). bantulah diri Anda sendiri dan dapatkan photorec, pindai drive Anda untuk melihat kekacauan, usap dengan angka 1 dan secara opsional dengan nol untuk membuatnya tampak tidak tersentuh. Jika photorec masih menemukan hal-hal, ingat itu memindai semua yang tersedia, jadi lakukan ini dengan hati-hati lagi dengan pengguna root.
ingat, cia/fbi/nsa tidak memiliki mesin mewah yang dapat membaca keadaan sebenarnya dari bit media magnetik Anda. itu semua hanya kertas yang sudah lama ditulis. a "bagaimana-jika". Anda hanya perlu menghapus 1 kali.
Berikut ini skrip "sdelete.sh" yang saya gunakan. Lihat komentar untuk detailnya.
# Install the secure-delete package (sfill command).
# To see progress type in new terminal:
# watch -n 1 df -hm
# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.
# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill
Sudo tune2fs -m 0 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
Sudo sfill -vfllz /
# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file
Sudo tune2fs -m 5 /dev/sda1
Sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
Ini bukan jawaban! Hanya komentar untuk mereka yang ingin menggunakan pv
... jadi jangan repot-repot memilih.
Pada Linux Mint 17.3 Anda dapat menggunakan pv
( tampilan pipa ) untuk mendapatkan kemajuan penulisan. Sebagai contoh:
# Install pv (pipe view)
Sudo apt-get install pv
# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >Rand.file
Keuntungannya di sini adalah Anda mendapatkan bilah kemajuan, ETA, dan laju data yang terus diperbarui. Kerugiannya adalah ini ditulis pada satu baris dan ketika disk penuh (mengembalikan kesalahan), ia menghilang. Ini terjadi karena ukuran penuh merupakan perkiraan karena OS kemungkinan akan menggunakan disk saat operasi yang sangat lama ini berlangsung, terutama pada volume OS.
Pada HD yang sangat lama, saya mendapatkan kecepatan data tentang 13 MB/s menggunakan /dev/urandom
, dan sekitar 70 MB/s , saat menggunakan /dev/zero
. Ini mungkin akan meningkat lebih lanjut ketika menggunakan dd
mentah atau cat
, dan bukan pv
.
Saya terkadang menggunakan bash one-liner ini:
while :; do cat /dev/zero > zero.$RANDOM; done
Ketika mulai mengatakan bahwa disk sudah penuh, cukup tekan Ctrl+C dan hapus file zero.*
yang dibuat.
Ia bekerja pada sistem apa pun, apa pun batas ukuran file.
Abaikan kesalahan cat: write error: File too large
.