17.03.2009
Esa Turtiainen

Kun tiedosto poistetaan, se merkitään vapaaksi tilaksi. Tiedoston sisältöä ei päällekirjoiteta, joten sen sisältämä tieto on löydettävissä kiintolevyltä kunnes se levykohta otetaan uudelleen käyttöön. Kiintolevyn magneettisten ominaisuuksien vuoksi tieto voi olla palautettavissa vielä päällekirjoituksen jälkeenkin.

Linux-tietokoneessa voi olla käytössä monia tiedostojärjestelmiä. Useimmiten käytettävät tiedostojärjestelmät (esim. ext3) ovat Windows-tiedostojärjestelmiä kehittyneempiä - ne eivät kirjoita suoraan tiedon päälle, vaan muutokset tehdään ensin "lokikirjaan" (journaling). Tämän vuoksi Linux-tiedostojärjestelmät kestävät paremmin häiriöitä esimerkiksi, jos sähköt katoavat kesken käsittelyn. Mutta tiedon tuhoamisen kannalta tämä tarkoittaa, että tiedoston tietojen muuttaminen ei päällekirjoita samaa kohtaa kiintolevyllä. Tiedoston muutokset menevät levyllä eri paikkaan kuin alkuperäinen tieto.

Tiedostojen päällekirjoitus

Jos tiedostojärjestelmä tukee tiedostojen päällekirjoitusta, sen tekemiseen Linuxiin on saatavissa useita ohjelmia: shred, srm, wipe ja scrub. Shred on todennäköisimmin käytettävissä jo perusjakelussa:

shred --remove pois.txt

päällekirjoittaa tiedoston pois.txt 25-kertaisesti ja lopuksi poistaa sen.

Komennon wipe valitsimet ovat paljon monipuolisemmat ja se esimerkiksi tukee kokonaisen hakemiston poistamista valitsimella -r eli --recursive:

wipe --recursive tiedostot

Päällekirjoituksen voi tehdä myös omalla ohjelmalla, mutta Linuxissa on muistettava, että tiedostoihin tehdyt muutokset varastoidaan keskusmuistiin ja siirretään levylle vasta jonkin ajan kuluttua. Siksi kirjoitusten välillä tulee käyttää komentoa sync.

Päällekirjoittavat tiedostojärjestelmät FAT ja ext2

Linux osaa käyttää joustavasti eri tiedostojärjestelmä. Tuhottavat tiedot voidaan siten laittaa sellaiselle tiedostojärjestelmälle, jossa päällekirjoitus toimii. Tällaisia tiedostojärjestelmiä ovat esimerkiksi vanha ext2-tiedostojärjestelmä ja Windows-tietokoneista tuttu yksinkertainen FAT-tiedostojärjestelmä.

Seuraavissa esimerkeissä on käytetty esimerkkeinä SCSI-levyjen levyosoita, esimerkiksi /dev/sda1 ja /dev/sda2. Älä käytä komentoja sellaisenaan vaan selvitä huolellisesti oman järjestelmäsi levyosioiden nimet. Esimerkkien käyttäminen sellaisenaan tuhoaa todennäköisesti peruuttamattomasti kiintolevysi sisällön.

FAT-tiedostojärjestelmän tekeminen puhtaalle levyosiolle tehdään komennolla

mkfs -t fat /dev/sda2

FAT-tiedostojärjestelmän pitkien tiedostonimien käyttö on Microsoftin patentoima tekniikka, jonka käyttö sulautetuissa sovelluksissa voi johtaa Microsoftin patenttivaatimuksiin.

ext2-tiedostojärjestelmä tehdään puhtaalle levyosiolle komennolla

mkfs -t ext2 /dev/sda2

Mikäli tietokone on virtuaalinen (esimerkiksi VMware tai Virtualbox), tiedostojärjestelmä ei välttämättä ole suoraan kiintolevyllä, vaikka se siltä virtuaalitietokoneen käyttöjärjestelmästä vaikuttaisikin. Virtuaalitietokoneympäristössä on varmistuttava siitä, että ext2-tiedostojärjestelmä tehdään suoraan fyysiselle kiintolevylaitteelle. Myös verkon yli käytetyt fyysisen näköiset levylaitteet saattavat olla virtuaalisia.

Tiedostojärjestelmän muuttaminen suoraan kirjoitettavaksi

Yleisimmin Linuxissa käytettävä tiedostojärjestelmä on ext3, jossa tiedostojen muutokset kirjoitetaan levylle eri paikkaan kuin edellinen tieto. ext3-tiedostojärjestelmän edeltäjä, ext2-tiedostojärjestelmä, kirjoitti tiedoston muutokset suoraan kiintolevylle samaan kohtaan. ext3-tiedostojärjestelmä on muunnettavissa ext2-tiedostojärjestelmäksi. ext3-tiedostojärjestelmän muuntaminen ext2-muotoon tai käyttäminen ext2-muodossa ei ole suositeltavaa ja seuraavat ohjeet johtavat helposti peruuttamattomiin hankaluuksiin.

Käyttämättömänä olevan ext3-tiedostojärjestelmän journaling-ominaisuus voidaan kytkeä pois päältä ja päälle tarvitsematta uudelleenkäynnistää tietokonetta komennolla:

umount /dev/sda2
tune2fs -O ^has_journal /dev/sda2
e2fsck /dev/sda2
mount /dev/sda2 /mnt

...tiedostojärjestelmän turhien tietojen tuhoaminen /mnt-hakemistossa
umount /mnt
tune2fs -O has_journal /dev/sda2

e2fsck /dev/sda2

Juuritiedostojärjestelmää ei voi käsitellä edellä kuvatulla tavalla, koska se on aina käytössä.Seuraava ohje saattaa toimia juuritiedostojärjestelmälle, mutta sitä ei ole testattu ja se on vaarallinen.

ext3-tiedostojärjestlemä on teoriassa niin yhteensopiva vanhan ext2-tiedostojärjestelmän kanssa, että ext3-levy voidaan ottaa käyttöön ext2-levynä. Levyn käyttöönotto määritellään tiedostossa /etc/fstab. Esimerkiksi:

# device name    mount point  fs-type options   dump-freq  pass-num
/dev/sda1        /            ext3    defaults    1          1

Kun ext3 muutetaan ext2:ksi, tietokoneen seuraavassa käynnistyksessä päätiedostojärjestelmä "/" otetaan käyttöön ext2-tyyppisenä, jolloin muutokset kirjoitetaan suoraan levylle. Käynnistyvän Linux-ytimen on tuettava käynnistymistä ext2-tiedostojärjestelmältä, jotta tämä onnistuu. Vaikka Linux-ydin osaisi käsitellä ext2-tiedostojärjestelmiä, se ei ole tae siitä että se osaisi käynnistyä ext2-levyltä - saatat joutua tutustumaan mkinitrd-komentoon. Jos muunnos ext2-tiedostojärjestelmäksi tehdään, on suositeltavaa jättää tiedostojärjestelmä ext2-muotoiseksi tästä eteenpäin.

ext2-tiedostojärjestelmän ottaminen takaisin käyttöön ext3-tyyppisenä edellyttäisi journalin luomista:

tune2fs -O has_journal /dev/sda1
e2fsck /dev/sda1

mutta koska tätä ei voi tehdä käytössä olevalle juuritiedostojärjestelmälle, ainoa vaihtoehto tehdä tämä on käynnistää tietokone jollain live-CD-jakelulla, esimerkiksi Knoppix.

ext2-tiedostojärjestelmä on paljon herkempi virheille kuin ext3-tiedostojärjestelmä, ja sitä käytettäessä tiedostojärjestelmän tarkastus (fsck) tulisi tehdä säännöllisesti.

Kiintolevyn tyhjän tilan siivous

Harvoin voit olla varma, että kaikki tietokoneen tiedostot on siivottu asiallisesti. Ohjelmat voivat poistaa tiedostoja ilman, että tiedät siitä mitään. Sen vuoksi saatat joutua päällekirjoittamaan kaiken tietokoneessa olevan käyttämättömän levytilan.

Ohjelma scrub osaa varata tiedostojärjestelmässä olevan vapaan tilan ja siivota sen. Siivouksen aikana kaikki vapaa tila on varattu eikä tietokone ole sen vuoksi kovin käyttökelpoinen. Komento:

scrub --freespace /home/.tmp

luo hakemistoon /home/.tmp tiedostoja kunnes tiedostojärjestelmä on täynnä. Tämän jälkeen ohjelma päällekirjoittaa nämä tiedostot.

Huomaa, että tämäkään menetelmä ei toimi luotettavasti, ellei tiedostojärjestelmä kirjoita suoraan levylle.

Toinen ohjelma, joka osaa saman toiminnan on bcwipe, mutta sen lisenssi on osittain kaupallinen.

Turvallisempaa on salata koko kovalevy kuin yrittää siivota sen käyttämätöntä tilaa

Koko levyosion tyhjentäminen

Koko levyosio on helppoa tyhjentää Linuxissa, koska sitä eivät koske tiedostojärjestelmien rajoitukset. Koko tiedostojärjestelmää voidaan käsitellä yhtenä tiedostona sen laitenimen avulla. Esimerkiksi toinen SCSI-kiintolevy on nimeltään /dev/sdb ja sen kolmas partitio on nimeltään /dev/sdb3. Se voidaan tyhjentää esimerkiksi komennolla shred käyttäen tiedoston nimenä partition laitetiedostoa:

shred /dev/sdb3

Tai siihen voidaan käyttää suoraan järjestelmän perustyökaluja. Seuraava komento päällekirjoittaa yhden kerran satunnaisella tiedolla koko toisen SCSI-levyn (mukaanlukien osiotaulut ja käynnistyslohko):

cat /dev/urandom > /dev/sdb
sync

Tämä tosin aiheuttaa virheilmoituksen levyn loppuessa. Sama voidaan tehdä dd-komennolla siistimmin ja nopeammin, mutta silloin levyn tarkka koko pitää tietää.

dd if=/dev/urandom of=/dev/sdb bs=1M count=152627

Helposti puhdistettava Linux-tietokone ja keskusmuistitiedostot

Helposti puhdistettavassa Linux-tietokoneessa suurin osa tiedostoista olisi tiedostojärjestelmissä, joihin ei voi ollenkaan kirjoittaa. Teoriassa päätason normaalihakemistoista vain /var- ja /home-hakemistoihin tarvitsee voida kirjoittaa normaalin käytön aikana. Käytännössä löytyy valitettavasti ohjelmia, jotka haluavat kirjoittaa esimerkiksi /etc-hakemistoon. Voit kuitenkin tutkia, voiko käyttämässäsi jakelussa sijoittaa muut päätason hakemistot eri tiedostojärjestelmiin (eri levyosioille), ja käyttää niitä kirjoitussuojattuna (mount -o ro).

/tmp on erikoishakemisto tilapäistiedostoille ja se on nykyään TMPFS-tyyppinen eli siellä olevat tiedostot ovat joko keskusmuistissa tai sivutustiedostossa. /tmp-hakemiston tiedostot eivät käy koskaan kiintolevyllä sivutustiedoston ulkopuolella, eivätkä ne säily tietokoneen uudelleenkäynnistyksessä. RAMFS on tiedostojärjestelmä, joka sijaitsee keskusmuistissa eikä se koskaan käytä edes sivutustiedostoa. Voit luoda oman tiedostojärjestelmän tiedostoille, jotka eivät koskaan joudu kiintolevylle komennolla:

mount -t ramfs none /mnt

Liitettävä laite on "none", koska RAMFS-tiedostojärjestelmä syntyy tyhjästä, eikä sille määritellä maksimikokoa. Jos keskusmuisti loppuu kesken, joudut varoittamatta vakaviin vaikeuksiin.

Tietojen siirto puhtaalle levyosiolle

Varmin tapa pitää levyosiot puhtaana on käyttää kahta levyosiota tiedoille ja pitää tiedot toisella, kun toinen levyosio tyhjennetään kokonaisuudessaan. Esimerkiksi hakemistolle /var voidaan varata kaksi levyosiota, /dev/sdb2 ja /dev/sdb3. Kumpikin levyosio otetaan käyttöön esimerkiksi hakemistoihin /m/var1 ja /m/var2. Oletetaan, että alussa /m/var1 sisältää hakemiston /var tiedot ja /m/var2 on varmistetusti tyhjä. Linkitetään /var oikeaan hakemistoon:

ln -sf /m/var1 /var

Sammutetaan kaikki ohjelmat, jotka käyttävät /var-hakemistoa. Nämä löytyvät komennolla:

lsof /var

kopioidaan käytössä olevan /var-hakemiston tiedot puhtaaseen hakemistoon

cp -a /var1/* /var2

missä -a tarkoittaa "archive" eli kaikki tiedot kopioidaan omistajineen ja oikeuksineen identtisesti. Mahdollisten pisteellä alkavien tiedostojen kopioimista varten joudutaan tekemään hieman lisää töitä. Nopeampi ja pistetiedostotkin kopioiva komento on:

cd /var2
tar cf - /var1 | tar xf -

"kovat" linkit käsittelee helpoiten kolmas vaihtoehto:

rsync -H /var1/* /var2

Kopionnin jälkeen voidaan uusi kopio ottaa käyttöön:

ln -sf /m/var2 /var

Ja nyt ensimmäinen tiedostojärjestelmä voidaan siivota:

umount /m/var1
shred /dev/sdb2

Ja seuraavalla kerralla sama toisinpäin.

Sivutustiedoston tyhjentäminen

Yleensä Linux ei tyhjennä sivutustiedostoa koskaan. Tämän tekevä muutos voidaan tehdä käsin esimerkiksi siten, että selvitetään, koska tietokonetta sammutettaessa sivitustiedoston käyttö lopetetaan. Linuxissa sivutustiedosto on melkein aina kokonainen levyosio.

Esimerkiksi sivutustiedoston käytön lopetus voi olla tiedostossa /etc/init.d/umountfs:

...
swapoff -a
...

Kun olet selvittänyt sivutusosion, voit lisätä siivouskomennon, esimerkiksi:

shred --iterations=1 /dev/sdb4

Koko tietokoneen tyhjentäminen

Näppärin tapa koko tietokoneen kovalevyn varmaan tyhjentämiseen on DBAN eli Darik's Boot and Nuke. DBAN kopioidaan CD-ROM:lle, USB-muistille tai disketille, jolta tietokone käynnistetään. Tietokoneen omaan kiintolevyyn ei kosketa ollenkaan tietokoneen käynnistyksessä. Yksinkertaisesta käynnistysmenusta valitaan tuhottava kovalevy ja ohjelma käynnistetään.

|filename|/images/dban1.png

DBAN on Linux-pohjainen ilmainen ohjelma.