Całkowite usuwanie plików przy pomocy shred

Spis treści

W przypadku, gdy musimy pozbyć się jakiegoś pliku, który znajduje się na dysku, to nie jest zalecane korzystanie z narzędzia rm . Usuwa ono jedynie odnośnik do pliku, który go identyfikuje w strukturze systemu plików, tzw. i-węzeł (i-node). To co uzyskujemy za pomocą takich narzędzi jak rm , to jedynie oznaczenie pewnych bloków (tych od pliku) jako wolne, w których system operacyjny będzie w stanie dokonać zapisu danych późniejszym czasie. Podczas tej operacji nie są usuwane żadne informacje z dysku, a mając na uwadze ten fakt, możemy bez problemu tak "usunięty" plik odzyskać. By mieć pewność, że plik zostanie trwale zniszczony, trzeba go ponownie napisać, np. przy pomocy shred, który standardowo jest dostępny w każdej dystrybucji linux'a i to jemu będzie poświęcony ten wpis.

Usuwanie plików, a dziennik systemu plików

Gdy nasz linux działa na systemie plików z rodziny ext* (obecnie ext4 ), to wszystkie narzędzia mające na celu przepisanie odpowiednich bloków mogą nie być skuteczne w zacieraniu śladów po usuniętych plikach. Zatem trzeba się liczyć z faktem, że po nadpisaniu przez shred plik na dysku, informacje o tej operacji będą znajdować się w dzienniku systemu plików.

W zależności od konfiguracji systemu plików w /etc/fstab , dziennik może zawierać jedynie metadane dokonanych zmian ale może także zawierać również i realne dane. W pierwszym przypadku może i nie damy rady odzyskać pliku jako takiego ale możemy pozyskać informacje na temat jego wielkości oraz nazwy. W drugim przypadku zaś, kopia pliku znajduje się w dzienniku i można ją bez problemu wydobyć.

Jednym z wyjść byłoby zatem dostosowanie konfiguracji w pliku fstab . Zgodnie z oficjalną dokumentacją systemu plików ext4, możemy określić kilka trybów: data=writeback , data=ordered oraz data=journal . Te dwa pierwsze logują w dzienniku jedynie metadane, natomiast ten trzeci również faktyczne dane. Domyślnym trybem jest data=ordered , zatem nie powinniśmy tutaj nic zmieniać.

Tak czy inaczej w dzienniku zostaną zalogowane metadane plików i by tego uniknąć trzeba by zrezygnować z opcji systemu plików odpowiedzialnej za księgowanie. Trzeba tylko pamiętać o tym, że to może prowadzić do utraty danych w przypadku awarii zasilania czy zwykłego zawieszenia się systemu. Można by oczywiście tymczasowo usunąć dziennik, skasować wszystkie niewygodne pliki, po czym ten dziennik utworzyć na nowo. By usunąć dziennik, trzeba pierw odmontować partycję, po czym wydać to poniższe polecenie:

# tune2fs -O ^has_journal /dev/sda6

Teraz można zamontować partycję i usunąć wszystkie zbędne pliki. Gdy skończymy, to dziennik tworzymy w poniższy sposób:

# tune2fs -j /dev/sda6

Usuwanie plików

Usuwanie plików przy pomocy shred trwa nieco dłużej niż ma to miejsce w przypadku rm . Trzeba przecież zapisać poszczególne bloki, a im większy jest plik, tym ta operacja zajmie odpowiednio więcej czasu. Pliki usuwamy zaś w poniższy sposób:

$ shred -f -v -u -z -n 3 plik

Poniżej wyjaśnienie opcji:

  • -f -- tryb siłowy, który ma na celu przepisanie uprawnień by umożliwić zapis pliku.
  • -v -- tryb rozmowy pokazujący większą ilość informacji.
  • -u -- przycina i usuwa plik pod nadpisaniu go.
  • -z -- zerowanie pliku po ostatnim nadpisaniu pliku.
  • -n -- ilość przepisań, domyślnie 3.

To w zasadzie cała procedura bezpiecznego usuwania plików z dysku. Jeśli chcemy usunąć wszelkie dane z konkretnego nośnika, to dobrze jest zainteresować się tematem zerowania czy też ATA Secure Erase.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.