Jak rekurencyjnie niszczyć całe drzewo katalogów?


47

Mam drzewo katalogów, które chciałbym zniszczyć za pomocą narzędzia Linux „shred”. Niestety, niszczenie nie ma -Ropcji niszczenia rekurencyjnego.

Jak mogę zniszczyć rekurencyjnie całe drzewo katalogów?

Odpowiedzi:


45

Użyj findpolecenia, aby wykonać shredrekurencyjnie:

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

Czy to działa bez opcji -depth? Czy działa na nowoczesnych systemach plików z księgowaniem?
użytkownik nieznany

@ userunknown Nie, shred nie działa na nowoczesnych systemach plików z księgowaniem. Aby uzyskać bardziej szczegółowe informacje, zobacz man shred.
FanaticD

Zauważ też, że ta metoda nie będzie nawet próbować kasować nazw plików , więc wszelkie dane przechowywane w ten sposób na pewno pozostaną w tyle ( srmod odpowiedzi @ Cookie przynajmniej spróbuje osłabić ten problem).
ntninja

Użyj, -exec shred {} +aby przyspieszyć, ponieważ shred akceptuje wiele argumentów.
Sumit

28

Uważaj na strzępy!

Z podręcznej strony:

PRZESTROGA: Należy pamiętać, że niszczenie opiera się na bardzo ważnym założeniu: że system plików zastępuje dane w miejscu. Jest to tradycyjny sposób wykonywania zadań, ale wiele nowoczesnych projektów systemów plików nie spełnia tego założenia. Poniżej przedstawiono przykłady systemów plików, w których niszczenie nie jest skuteczne lub nie gwarantuje się, że będzie skuteczne we wszystkich trybach systemu plików:

  • logowane lub kronikowane systemy plików, takie jak te dostarczane z AIX i Solaris (i JFS, ReiserFS, XFS, Ext3 itp.)

  • systemy plików, które zapisują zbędne dane i działają nawet w przypadku niepowodzenia zapisu, takie jak systemy plików oparte na RAID

  • systemy plików, które wykonują migawki, takie jak serwer NFS urządzenia sieciowego

  • systemy plików buforowane w tymczasowych lokalizacjach, takie jak klienci NFS w wersji 3

  • skompresowane systemy plików

W przypadku systemów plików ext3 powyższe zastrzeżenie ma zastosowanie (a zatem niszczenie ma ograniczoną skuteczność) tylko w trybie data = dziennik, który rejestruje dane pliku oprócz samych metadanych. Zarówno w trybie data = uporządkowany (domyślnie), jak i data = zapis zwrotny, niszczenie działa jak zwykle. Tryby kronikowania Ext3 można zmienić, dodając opcję data = coś do opcji montowania dla konkretnego systemu plików w pliku / etc / fstab, jak udokumentowano na stronie man montowania (montowanie man).

Ponadto kopie zapasowe systemu plików i zdalne kopie lustrzane mogą zawierać kopie pliku, których nie można usunąć, co pozwoli później odzyskać zniszczony plik.

Rozwiązanie: Użyj zaszyfrowanego systemu plików i po prostu usuń pliki.


+1 za wskaźnik na strzępie, wcześniej miałem podobny przypadek. Nie działało na NFS NetApp. NetApp używa WAFL i który używa kopiowania przy zapisie, w tym metajournalling, więc ma rację. Również w najnowszym systemie ZFS Solaris jest kolejnym przypadkiem, w którym niszczą narzędzia.
Nikhil Mulley,

6
To złe rozwiązanie. Zaszyfrowany system plików jest bezpieczny tylko pod warunkiem, że jest zablokowany (i tak odmontowany). Gdy tylko system operacyjny zostanie uruchomiony, dane są do zdobycia.
oleks,

3
@oleks: Zarówno użycie, jak shredi szyfrowanie danych uniemożliwiają odczyt danych z offline urządzenia pamięci (kradzież lub policja) z szyfrowaniem danych, które ma dodatkową zaletę ochrony wszystkich plików, a nie tylko tych (prawidłowo) usuniętych. Po zamontowaniu systemu plików wracamy do dobrych olxowych uprawnień w obu przypadkach, a ochrona danych staje się ponownie zadaniem bezpieczeństwa systemu operacyjnego i prawidłowego administrowania systemem. Szyfrowanie systemu plików z góry nie jest zdecydowanie gorsze w ochronie danych w spoczynku niż strategiczne użycie shred!
ntninja

12

Zamiast tego użyj bezpiecznego usuwania.

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

Gotowy. Bezpieczne usuwanie jest o wiele bardziej paranoiczne niż niszczenie, przy użyciu 38 przebiegów zamiast 3. Aby wykonać szybki pojedynczy przebieg, użyj

srm -rfll pathname

fll daje ci mniej losowy generator danych i tylko jedno przejście.


Czy to rozwiązuje problem wymieniony w unix.stackexchange.com/a/27075/18886 ?
Ian Dunn

Jak to możliwe? Nie
plik cookie

Zauważ, że ta metoda ma dodatkową zaletę w stosunku do proponowanych findmetod opartych na proponowanych metodach, które będą próbowały również wymazać zapisane nazwy plików poprzez zmianę nazw plików przed ich obcięciem i odłączeniem.
ntninja

Metody oparte na wyszukiwaniu @ntninja używają shred, a shred zmienia nazwy plików przed zakończeniem ich usuwania. Więc te same korzyści, prawda?
tuxayo

11

Łącząc tę ​​odpowiedź z najbardziej znanymi opcjami niszczenia za pomocą tego linku przepełnienia stosu „ Trwale i bezpiecznie usuwając pliki w CentOS ”:

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

Edycja: należy pamiętać, że najlepsza odpowiedź na niszczenie pojedynczego pliku wymusza synchronizację, która zapisuje zmiany na nośniku przed usunięciem pliku, ponieważ niektóre lub wszystkie kronikowane systemy plików mają bufor.

Jeśli to możliwe, polecenie find powinno wywołać skrypt powłoki w pliku, który działa:

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

na każdym pliku.


Po przeczytaniu i zbadaniu wielu odpowiedzi, znalazłem (imho) tę odpowiedź, która jest najbardziej dokładna. Dodałbym tylko, że ponieważ shred nie usuwa katalogów, dołączyłem rm -rvf $1do skryptu powłoki (gdzie 1 $ to plik / path / to / your / przekazany z {}rozszerzenia w find... -exec)
JoelAZ

4
shred już wykonuje fsync (2) po każdym przejściu. Właśnie dlatego, że musisz wymusić, aby zmiany plików dotarły na dysk przed następnym przejściem.
Ángel

Co depthtu robi? Również niepewny co do odwrotnego ukośnika
genorama,

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

Głosowałem, ale James pobił cię o minutę za akceptację.
Steve V.

Czy to działa bez opcji -depth? Czy działa na nowoczesnych systemach plików z księgowaniem?
użytkownik nieznany

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

Wykonuje to wyszukiwanie w pierwszej kolejności plików w katalogu [nazwa_katalogu], a następnie uruchamia shred -n1polecenie dla każdego pliku. Podczas usuwania plików i / lub katalogów dodawanie -depthjako domyślny jest dobrym nawykiem, nawet jeśli nie jest to absolutnie potrzebne w tym przypadku. Podczas uruchamiania tego rodzaju polecenia za pomocą rm -rfzamiast shred, -depthnależy upewnić się, że katalogi nie zostaną usunięte przed próbą usunięcia zawartości katalogów (powodując w ten sposób błędy).


3
Powinieneś użyć shred -N 1, ponieważ domyślnym, niszczeniem 3 razy, jest olej wężowy. Albo wystarczy jeden raz, albo 30 razy nie zadziała.
użytkownik nieznany

Podanie prostej komendy jako odpowiedzi nie jest najlepszym sposobem na udzielenie odpowiedzi na pytanie. Poleciłbym dodanie małego wyjaśnienia na temat tego, co robi linia i możliwych ograniczeń związanych z jej używaniem.
n0pe

0

Najbardziej dokładną shredmetodą, jaką znalazłem, obejmującą również usunięcie katalogu, jest findwywołanie skryptu w celu shred:

  • nadpisz plik
  • synchronizacja
  • następnie usuń
  • i na koniec wywołaj rm, aby usunąć nazwy katalogów.

Ta metoda również poprawnie obsługuje nazwy plików ze spacjami.

Po pierwsze - shredskrypt (nazwałem mój dirShredder.shi zapisałem go w /rootkatalogu:

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

Następnie wywołaj skrypt w następujący sposób:

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

Pamiętaj, aby zaznaczyć killit.shplik wykonywalny ( chmod +x) i oczywiście zaktualizować ścieżkę do katalogu, który chcesz zniszczyć, i do, dirShredder.shjeśli przechowujesz go w innym miejscu.

NOTA BENE - shredma problemy z systemami plików Copy-on-Write (ZFS, BTRFS, i in.), A nawet z systemami plików Journaling. Nie ma tak naprawdę przyjętego „najlepszego” sposobu na poradzenie sobie z tym, co znalazłem, poza „zaszyfrowanymi systemami plików”, ale nie jestem pewien, jak skuteczne jest to po fakcie.
Najbliżej, jak się wydaje, jest to, że możesz zastąpić całą pustą przestrzeń na dysku losowymi danymi po niszczeniu operacji (nie zer, wydaje się, że nie zawsze jest to wiarygodne). Ponadto dyski SSD mogą mieć także inne względy (takie jak TRIM.)

Nie wchodzę tutaj w te pytania, istnieją inne odpowiedzi stosu (na przykład odpowiedź nieznanego użytkownika w tym pytaniu) i mnóstwo dyskusji w sieci, które obejmują te tematy, więc wyszukaj je, jeśli potrzebujesz takiego poziomu bezpieczeństwa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.