Ștergerea datelor vechi se face din aceleași motive pentru care distrugem documentele fizice uzate. În acest material, vom explora modalități eficiente de a elimina definitiv fișierele în Linux, folosind comanda `shred` și suita de utilitare `secure-delete`.
De ce fișierele șterse pot fi recuperate?
Atunci când un fișier este șters, acesta nu este eliminat fizic de pe disc. Motivul constă în modul în care sistemul de fișiere gestionează inodurile. Aceste structuri de date stochează metadatele fișierelor, precum numele, locația pe disc, atributele și permisiunile. Chiar și directoarele sunt fișiere care conțin inodurile fișierelor pe care le găzduiesc.
Când folosim `rm`, sistemul eliberează inodul și actualizează directorul, marcând spațiul ocupat de fișier ca fiind disponibil. Însă, conținutul fișierului rămâne pe disc, până când este suprascris de alte date. Astfel, fișierul poate fi recuperat cu unelte specializate.
Prin urmare, ștergerea completă a unui fișier implică mai mult decât simpla sa suprascriere.
Atenție la SSD-uri
Metodele descrise aici sunt specifice hard disk-urilor tradiționale (HDD). NU le utilizați pe unități SSD. Aceste acțiuni ar provoca scrieri inutile, reducând durata de viață a SSD-ului. Pentru a șterge datele în siguranță de pe un SSD, utilizați instrumentele de ștergere oferite de producător.
Comanda `shred`
Comanda `shred` a fost creată pentru a suprascrie datele unui fișier, făcând imposibilă recuperarea acestuia. Este inclusă în majoritatea distribuțiilor Linux, precum Ubuntu, Fedora și Manjaro.
Pentru a exemplifica, vom lucra într-un director numit `~/research`, care conține fișiere text și subdirectoare. Vom presupune că aceste date sunt confidențiale și trebuie eliminate complet de pe disc.
Pentru a vizualiza structura directorului, folosim comanda `tree -d`. Opțiunea `-d` afișează doar directoarele:
tree -d
Distrugerea unui singur fișier
Pentru a distruge un fișier, putem folosi următoarea comandă, însoțită de opțiunile:
- `u`: Dezalocă și șterge fișierul după suprascriere.
- `v`: Mod verbose, pentru a vedea ce face shred.
- `z`: Efectuează o suprascriere finală cu zerouri.
shred -uvz Preliminary_Notes.txt_01.txt
Implicit, `shred` suprascrie fișierul de patru ori. Primele trei treceri folosesc date aleatorii, iar ultima folosește zerouri. Apoi, șterge fișierul și suprascrie anumite metadate din inod.
Controlul numărului de suprascrieri
Putem specifica numărul de suprascrieri cu opțiunea `-n`. Numărul furnizat reprezintă numărul de suprascrieri *suplimentare*, adică `shred` va face întotdeauna cel puțin o trecere. Pentru a obține trei treceri în total, solicităm două suplimentare:
shred -uvz -n 2 Preliminary_Notes.txt_02.txt
Rezultatul este cel așteptat, cu trei treceri de suprascriere.
Mai puține treceri înseamnă un proces mai rapid, dar cât de sigur este? Trei treceri sunt, în general, considerate suficiente.
Ștergerea mai multor fișiere
Pentru a selecta grupuri de fișiere, folosim wildcard-urile `*` (orice număr de caractere) și `?` (un singur caracter). Următoarea comandă șterge toate fișierele cu prefixul „Preliminary_Notes” din directorul curent:
shred -uvz -n 2 Preliminary_Notes_*.*
Fiecare fișier este procesat de `shred` pe rând.
`shred` nu oferă o opțiune recursivă, deci nu poate fi folosită pentru ștergerea arborescentă a directoarelor.
Provocările ștergerii securizate
Chiar și cu `shred`, există o problemă. Sistemele de fișiere moderne (ex: ext3, ext4) folosesc jurnalizarea pentru a preveni coruperea datelor. Aceasta înseamnă că nu există garanția că suprascrierea are loc exact în locul unde se afla fișierul șters.
Dacă doriți o metodă mai sigură decât `rm`, `shred` este o opțiune. Însă, nu putem garanta că datele vor fi total irecuperabile.
Suita `secure-delete`
Utilitarele `secure-delete` încearcă să depășească limitările sistemelor de fișiere jurnalizate, asigurând o suprascriere cât mai sigură. Totuși, există aceleași avertismente: nu se poate garanta că suprascrierea va avea loc exact în zona de disc dorită.
Comenzile `secure-delete` folosesc următoarea secvență de acțiuni:
- O suprascriere cu valoarea `0xFF`.
- Cinci suprascrieri cu date aleatorii.
- 27 suprascrieri cu valori speciale definite de Peter Gutmann.
- Încă cinci suprascrieri cu date aleatorii.
- Redenumirea fișierului cu un nume aleatoriu.
- Trunchierea fișierului.
Această abordare poate părea excesivă, lucru confirmat de Peter Gutmann, creatorul tehnicilor de suprascriere. Într-o lucrare din 1996, el a discutat aceste tehnici, ceea ce a dus la ideea eronată că trebuie utilizate toate simultan. Ulterior, Gutmann a precizat că „o spălare bună cu date aleatorii este suficientă”.
Cu toate acestea, comenzile `secure-delete` implementează o gamă largă de tehnici de ștergere securizată. Mai întâi, trebuie să instalăm suita.
Instalarea `secure-delete`
Folosiți `apt-get` pe Ubuntu sau Debian, sau instrumentul de gestionare a pachetelor specific distribuției Linux folosite:
sudo apt-get install secure-delete
Pachetul include următoarele comenzi:
- `srm`: O versiune securizată a comenzii `rm`, care suprascrie spațiul fișierelor.
- `sfill`: Suprascrie spațiul liber de pe hard disk.
- `sswap`: Suprascrie spațiul de swap.
- `sdmem`: Curăță memoria RAM.
Comanda `srm`
Comanda `srm` se folosește similar cu `rm`. Pentru a elimina un fișier, se utilizează următoarea comandă. Opțiunile sunt:
- `-z`: Folosește zerouri pentru ultima ștergere, în loc de date aleatorii.
- `-v`: Mod verbose pentru a vedea progresul.
srm -vz Chapter_One_01.txt
`srm` este un proces lent. După finalizare, promptul de comandă va reapărea.
Pentru a reduce numărul de treceri, utilizați opțiunea `-l` (scăderea securității). Acest lucru accelerează procesul:
srm -lvz Chapter_One_02.txt
`srm` ne avertizează că reducerea numărului de treceri scade securitatea, dar continuă să ștergă fișierul.
Opțiunea `-l` poate fi folosită de două ori (`-ll`) pentru a reduce numărul de treceri la una singură:
srm -llvz Chapter_One_03.txt
`srm` cu mai multe fișiere
Wildcard-urile pot fi folosite cu `srm`. Următoarea comandă șterge fișierele cu un anumit prefix:
srm -vc Chapter_One_0?.txt
Fiecare fișier este procesat pe rând de `srm`.
Ștergerea recursivă a directoarelor cu `srm`
Opțiunea `-r` (recursivă) permite lui `srm` să șteargă toate subdirectoarele și conținutul acestora. Se specifică calea către directorul de bază.
În acest exemplu, ștergem tot ce se află în directorul curent (`~/research`).
srm -vz *
`srm` va procesa fișierele și directoarele.
După finalizarea procesului, veți reveni la promptul de comandă. Pe mașina de test, a durat o oră pentru a șterge 200 de fișiere din directorul curent și subdirectoare.
Fișierele și subdirectoarele au fost eliminate cu succes.
Comanda `sfill`
Dacă sunteți îngrijorat de fișierele șterse cu `rm`, `sfill` este soluția. Aceasta suprascrie tot spațiul liber de pe hard disk.
Pe măsură ce se execută, veți observa cum spațiul liber scade. La final, tot spațiul va fi eliberat. Dacă sunteți într-un mediu multi-utilizator, aceasta este o operațiune care necesită oprirea temporară a serviciilor.
Chiar și pe un sistem cu un singur utilizator, pierderea spațiului liber face sistemul temporar inutilizabil. Operațiunea necesită mult timp.
Pentru a accelera lucrurile, se poate folosi opțiunea `-l` (scăderea securității), alături de `-v` (verbose) și `-z` (zerouri). Următoarea comandă suprascrie spațiul liber din directorul `/home`:
sudo sfill -lvz /home
Procesul va dura ore. Pe sistemul de test cu 10GB spațiu, a durat peste noapte.
Chiar și cu opțiunea `-l`, procesul este îndelungat, dar se va finaliza și veți reveni la promptul de comandă.
Comanda `sswap`
Comanda `sswap` este utilizată pentru a suprascrie spațiul de swap. Primul pas este să identificăm partiția de swap cu comanda `blkid`:
sudo blkid
Căutați cuvântul „swap” și notați dispozitivul bloc asociat.
În acest caz, partiția de swap este `/dev/sda5`.
Trebuie să dezactivăm scrierea pe swap cu `swapoff`:
sudo swapoff /dev/sda5
Acum putem folosi comanda `sswap`:
Vom folosi dispozitivul `/dev/sda5`, opțiunea `-v` și `-ll` (pentru o securitate redusă):
sudo sswap -llv /dev/sda5
`sswap` va suprascrie partiția de swap. Nu durează la fel de mult ca `sfill`, dar tot pare un timp considerabil.
La finalizare, trebuie să reactivați swap-ul cu comanda `swapon`:
sudo swapon /dev/sda5
Comanda `sdmem`
Pachetul `secure-delete` include un instrument pentru ștergerea memoriei RAM.
Un atac de tip „cold boot” implică accesul fizic la computer imediat după oprire. Acest atac ar putea permite recuperarea datelor din RAM.
Dacă vă temeți de acest tip de atac, puteți curăța memoria RAM cu comanda `sdmem` înainte de a închide computerul. Vom folosi opțiunile `-v` și `-ll`:
sudo sdmem -vll
Terminalul se va umple cu asteriscuri pe măsură ce `sdmem` parcurge memoria RAM.
Soluția simplă: Criptarea unității
În loc să ștergeți fișierele în siguranță, o alternativă mai bună este criptarea întregului hard disk sau a directorului home.
În acest fel, datele vor fi inaccesibile oricui, indiferent dacă sunt șterse sau nu. Nu mai trebuie să vă faceți griji cu privire la ștergerea securizată a fișierelor. Criptarea oferă o protecție totală.
Multe distribuții Linux vă oferă opțiunea de a cripta discul la instalare. A accepta această opțiune vă va scuti de multe probleme viitoare. Chiar dacă nu lucrați cu informații confidențiale, criptarea este o măsură bună de securitate, mai ales dacă doriți să vindeți sau să dați computerul altcuiva.