Failiõigused

Allikas: Kuutõrvaja

Failide omanikud, grupid ja kasutajate õigused

Iga UNIXi süsteemi kasutaja on identifitseeritav UIDiga, millele vastab tema kasutajanimi. Iga kasutaja kuulub ühte või enamasse gruppi. Igale grupile vastab GID ning sellele omakorda grupi nimi.

Faili atribuutide hulka kuuluv info selle moodustanud kasutaja ja tema grupi kohta on kirjas failisüsteemis numbriliselt. Neid arve nimetatakse vastavalt faili User Identification (UID) ning faili Group Identification (GID). Need arvud seatakse vastavusse konkreetse kasutajaga failide /etc/passwd ja /etc/group abil. Numbreid dubleeritakse sõnaliselt, kuna sõnaline vorm on ülevaatlikum. Kui soovite kuvada neid arve, andke koorikus korraldus 'ls -ln'.

Kui kasutaja loob uue faili, talletab operatsioonisüsteem tema UIDi ja GIDi koos muude faili atribuutide väärtustega. Oluline on märkida, et kasutaja saab talletatava grupi GID väärtuseks määrata ükskõik millise gruppidest, millesse ta kuulub.

Nii räägimegi failiomanikust ja failigrupist, viidates faili loonud kasutajale ja ühele gruppidest, kuhu ta kuulub.

Praktiliselt poleks sellest erilist kasu, kui failidel oleks pelgalt märge tema moodustaja kasutajanime ja grupinime kohta. Arvestades seda, et faile saab

   * r(ead) - lugeda
   * w(rite) - kirjutada
   * e(x)ecute - käivitada

oleks mõtekas anda kasutajale õigusi nende tegevuste teostamiseks sõltuvalt sellest, kas ta on:

   * u(ser) - faili omanik
   * g(roup) - faili gruppi kuuluv kasutaja
   * o(ther) - mingi muu kasutaja süsteemis, kuulub faili omanikust erinevasse gruppi

Just nii ongi UNIXis asjad korraldatud. Kuigi räägitakse failiõigustest, mõeldakse tegelikult selle all, milline on erinevate kasutajate voli kõnealuse faili suhtes.

Vaatleme kommenteeritult ühe kataloogi sisu ehk listingut:

bash~$ ls -la
1  2     3     4         5     6  
d rwx   r-x   r-x   3   mart users    1 024   12 Mar   1998 ./
d rwx   r-x   r-x   6   mart users    1 024   12 Mar   1998 ../
d rwx   rwx   r-x   2   mart users   23 000   12 Mar   1998 kata
- rw-   r--   r--   1   mart users   30 000   12 Mar   1998 karu
- rwx   r-x   --x   1   mart users   30 000   12 Mar   1998 programm

Failisüsteemis tähistab . käesolevat kausta ning .. eelmist kausta.

Tulpade tähendused:

   * (1) kataloogimärge: esimesed kolm rida on kataloogid, millele viitab märge d (ingl. k. directory); 'karu' ja 'programm' on failid.
   * (2) faili omaniku õigused faili suhtes
   * (3) failiga samasse gruppi kuuluvate kasutajate õigused faili suhtes
   * (4) süsteemi teiste kasutajate õigused faili suhtes
   * (5) faili omanik
   * (6) faili grupp

Selgitused failide 'karu' ja 'programm' kohta

Faili 'karu' (rw- r-- r--) sisu saab muuta ainult omanik; kõik saavad lugeda.

Faili 'programm' (rwx r-x --x) saavad tööle panna kõik, kuid kopeerida saavad vaid faili omanik ja failiga samasse gruppi kuuluvad kasutajad. Öeldu kehtib eeldusel, et programm pole skript. Skripti käivitamiseks on tarvis nii käivitamise kui lugemisõigust. Mitteskripti puhul vaid käivitamisõigust.

Selgitused kataloogide kohta;

kataloog 'kata':

   * kõik saavad käsuga cd siseneda (rwx rwx r-x)
   * kataloogi sisu saavad kõik lugeda, st kasutada käsku ls (rwx rwx r-x)
   * vaid omanik ja kataloogi gruppi kuuluvad kasutajad saavad sinna kirjutada, st moodustada uusi faile ja alamkatalooge (rwx rwx r-x)

Käesolev kataloog (./)

   * siseneda saavad kõik (rwx r-x r-x)
   * lugeda saavad kõik, st kasutada käsku ls (rwx r-x r-x)
   * kataloogi saab faile ja alamkatalooge juurde teha vaid omanik (rwx r-x r-x)

See, kas faili ennast kustutada saab, pole faili omadus. Faili sisu kustutada lubamine on faili omadustega reguleeritav. Tekstifaili saab teha käivitatavaks, kuid sel pole erilist mõtet. Skript (nt. shell, perl) tuleb teha nii loetavaks kui käivitatavaks, kuid programmi 'binary' piisab teha vaid käivitatavaks.

Kasutaja ei peaks andma teistele kasutajatele õigust talle eraldatud kettaruumi faile luua, kuigi tehniliselt on tal seda võimalik teha. Samas võib kasutaja soovida osa oma failidest teha teistele sama masina kasutajatele kättesaadavaks, nt. lugemiseks, käivitamiseks, sisu kustutamiseks. Faili õigusi on vaja sobivalt määrata kodulehekülgede väljariputamisel; vastasel korral ei näe külastajad Teie lehekülgi või vastupidi, mõned neist saavad neid ise 'täiendada'.

Failiõiguste muutmine

Kuna UNIX peab arvet failide omanike kohta, siis ei saa teised tavakasutajad muuta Teie failide failiõigusi; ega ka vastupidi - Teie ei saa muuta teiste kasutajate failide failiõigusi. Samuti ei saa tavakasutaja muuta teise kasutaja faili omanikku ja faili gruppi.

Failiõigusi muudetakse käsuga chmod (ingl. k. change mode) ja kokkuvõtlikult kirjeldab võimalusi tabel:

        u
        g  +  r
chmod      -  w   fail1 fail2 ...
        o  =  x
        a

kus u - user; g - group, o - others, a - all, r - read, w - write ja x -execute

Näited:

Soovime faili 'kevadelaul' teha kõigile vaid loetavaks

bash~$ chmod  a=r kevadelaul

Soovime lisada omanikule faili kirjutamise ja käivitamise õiguse

bash~$ chmod u+wx kevadelaul

Soovime jätta grupi liikmed lugemisõigusest ilma

bash~$ chmod g-r kevadelaul

tulemusena on faili 'kevadelaul' õigused sellised

rwx --- r--

Failiomaniku ja -grupi muutmine

Faili omanik saab failigruppi muuta, määrates selle üheks gruppidest, millesse ta ise kuulub. Võimalik on olukord, kus root kasutaja tegi tavakasutaja failiomanikuks, kuid failigrupiks on grupp, millesse kasutaja ei kuulu. Kasutaja saab ka sellisel juhul failigruppi muuta. Failigruppi muudetakse käsuga chgrp (change group)

bash~$ chgrp uue_grupi_nimi fail1 fail2 ...

Failiomanikku saab muuta vaid root kasutaja õigustes käsuga chown (ingl. k. change owner)

bash~$ chown uue_omaniku_nimi fail1 fail2 ...

Võimalik on muuta korraga nii failiomanikku kui -gruppi, eraldades need chown käsus punktiga

bash~$ chown uue_omaniku_nimi.uue_grupi_nimi fail1 fail2 ...

Teine võimalus failiõigusi muuta

Faili õiguste muutumiseks on tegelikult veel palju mugavam viis, kui kirjeldatud 'chmod a+rwx failinimi' meetod.

Nimelt on tooduga samaväärne käsk

bash~$ chmod 777 failinimi

kus 777 on failiõigusi kirjeldav kaheksandarv.

Selgitus:

õigused    omanik - owner       grupp - group      teised - others
chmod   read write  execute   read write execute  read write execute
0777     1    1       1        1    1      1       1    1      1
0755     1    1       1        1    0      1       1    0      1
0500     1    0       1        0    0      0       0    0      0
õigus rwx
    0 000   r - read
    1 001   w - write
    2 010   x - execute
    3 011
    4 100
    5 101
    6 110
    7 111
0755:
   * 0 - SetUID*
   * 7 = 1 x 2 ^ 2 + 1 x 2 ^ 1 + 1 x 2 ^ 0 = 4 + 2 + 1 = 7
   * 5 = 1 x 2 ^ 2 + 0 x 2 ^ 1 + 1 x 2 ^ 0 = 4 + 0 + 1 = 5
   * 5 = 1 x 2 ^ 2 + 0 x 2 ^ 1 + 1 x 2 ^ 0 = 4 + 0 + 1 = 5 

Kuna failisüsteemis vastab igale üksikule õigusele üks bitt, siis kõneldakse vahel failiõiguste asemel faili loabittidest.

Kuna igaüks ei pruugi end kahendarvudega alguses mugavalt tunda, anname spikri- mnemoonika:

õigused    omanik - owner       grupp - group      teised - others
chmod   read write execute    read write execute  read write  execute
0777     4    2      1         4    2      1       4    2       1
0755     4    2      1         4    0      1       4    0       1
0500     4    0      1         0    0      0       0    0       0

0755:
   * 0 - SetUID
   * 7 = 4 + 2 + 1
   * 5 = 4 + 0 + 1
   * 5 = 4 + 0 + 1 

SetUIDist tuleb juttu mujal.

Veel üks hõlbustav tabel

- r-- --- ---	0400
- -w- --- ---	0200
- --x --- ---	0100
- --- r-- ---	0040
- --- -w- ---	0020
- --- --x ---	0010
- --- --- r--	0004
- --- --- -w-	0002
- --- --- --x	0001
- --s --- ---	4000
- --- --s ---	2000
- --- --- --t	1000

Kataloogid on failid

Esialgu on ehk natuke kummaline mõelda kataloogidest kui erilistest failidest, milles on kirjas seal sisalduvate failide nimed, kuid tegelikult vastab see failisüsteemi tehnilisele korraldusele.

Niisiis, kataloog on fail, kus on kirjas selles kataloogis sisalduvate failide ja nn alamkataloogide nimed ning viited failide tegelikele asukohtadele.

Selgitame:

  • Enne ütlesime, et kui meil pole kataloogi (st kataloogi kui faili) lugemisõigust (r), siis ei saa seal sees anda käsku ls. Tõepoolest, et ls saaks midagi näidata, peab ta saama faili (st kataloogi kui faili) lugeda. Lugeda aga ilma lugemise õiguseta ei saa.
  • Kui pole antud kataloogi (ehk erilise faili) kirjutamise õigust (w), siis ei saa sinna teha muutusi - ei saa faile kustutada ega juurde teha.
  • Ja kõige tähtsam, kui meil pole kataloogi (st kui faili) käivitamise õigust (x), siis ei saa sinna isegi sisse minna (käsuga cd).

Failide ja kataloogide õigustega manipuleerides saab luua esmapilgul kummalisi tingimusi:

  • keelates kataloogi kirjutamise ja lubades selles kataloogis olevasse faili kirjutada, saab faili sisu muuta
  • lubades kasutajaid oma kataloogi sisse ja sinna kirjutada, kuid mitte lubades kataloogi lugeda, saavad nad sinna faile luua ilma, et nad neid ls käsuga näeks.
  • lubades teisel kasutajal teha Teie kataloogi faile, on teisel kasutajal võimalus sinna tekitada ka nö. kataloog ning kui ta moodustab selle kataloogi sisse faile, siis ei saa te neid maha võtta, kui ta pole Teile selleks spetsiaalselt õigust andnud. Sel lihtsal põhjusel, et te pole kataloogi omanik, kus need failid asuvad; faili kustutamine eeldab aga kataloogi kirjutamise õigust.