Tips en Trucs 2021

Bestanden veilig verwijderen met shred

Tegenwoordig dwingen beveiliging en anonimiteit zelfs gemiddelde computergebruikers om extra na te denken over hoe ze hun gegevens opslaan en verwijderen. Gewoon een bestand verwijderen met een rechtermuisklik of met de rm opdracht is niet voldoende voor gevoelige gegevens. Wanneer je een bestand met deze normale methoden verwijdert, worden de gegevens niet vernietigd. Deze methoden verwijderen alleen de verwijzing naar het bestand op de schijf. Ze vertellen het besturingssysteem in feite om ze te negeren. De verwijderde informatie staat echter nog steeds op de schijf en kan gemakkelijk worden hersteld met algemeen beschikbare software.

De eenvoudige shred opdracht, maakt deel uit van het GNU Core Utilities pakket en is beschikbaar op bijna elk Linux en UNIX systeem. De shred opdracht overschrijft het doelbestand herhaaldelijk om het uiterst moeilijk of onmogelijk te maken om het te herstellen. Shred kan worden gebruikt om enkele bestanden, meerdere bestanden, partities en zelfs een hele schijf te overschrijven.

Shred opdrachten gebruiken

Shred met als enig argument het te vernietigen bestand, zal het bestand driemaal overschrijven. Een demonstratie met een voorbeeldbestand, dat we als volgt aanmaken:

dany@pindabook:~> echo "Dit is een voorbeeldtekst" > voorbeeld.txt

Met de ls opdracht bekijken we de grootte van het bestand en met de cat opdracht de inhoud ervan:

dany@pindabook:~> ls -l voorbeeld.txt
-rw-r--r-- 1 dany users 26 28 sep 14:32 voorbeeld.txt
dany@pindabook:~> cat voorbeeld.txt
Dit is een voorbeeldtekst

We gebruiken de shred opdracht om het voorbeeld bestand te overschrijven en het zo onbruikbaar te maken:

dany@pindabook:~> shred voorbeeld.txt

De huidige inhoud van het voorbeeldbestand maken we opnieuw zichtbaar met de cat opdracht:

dany@pindabook:~> cat voorbeeld.txt      
�H8����k��A���▒�380��^��0:O��j�33vY2�խhF�E:2�Y\Aq�7ON�d�b��?�A��z����9Y�c�.�&��BH��X�漬�E���Ю�OR����.�����ɛ�cgz����K��]ܢ�둮+(���r!�V9�'3K�;5v�@#�Mn����i��
...

Je ziet dus enkel rommel. Ook de bestandsgrootte is veranderd:

dany@pindabook:~> ls -l voorbeeld.txt
-rw-r--r-- 1 dany users 4096 28 sep 14:38 voorbeeld.txt

Shred heeft namelijk het volledige schijfblok gevuld. Bestanden worden op schijf namelijk steeds bewaard in blokken met een vaste lengte. Een bestand neemt dus steeds een veelvoud van de grootte van een schijfblok in. Ons bestand bestand met een bestandsgrootte van 26 bytes neemt dus 4096 bytes schijfruimte in, of m.a.w. 1 blok:

dany@pindabook:~> sudo blockdev --getbsz /dev/sda4
[sudo] wachtwoord voor root:
4096

Standaard zal shred de bestandsgrootte aanpassen naar de volledige grootte van de gebruikte schijfblokken. Gebruik de optie --exact (-x) om de bestandsgrootte niet te wijzigen:

dany@pindabook:~> echo "Dit is een voorbeeldtekst" > voorbeeld.txt
dany@pindabook:~> ls -l voorbeeld.txt
-rw-r--r-- 1 dany users 26 28 sep 14:54 voorbeeld.txt
dany@pindabook:~> shred -x voorbeeld.txt
dany@pindabook:~> ls -l voorbeeld.txt
-rw-r--r-- 1 dany users 26 28 sep 14:54 voorbeeld.txt
dany@pindabook:~> cat voorbeeld.txt 
O� ,�ӣ���       �H�b��{�2�P���dany@pindabook:~> ^C
dany@pindabook:~>

Opties

Verbose

Om te zien waarmee shred bezig is, gebruiken we de optie --verbose (-v):

dany@pindabook:~> shred -v voorbeeld.txt
shred: voorbeeld.txt: doorloop 1/3 (random)...
shred: voorbeeld.txt: doorloop 2/3 (random)...
shred: voorbeeld.txt: doorloop 3/3 (random)...

Verschillende bestanden overschrijven

Om met shred meerdere bestanden met één opdracht te overschrijven, geef je de te overschrijven bestanden mee met de opdracht, gescheiden door spaties. Vanzelfsprekend kan je jokers gebruiken om bepaalde bestanden te filteren:

dany@pindabook:~> cp voorbeeld.txt voorbeeld1.txt
dany@pindabook:~> cp voorbeeld.txt voorbeeld2.txt
dany@pindabook:~> shred -v voorbeeld*.txt
shred: voorbeeld1.txt: doorloop 1/3 (random)...
shred: voorbeeld1.txt: doorloop 2/3 (random)...
shred: voorbeeld1.txt: doorloop 3/3 (random)...
shred: voorbeeld2.txt: doorloop 1/3 (random)...
shred: voorbeeld2.txt: doorloop 2/3 (random)...
shred: voorbeeld2.txt: doorloop 3/3 (random)...
shred: voorbeeld.txt: doorloop 1/3 (random)...
shred: voorbeeld.txt: doorloop 2/3 (random)...
shred: voorbeeld.txt: doorloop 3/3 (random)...

Een volledige partitie of schijf overschrijven

Shred kan ook gebruikt worden om volledige partities en schijven te overschrijven. De volgende opdracht wist de inhoud van een volledige USB stick partitie. Opgelet: wees voorzichtig en zorg dat je zeker bent dat je de USB partitie overschrijft en niet een systeem (of andere belangrijke) partitie.

dany@pindabook:~> lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238,5G  0 disk 
├─sda1   8:1    0  1000M  0 part 
├─sda2   8:2    0   260M  0 part /boot/efi
├─sda3   8:3    0     8G  0 part [SWAP]
├─sda4   8:4    0    80G  0 part /
└─sda7   8:7    0 149,2G  0 part /usr/home/Documents
sdb      8:16   1   3,6G  0 disk 
└─sdb1   8:17   1   3,6G  0 part
dany@pindabook:~> sudo shred -v /dev/sdb1
[sudo] wachtwoord voor root: 
shred: /dev/sdb1: doorloop 1/3 (random)...
shred: /dev/sdb1: doorloop 1/3 (random)...15MiB/3,7GiB 0%
...
shred: /dev/sdb1: doorloop 2/3 (random)...
shred: /dev/sdb1: doorloop 2/3 (random)...15MiB/3,7GiB 0%
...
shred: /dev/sdb1: doorloop 3/3 (random)...
shred: /dev/sdb1: doorloop 3/3 (random)...15MiB/3,7GiB 0%

Verwijderen na het overschrijven

Standaard overschrijft shred het bestand. Om na het overschrijven het bestand te verwijderen, gebruik je de opties --remove (-u). Daarbij krijgt het bestand verschillende malen een andere bestandsnaam, dit zorgt voor nog meer verwarring bij eventuele herstelpogingen.

dany@pindabook:~> shred -v -u voorbeeld2.txt
shred: voorbeeld2.txt: doorloop 1/3 (random)...
shred: voorbeeld2.txt: doorloop 2/3 (random)...
shred: voorbeeld2.txt: doorloop 3/3 (random)...
shred: verwijderen van voorbeeld2.txt
shred: voorbeeld2.txt is hernoemd tot 00000000000000
shred: 00000000000000 is hernoemd tot 0000000000000
shred: 0000000000000 is hernoemd tot 000000000000
shred: 000000000000 is hernoemd tot 00000000000
shred: 00000000000 is hernoemd tot 0000000000
shred: 0000000000 is hernoemd tot 000000000
shred: 000000000 is hernoemd tot 00000000
shred: 00000000 is hernoemd tot 0000000
shred: 0000000 is hernoemd tot 000000
shred: 000000 is hernoemd tot 00000
shred: 00000 is hernoemd tot 0000
shred: 0000 is hernoemd tot 000
shred: 000 is hernoemd tot 00
shred: 00 is hernoemd tot 0
shred: voorbeeld2.txt is verwijderd
shred

Overschrijven met nullen

Na de gebruikelijke overschrijfacties met willekeurige tekens, kan shred een extra overschrijfactie met nullen uitvoeren. Daarvoor gebruik je de optie --zero (-z):

dany@pindabook:~> shred -v -z voorbeeld.txt
shred: voorbeeld.txt: doorloop 1/4 (random)...
shred: voorbeeld.txt: doorloop 2/4 (random)...
shred: voorbeeld.txt: doorloop 3/4 (random)...
shred: voorbeeld.txt: doorloop 4/4 (000000)...

Handig bij het maken van gecomprimeerde schijfimages, waardoor deze veel kleiner zijn.

Aantal overschrijfacties

Met de --iterations (-n) optie bepaal je zelf hoeveel overschrijfacties shred moet uitvoeren:

dany@pindabook:~> shred -v -n 4 voorbeeld.txt
shred: voorbeeld.txt: doorloop 1/4 (random)...
shred: voorbeeld.txt: doorloop 2/4 (ffffff)...
shred: voorbeeld.txt: doorloop 3/4 (000000)...
shred: voorbeeld.txt: doorloop 4/4 (random)...

Let op de door shred gebruikte overschrijfpatronen.

Enkel het begin van het bestand overschrijven

Standaard overschrijft shred volledig de door het bestand gebruikte schijfblokken. Met de --size (-s) optie bepaal je zelf hoeveel bytes shred moet overschrijven. Daarbij kan je de grootte opgeven in K, M of B.

dany@pindabook:~> echo "Dit is een voorbeeldtekst" > voorbeeld.txt
dany@pindabook:~> shred -s8 voorbeeld.txt
dany@pindabook:~> cat voorbeeld.txt 
� ���9�
       en voorbeeldtekst

Shred overschreef de eerste 8 bytes van het voorbeeldbestand.

Help

En tot slot de onmisbare --help optie:

dany@pindabook:~> shred --help
Gebruik:  shred [OPTIE...] BESTAND...

Overschrijft gegeven BESTAND(en) meerdere malen, om het zelfs voor heel
dure apparatuur moeilijk te maken de inhoud ervan te herstellen.

Als BESTAND '-' is, dan wordt standaarduitvoer ge-shred.

(Een verplicht argument bij een lange optie geldt ook voor de korte vorm.)
  -f, --force    zo nodig toegangsrechten wijzigen om schrijven toe te staan
  -n, --iterations=N  dit aantal malen overschijven (i.p.v. de standaard 3)
      --random-source=BSTND  bestand BSTND is bron van willekeurige bytes
  -s, --size=N   dit aantal bytes vernietigen (achtervoegsels als K, M, G mogen)
  -u             deallocate and remove file after overwriting
      --remove[=HOW]  like -u but give control on HOW to delete;  See below
  -v, --verbose  show progress
  -x, --exact    do not round file sizes up to the next full block;
                   this is the default for non-regular files
  -z, --zero     add a final overwrite with zeros to hide shredding
      --help      deze hulptekst tonen en stoppen
      --version   programmaversie tonen en stoppen

Als '--remove' (-u) gegeven is, worden de gegeven BESTANDen verwijderd.
Standaard worden bestanden niet verwijderd omdat 'shred' vaak toegepast wordt
op apparaatbestanden (zoals /dev/hda) en meestal wil men die niet verwijderen.

De parameter HOE geeft aan hoe een item uit een map verwijderd moet worden:
  'unlink' => een standaard unlink()-aanroep gebruiken;.
  'wipe' => ook eerst de bytes van de naam verdoezelen;
  'wipesync' => ook elke verdoezelde byte naar schijf schrijven.
De standaardmodus is 'wipesync', maar merk op dat dit "duur" kan zijn.

CAUTION: shred assumes the file system and hardware overwrite data in place.
Although this is common, many platforms operate otherwise.  Also, backups
and mirrors may contain unremovable copies that will let a shredded file
be recovered later.  See the GNU coreutils manual for details.

Online hulp bij GNU coreutils: 
Meld vertalingsfouten aan .
Full documentation 
of lokaal via: info '(coreutils) shred invocation'

Let op de CAUTION opmerking. M.a.w. zorg eveneens dat alle kopieën van een door shred onbruikbaar gemaakt bestand eveneens onbruikbaar worden gemaakt. Denk aan reservekopieën die soms automatisch aangemaakt worden, zowel in de cloud als lokaal.