Unix-opas, luku 7 Tiedostot ja hakemistot:

Tiedostojen suojaaminen - chmod

Suojaukset ja niiden vaikutus

Sen listan alussa, jonka esim. komento ls -l antaa, on kunkin tiedoston suojauksista kertova koodi. Seuraavassa on esimerkki:

total 42 
-rw-r--r--   1 jkorpela users     169 Mar 30 11:09 RMAIL 
-rwxr-xr-x   1 jkorpela users   16384 Mar 30 11:07 a.out 
drwxr-xr-x   2 jkorpela users    1024 Apr 24 09:08 Yhdistystoiminta
-rw-r--r--   1 jkorpela users      26 Mar 30 10:51 ikiliikkuja.c 
-rw-r--r--   1 jkorpela users      71 Mar 30 11:00 notes 
-rw-r--r--   1 jkorpela users      31 Mar 30 10:57 notes~
Yritä hahmottaa rivin alussa oleva merkintä --rw-r--r-- 1+3+3+3 merkin ryhminä; esim. RMAIL-tiedoston osalta merkit pitäisi hahmottaa seuraavasti:
1.   2.     3.     4.  ryhmä
-    rw-    r--    r--       1 jkorpela users     169 Mar 30 11:09 RMAIL
Mainittujen merkkiryhmien merkitykset ovat seuraavat: Kussakin kolmen merkin ryhmässä ensimmäinen merkki voi olla r tai -, toinen w tai - ja kolmas x tai -. Niiden vaikutukset ovat seuraavat: Jos jonkin oikeuden kohdalla on kirjaimen r, w tai x asemesta viiva (-), kyseistä oikeutta ei ao. henkilöllä tai ryhmällä ole.

Otetaan esimerkiksi RMAIL-tiedosto:

-rw-r--r--   1 jkorpela users        169 Mar 30 11:09 RMAIL 
Ensimmäinen merkki on -, joten RMAIL on siis tiedosto eikä hakemisto. Toinen merkkien ryhmä on rw-, joka siis tarkoittaa, että tunnuksella jkorpela on luku- ja kirjoitusoikeus, mutta hän ei voi ajaa tiedostoa ohjelmana. Kolmas merkkiryhmä on r--, joka tarkoittaa sitä, että users-ryhmällä on lukuoikeus, mutta ei kirjoitus- tai ohjelman ajo-oikeutta. Neljäs ryhmä on r--, joka tarkoittaa, että muillakaan käyttäjillä ei ole muita oikeuksia kuin lukuoikeus.

Usein ryhmäjärjestelyjä ei käytetä, vaan kaikki käyttäjät kuuluvat samaan ryhmään. Silloin suojaus ryhmän suhteen on ratkaiseva, ja suojaus "kaikkien muiden" suhteen on syytä asettaa samaksi kuin ryhmän suhteen.

Hakemistojen suojaukset

Hakemistolla on muodollisesti samanlaiset suojaustiedot kuin tavallisella tiedostollakin, mutta niiden merkitykset ovat toisenlaiset: hakemiston suojauksissa

Tilanne on siis melko mutkikas. Huomaa erityisesti seuraavat seikat: Jos hakemistoon on vain r-oikeus, niin voit vain nähdä hakemiston tiedostojen nimet mutta et käsitellä (edes lukea) itse tiedostoja mitenkään. Jos taas hakemistoon on vain x-oikeus, voit käsitellä tiedostoja niiden omien suojausten sallimalla tavalla, mutta vain, jos tiedät tiedostojen nimet tarkasti; käytettävissäsihän ei tällöin ole ls-komentoa eikä tunnistusta.

Suojausten numerokoodit

Suojaukset voi esittää paitsi kirjaimilla myös numerokoodeilla seuraavasti:

Numerokoodien käyttö suojausten esittämisessä ei ole suositeltavaa. Joskus sen kanssa kuitenkin joutuu tekemisiin etenkin sen takia, että Unixin ilmoitukset saattavat viitata suojauksiin numerokoodein. Tällöin siis esim. koodi 751 tarkoittaa samaa kuin rwxr-x--x.

Oletussuojaukset

Hakemistojen ja tiedostojen oletusarvoiset suojaukset ovat erilaisia eri Unix-koneissa. Varsin tavallista on, että käyttäjillä on oletusarvoisesti lukuoikeudet toistensa hakemistoihin ja tiedostoihin, ja heidän siis täytyy itse suojata tiedostonsa, jos eivät halua niiden sisällön näkyvän muille.

Esimerkiksi jos oletussuojaus on sellainen, että käyttäjillä ei ole mitään oikeuksia toistensa kotihakemistoihin, mutta toisaalta tiedostojen oletussuojaus on sellainen, että muilla käyttäjillä on niihin luku- ja suoritusoikeus, niin muilla ei ole mitään oikeuksia tiedostoihisi, koska kotihakemistosi suojaus estää sen. Mutta toisaalta jos tällöin haluat antaa muille lukuoikeudet (tai suoritusoikeudet) joihinkin tiedostoihisi, sinun pitää antaa muille x-oikeus kotihakemistoosi ja muuttaa kaikkien muiden tiedostojesi suojaukset, jotta ne eivät myös tulisi kaikkien nähtäville.

Tilanne on selvin silloin, kun käyttäjillä ei oletusarvoisesti ole mitään oikeuksia muiden käyttäjien tiedostoihin. Tällöin riittää, että käyttäjä vain lisää muille oikeuksia siinä määrin kuin haluaa.

Suojausten muuttaminen: chmod

Tiedoston suojaus muutetaan chmod-komennolla. Nimi tulee sanoista change mode; suojauksia kutsutaan Unixissa yleisesti tiedoston moodiksi (mode).

Esimerkki chmod-komennosta:

chmod go+r foobar
Tämän komennon argumentit voidaan lukea seuraavasti: samaan ryhmään kuuluville (g, group) ja kaikille muille (o, others) lisätään (+) lukuoikeus (r, read) tiedostoon foobar.

Yleisesti chmod-komennossa ilmoitetaan tässä järjestyksessä

  1. kirjaimella tai kirjainyhdistelmällä, keiden oikeuksia muutos koskee:
  2. merkillä + tai -, halutaanko lisätä vai poistaa oikeuksia
  3. kirjaimilla (r, w, x), mitä oikeuksia muutos koskee
  4. tiedostonnimi tai lista tiedostonnimiä, jotka ilmoittavat, mitä tiedostoja muutos koskee.
chmod-komennolle siis kerrotaan vain, mikä muuttuu. Muilta osin suojautukset pysyvät ennallaan. Jos chmod-komennolla yritetään lisätä (+) oikeus, joka jo on olemassa, tai poistaa (-) oikeus, jota ei ole, mitään virheilmoitusta ei tule eikä mikään muutu tältä osin.

Korostettakoon, että chmod-komennolla voi muuttaa vain olemassaolevien tiedostojen suojauksia. Mikään chmod-komento ei vaikuta niiden tiedostojen suojauksiin, jotka luot komennon antamisen jälkeen, vaan niiden suojaukset määräytyvät oletusarvojen mukaan. On kyllä mahdollistaa muuttaa näitä oletusarvoja, joskin välineen eli umask-komennon oppimisessa on käsitteellisiä vaikeuksia. Kyseisessä komennossa (joka on shellin komento) ilmaistaan suojaukset numerokoodilla ja käänteisesti: esim. umask 022 aiheuttaa sen, että vastedes syntyviin tiedostoihin ryhmällä ja muilla ei ole koodia 2 vastaavaa oikeutta eli kirjoitusoikeutta. Komennon vaikutus on istuntokohtainen, joten jos se todella halutaan pysyväksi, se on kirjoitettava sopivaan alustustiedostoon.

Käyttäjä voi myös ottaa itseltään pois kirjoitusoikeudet johonkin tiedostoon, esim. chmod a-w tiedosto poistaa kaikilta, myös itseltä, kirjoitusoikeuden. Jotkut käyttävät tätä turvatoimena estääkseen itseään vahingossa hävittämästä tai muuttamasta jotakin tärkeää tiedostoa. Jos käyttäjä yrittää esim. hävittää näin suojatun tiedostonsa, tulee kysymys override protection 544 for foo? ja käyttäjä voi vastata y tai n sen mukaan, haluaako todella hävittää sen. (Tiedoston suojaus näkyy siis edellä esitetyllä tavalla numerokoodina.) Jos tiedostolle yrittää tehdä jotain muuta, niin toiminto epäonnistuu ja tulee virheilmoitus Permission denied. Käyttäjä voi tiedoston omistajana muuttaa näin suojatun tiedoston suojauksia ja sitten tehdä sille mitä haluaa.

Seuraavassa on pieni esimerkki. Käyttäjällä on tiedosto, jolla on sellainen suojaus, että kaikilla, myös käyttäjällä itsellään, on siihen vain lukuoikeus. Kun käyttäjä yrittää hävittää tiedoston, järjestelmä kysyy, halutaanko ohittaa (override) sen suojaus; kun tähän vastataan y, toiminto onnistuu. (Tässä ei tarkkaan ottaen ole kyse suojauksen suoranaisesta vaikutuksesta, koska periaatteessa hävitysoikeus riippuu sen hakemiston suojauksesta, jossa tiedosto on. Mutta käytännössä rm-komento tarkistaa lisäksi tiedoston suojauksen ja kysyy käyttäjältä varmistuksen.)

epsilon koe 51 % ls -l huuhaa
-r--r--r--   1 jkorpela staff          0 Feb 20 11:28 huuhaa
epsilon koe 52 % rm huuhaa
rm: override protection 444 for huuhaa? y
epsilon koe 53 % ls -l huuhaa
huuhaa not found
epsilon koe 54 %