Terminal pogryzł człowieka: shred

Być może niektórych to zaskoczy, ale usuwając plik z dysku lub go formatując (dysk), wcale nie pozbywamy się jego zawartości. W bardziej lub prostszy sposób dane to mogą zostać odzyskane, a ponieważ żyjemy w niepewnych czasach, niekiedy warto zadbać o swoją godność. Tym bardziej, że większość a wręcz wszystkie dystrybucje Linuksa dostarczają nam domyślnie wdzięcznego narzędzia o nazwie shred. Z nim usuwanie plików może stać się nieco bardziej skuteczne.

W większości czy nawet we wszystkich dystrybucjach polecenie shred znajduje się w pakiecie coreutils. Jest on domyślnie instalowany, więc jedyne co nam pozostaje, to zapoznać się z zasadami działania polecenia. A shred można wykorzystać zarówno do skutecznego usuwania pliku z dysku, jak też całej zawartości partycji. O co chodzi w tym panicznym zacieraniu śladów?

Na początku musimy pogodzić się z rzeczywistością – usunięcie pliku (polecenie rm) tak naprawdę kasuje tylko wskaźnik pozwalający określić położenie pliku na dysku – sama zawartość pliku pozostaje nienaruszona i zwykle po paru minutach zostaje nadpisana innymi danymi, lecz nigdy nie możemy być tego pewni. Mało tego – nawet tak nadpisana zawartość, po zabrania dysku przez smutnych panów do profesjonalnego laboratorium, może zostać odtworzona przez drogi urządzenia rejestrujące ślady danych ‘pod’ obecnymi danymi. Dlatego shred do tematu usuwania zawartości podchodzi nieco inaczej.

$ shred -uvz -n 25 nasze_dane.txt

Powyższe polecenie faktycznie usunie pliku (-u) dopiero po nadpisaniu jego zawartości zerami (-z) – w celu ukrycia procesu niszczenia danych. I to zamazywanie zostanie powtórzone 25 razy (-n 25). Dzięki parametrowi -v będziemy na bieżąco mogli podejrzeć postęp tych działań.

Podobnie możemy postąpić z partycją pełną dobra wszelakiego:

$ shred -fuvz -n 100 /dev/sda2

Zasada podobna, dołożyliśmy -f do wymuszenia zmian praw dostępu. Wymazywanie partycji najlepiej przeprowadzać jako root.

To oczywiście może być zaledwie czubek paranoi skutecznego zacierania śladów z dysku. W trybie usuwania pojedynczych plików shred nie jest doskonały – nie gwarantuje skuteczności gdy dane znajdują się na systemie plików z kroniką, lub w zestawach RAID, jak również nie sprawdzi się przy zaszyfrowanych partycjach. Oczywiście, poza przypadkami, gdy niszczymy całe partycje.

UWAGA: Należy pamiętać, że shred opiera się na ważnym założeniu: że system
plików zamazuje dane w tym samym miejscu, gdzie je pierwotnie zapisał. Tak
dzieje się tradycyjnie, ale wiele nowoczesnych systemów plików tak nie robi.
Z następującymi systemami plików shred nie działa efektywnie albo nie ma
gwarancji, że działa efektywnie we wszystkich trybach pracy systemu plików:

* opartymi na logowaniu i journalingu, jak dostarczane z AIXem i Solarisem
(oraz JFS, ReiserFS, XFS, Ext3 itd.)

* takimi, które zapisują dane na dodatkowych dyskach i kontynuują pracę,
nawet jeżeli nie udają się niektóre operacje zapisu, jak systemy plików
oparte na RAID

* które zapisują stan chwilowy, jak serwer NFS Network Appliance

* używającymi tymczasowego cache’a, jak klient wersji 3 NFS

* kompresowanymi

W przypadku systemu plików ext3 powyższe uwagi mają znaczenie (a shred ma
wtedy ograniczona efektywność) tylko w trybie data=journal, w którym
journallingowi podlega oprócz metadanych również zawartość pliku. Zarówno w
trybie data=ordered (domyślny) jak data=writeback shred działa jak zazwyczaj.
Tryb jourinallingu ext3 może byc zmieniony przez dodanie opcji data=opcja do
opcji mount-a dla danego systemu plików w pliku /etc/fstab, jak podaje manual
(man mount)

Dodatkowo backupy i zdalne kopie mogą zawierać egzemplarze tego samego pliku,
które nie mogą zostać usunięte i plik zamazany schredem może zostać
odtworzony.