Luku 4. Oikeudet

Tiedostoille voi antaa luku, kirjoitus tai suoritusoikeuden. Unixissa myös hakemistot ovat tiedostoja, joten niillekin on nämä samat oikeudet: suoritusoikeus sallii hakemistossa olevien tiedostojen lukemisen, kirjoitus sallii uusien tiedostojen luomisen hakemistoon ja lukuoikeus hakemistolistauksen näkemisen.

Koska Unix on monen käyttäjän järjestelmä, oikeudet annetaan omistajalle, ryhmälle ja muille. Nämä ilmaistaan kolmella kirjaimella kullekin joukolle, yhteensä siis yhdeksän kirjainta. Listauksen ensimmäinen merkki ilmaisee tiedoston tyypin, tavallinen tiedosto on -, hakemisto on d, character device on c, symbolinen linkki on l jne.

Esimerkki selventäköön hakemiston suoritusoikeuden vaikutusta:

Esimerkki 4.1. Hakemiston suoritusoikeuden vaikutus

phb:~# mkdir /tmp/Testi
phb:~# ls -ld /tmp/Testi/
drwxr-xr-x    2 root     root         4096 Dec 30 09:07 /tmp/Testi/
phb:~# touch /tmp/Testi/tiedosto.txt
phb:~# ls -l /tmp/Testi/
total 0
-rw-r--r--    1 root     root            0 Dec 30 09:07 tiedosto.txt
phb:~# chmod o-x /tmp/Testi/
phb:~# ls -ld /tmp/Testi/
drwxr-xr--    2 root     root         4096 Dec 30 09:07 /tmp/Testi/
phb:~# echo "Et arvaa" > /tmp/Testi/tiedosto.txt 
phb:~# chmod o+x-r /tmp/Testi 
phb:~# ls -ld /tmp/Testi/
drwxr-x--x    2 root     root         4096 Dec 30 09:07 /tmp/Testi/
phb:~#

Muut kuin root eivät saa luettua tiedosto.txt vaikka itse tiedostoon onkin lukuoikeus koska hakemistossa ei ole muille kuin omistajalle ja ryhmäomistajalle suoritusoikeus (x eli eXcecute). Kun lisätään suoritusoikeus ja otetaan pois lukuoikeus, muut käyttäjät eivät pääse näkemään hakemistolistausta mutta pääsevät lukemaan tiedoston jos tietävät sen nimen:

Esimerkki 4.2. Hakemiston luku- ja suoritusoikeus

tale@phb ~/Work/Debian/ESKK
$ ls -ld /tmp/Testi/
drwxr-x--x    2 root     root         4096 joulu 30 09:07 /tmp/Testi/
tale@phb ~/Work/Debian/ESKK
$ ls -l /tmp/Testi/
/bin/ls: /tmp/Testi/: Permission denied
tale@phb ~/Work/Debian/ESKK
$ cat /tmp/Testi/tiedosto.txt
Et arvaa
tale@phb ~/Work/Debian/ESKK
$ 

Oikeuksia muutetaan komennolla chmod, helpointa on käyttää tunnuksia u, g ja o (user, group ja other) joukoille omistaja, ryhmä ja muut (ja a tarkoittaa kaikkia näitä kolmea) sekä oikeuksia r, w ja x. Oikeus lisätään plussalla ja otetaan pois miinuksella, yhtäläisyysmerkillä voi antaa oikeudet suoraan.

Esimerkki 4.3. chmod

$ ls -lt
total 0
-rw-r--r--    1 tale     tale            0 joulu 30 18:42 Tiedosto.txt
tale@phb /tmp/Testi
$ chmod ug+x Tiedosto.txt 
tale@phb /tmp/Testi
$ ls -l Tiedosto.txt 
-rwxr-xr--    1 tale     tale            0 joulu 30 18:42 Tiedosto.txt
tale@phb /tmp/Testi
$ chmod g-r Tiedosto.txt 
tale@phb /tmp/Testi
$ ls -l Tiedosto.txt 
-rwx--xr--    1 tale     tale            0 joulu 30 18:42 Tiedosto.txt
tale@phb /tmp/Testi
$ chmod a=r Tiedosto.txt 
tale@phb /tmp/Testi
$ ls -l Tiedosto.txt 
-r--r--r--    1 tale     tale            0 joulu 30 18:42 Tiedosto.txt
tale@phb /tmp/Testi
$ 

L33t voi antaa oikeudet numeroina:

Esimerkki 4.4. L33t chmod

phb:~# chmod 421 /tmp/Testi/tiedosto.txt 
phb:~# ls -l /tmp/Testi/
total 4
-r---w---x    1 root     root            9 Dec 30 09:09 tiedosto.txt
phb:~#


Tämä on sama kuin chmod u=r,g=w,o=x /tmp/Testi/tiedosto.txt.

Vielä on suid-bitti jolla komento saa tiedoston omistajan oikeudet eikä komennon suorittajan oikeuksia. Mikäli on komento joka tarvitsee pääkäyttäjän oikeudet, pistetään tiedoston omistajaksi root ja chmod u+s. Tätä ei kuitenkaan pidä tehdä summamutikassa, mikäli komennon voi houkutella suorittamaan mielivaltaisia komentoja saa tällä tavalla täydet pääkäyttäjän oikeudet. Ylipäätään rootin oikeuksien kanssa kannattaa olla tarkkana eikä antaa niitä yhtään ylimääräisiä.

Katso myös Esimerkki 5.4, ”Ryhmähakemiston käyttö”.

Oikeuksien antamisessa on rajoituksena käyttäjien määrittely, on vain omistaja, ryhmä ja kaikki muut. Ei voi antaa oikeuksia yhdelle nimetylle käyttäjälle (paitsi omistajalle, tai tekemällä ryhmän jossa vain yksi käyttäjä). On mahdollista ottaa käyttöön Access Control List eli ACL, joilla saa oikeudet tarkemmin määriteltyä, vastaavasti kuin NTFS:ssä.

Unixissa tiedoston nimessä isot ja pienet kirjaimet ovat merkitseviä, eli Testi.txt ja testi.txt ovat kaksi eri tiedostoa.

Unixeissa ei ole tietokoneviruksista suuremmalti ongelmaa koska niiden tekemisestä ei olisi vastaavaa hyötyä. Unixissa yritetään crakkeroida rootin oikeudet etsimällä niistä ohjelmista joita suoritetaan rootin oikeuksilla tietoturvavikoja.