Tüm dizin ağacını yinelemeli olarak nasıl parçalarım?


47

Linux 'shred' yardımcı programı ile parçalamak istediğim bir dizin ağacım var. Maalesef, parçalamanın -Rözyinelemeli parçalama için bir seçeneği yoktur .

Tüm bir dizin ağacını yinelemeli olarak nasıl parçalayabilirim?

Yanıtlar:


45

Özyinelemeyle findçalıştırmak için komutu kullanın shred:

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

-Depth seçeneği olmadan çalışıyor mu? Modern, günlük dosya sistemleri üzerinde çalışıyor mu?
kullanıcı bilinmeyen

@ userunknown Hayır, parçalama, modern günlük kaydı dosya sistemlerinde çalışmaz. Daha kesin bilgi için lütfen bakınız man shred.
FanaticD

Ayrıca, bu yöntemin dosya isimlerini silme girişiminde bulunmayacağına dikkat edin, bu nedenle böyle saklanan veriler kesinlikle geride kalacaktır ( srm@ Cookie'nin cevabından en azından bu sorunu çözmeye çalışacaktır).
ntninja

-exec shred {} +Parçalama birden fazla argüman kabul ettiğinden daha hızlı yapmak için kullanın .
Sumit

28

Parçalanmaya dikkat!

Shred-manpage'den:

DİKKAT: Parçalamanın çok önemli bir varsayıma dayandığını unutmayın: dosya sisteminin verileri yerinde yazdığını. Bu işleri yapmanın geleneksel yoludur, ancak birçok modern dosya sistemi tasarımı bu varsayımı karşılamıyor. Aşağıda, parçalamanın etkili olmadığı veya tüm dosya sistemi modlarında etkili olacağı garanti edilmeyen dosya sistemleri örnekleri verilmiştir:

  • AIX ve Solaris (ve JFS, ReiserFS, XFS, Ext3, vb.) ile sağlananlar gibi log yapılı veya günlük dosya sistemleri

  • RAID tabanlı dosya sistemleri gibi gereksiz veriler yazan ve bazı yazma işlemleri başarısız olsa bile devam eden dosya sistemleri

  • Network Appliance'ın NFS sunucusu gibi anlık görüntüler veren dosya sistemleri

  • NFS sürüm 3 istemciler gibi geçici konumlarda önbellekleyen dosya sistemleri

  • sıkıştırılmış dosya sistemleri

Ext3 dosya sistemlerinde, yukarıdaki feragatname sadece (verinin sınırlı olması anlamına gelir) yalnızca data = dergi modunda geçerlidir, bu da sadece meta verilere ek olarak dosya verilerini de yayınlar. Hem data = order (varsayılan) ve data = writeback modlarında, shred her zamanki gibi çalışır. Ext3 günlük kaydı modları, mount man sayfasında (man mount) belgelendiği gibi / etc / fstab dosyasındaki belirli bir dosya sistemi için mount seçeneklerine data = bir şey seçeneği eklenerek değiştirilebilir.

Ek olarak, dosya sistemi yedekleri ve uzak aynalar, kaldırılamayan dosyanın parçalarını içerebilir ve bu parçalanmış bir dosyanın daha sonra kurtarılmasını sağlar.

Çözüm: Şifrelenmiş bir dosya sistemi kullanın ve dosyalarınızı silin.


Parçalayıcı üzerindeki işaretçi için +1, daha önce benzer bir durum vardı. NetApp'ın NFS'sinde çalışmadı. NetApp, WAFL'yi kullanır ve metajournalling de dahil olmak üzere yazma üzerine kopya kullanır. Ayrıca en son Solaris'in ZFS'si ile, parçalamaların yapıldığı bir başka durum.
Nikhil Mulley

6
Bu kötü bir çözüm. Şifrelenmiş bir dosya sistemi yalnızca kilitli kaldığı sürece güvenlidir (ve bu yüzden çıkarılmamış). İşletim sisteminiz çalışmaya başlar başlamaz veri çalışır durumda kalır.
oleks,

3
@oleks: Hem shredveri kullanımı hem de veri şifrelemesi, çevrimdışı bir depolama cihazından (hırsızlığı veya polisi düşün) verileri okumanın önüne geçerek veri şifrelemeye ek olarak, yalnızca silinmiş dosyaları değil (tüm dosyaları) korumaktan yararlanır. Dosya sistemi bir kez kurulduktan sonra her iki durumda da iyi unix izinlerine geri dönüyoruz ve veri koruması yine işletim sistemi güvenliği ve uygun sistem yönetimi görevi haline geliyor. Öncelikli dosya sistemi şifrelemesi kesinlikle verilerin istirahatte korunmasında stratejik kullanımdan daha kötü değildirshred !
ntninja

12

Bunun yerine güvenli silme kullanın.

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

Bitti. Güvenli silme, parçalamadan çok paranoyaktır, 3 yerine 38 geçişi kullanmak

srm -rfll pathname

fll, daha az rastgele bir veri üreteci ve sadece tek bir geçiş alır.



Nasıl olabilir? Hayır
Cookie

Bu yöntemin, findkesilmiş ve bağlantılarını kaldırmadan önce dosyaları yeniden adlandırarak saklanan dosya adlarını silmeye çalışacak önerilen tabanlı yöntemlere göre ek bir yararı olduğunu unutmayın .
ntninja

@ntninja bulma tabanlı yöntemler shred kullanır ve shred, silme işleminden önce dosyaları yeniden adlandırır. Yani aynı faydalar doğru?
tuxayo

11

Bu cevabı, bu yığın taşması bağlantısını kullanarak 'bilinen ve güvenli bir şekilde CentOS'ta Dosyaları Silme ' seçeneğini kullanarak en iyi bilinen seçeneklerle birleştirin :

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

Düzenleme: Tek bir dosyayı parçalamak için en iyi cevabın , dosyayı silmeden önce medyaya değişiklikler yazan bir senkronizasyonu zorladığının farkında olun; çünkü günlüklü dosya sistemlerinin bazılarında veya hepsinde bir tampon bulunur.

Mümkünse, find komutu çalışan dosya üzerinde bir kabuk betiği çağırmalıdır:

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

her dosyada.


Birçok cevabı okuduktan ve araştırdıktan sonra, bu cevabı en kapsamlı buldum. Sadece, rm -rvf $1{}find... -exec
shred'in

4
shred zaten her geçişten sonra fsync (2) yapıyor. Kesin olarak, bir sonraki geçişten önce diske ulaşmak için dosya değişikliklerini zorlamanız gerektiğinden.
Ángel

depthBurada ne iş yapıyor ? Sondaki ters eğik çizgi hakkında da emin
değilsiniz

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

Oy verildi, ancak James kabul etmek için seni bir dakika dövdü.
Steve V.

-Depth seçeneği olmadan çalışıyor mu? Modern, günlük dosya sistemleri üzerinde çalışıyor mu?
kullanıcı bilinmeyen

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

Bu, [dirname] dizinindeki dosyalar için ilk önce bir arama gerçekleştirir, ardından shred -n1her bir dosyadaki komutu çalıştırır . Dosyaları ve / veya dizinleri kaldırırken, -depthvarsayılan olarak eklemek , bu durum için kesinlikle gerekli olmasa da, iyi bir alışkanlıktır. İle komuta bu tür çalıştırırken rm -rfyerine shred, -depthdizinleri içeriği (böylece hataları neden olan) silinecek denenmeden önce dizinleri silinmez sağlamak için gereklidir.


3
Kullanmalısınız shred -N 1, çünkü varsayılan, 3 kez parçalama, yılan yağıdır. Ya bir kez yeterli, ya da 30 kez işe yaramayacak.
kullanıcı bilinmeyen

Cevap olarak basit bir komut vermek, bir soruyu cevaplamanın en iyi yolu değildir. Çizginin ne yaptığı ve kullanımla ilgili olası sınırlamalar hakkında küçük bir açıklama eklemenizi tavsiye ederim.
n0pe

0

shredDizin kaldırma işlemini de içeren en kapsamlı yöntem, aşağıdakileri yapmak için findbir komut dosyasını çağırmaktır shred:

  • dosyanın üzerine yaz
  • senkronize etmek
  • sonra sil
  • ve son olarak dizin isimlerini silmek için rm tuşlarına basın.

Bu yöntem ayrıca dosya adlarını içinde boşluk olan düzgün bir şekilde işler.

İlk önce - shredsenaryo (benim ismini verdim dirShredder.shve /rootdizinde sakladım:

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

Sonra betiği şöyle çağır:

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

killit.shYürütülebilir dosyayı ( chmod +x) işaretlediğinizden ve elbette parçalamak istediğiniz dizin yolunu ve dirShredder.shbaşka bir yerde saklıyorsanız güncellediğinizden emin olun .

NOTA BENE - shredYazma Kopyalama dosya sistemlerinde (ZFS, BTRFS, vb.) Ve hatta Günlük Kaydı dosya sistemlerinde sorunları vardır. "Şifrelenmiş dosya sistemleri" dışında bulduğum bununla baş etmek için kabul edilen gerçek bir "en iyi" yol yok ama bunun ne kadar etkili olduğundan emin değilim.
Alabileceğiniz en yakın görünüme, parçalama işlemlerinden sonra sürücüdeki tüm boş alanların üzerine rasgele veri yazmak (sıfırlar değil, bu her zaman güvenilir değil gibi görünüyor.) Ayrıca, SSD'lerin de başka endişeleri olabilir (TRIM gibi).

Buradakilere girmiyorum, başka Stack cevapları var (örneğin bu sorudaki kullanıcı tarafından bilinmeyenlerin cevabı) ve bu konuları kapsayan net tartışmalar bu seviyede bir güvenlik düzeyine ihtiyacınız varsa onları araştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.