Tiedoston oikeudet
Linuxissa jokaisella tiedostolla, hakemistolla, lohkolaitteella yms. on tietyt oikeudet, jotka kertovat ketkä tiedostoa saavat lukea, kirjoittaa ja suorittaa.
Miksi?
Joskus voi tuntua typerältä, että esimerkiksi voidakseen suorittaa ladatun ohjelman on ensin erikseen annettava sille suoritusoikeus. Tiedostojen erilliset oikeudet lisäävät kuitenkin tietoturvaa, kun esimerkiksi tavallinen käyttäjä ei pysty lukemaan toisen käyttäjän tiedostoja tai ei pääse vahingossa suorittamaan virusta tai muuta haittaohjelmaa.
Oikeudet
Jokaisella tiedostolla on kolme erillistä oikeutta: kirjoitusoikeus, lukuoikeus ja suoritusoikeus. Voidaan esimerkiksi määrätä, että tiedostoa saa lukea kaikki käyttäjät mutta vain root kirjoittaa ja suorittaminen ei ole sallittua kenellekkään. Tällaisia tiedostoja ovat esimerkiksi lähes kaikki /etc-hakemiston asetustiedostot.
Tiedoston oikeudet voidaan merkitä joko numerosarjalla (esimerkiksi 660) tai kirjainyhdistelmällä (esimerkiksi -rw-r-----). Pureudutaan ensin tuohon numeroyhdistelmään.
Numeroyhdistelmässä ensimmäinen numero tarkoittaa tiedoston omistajan oikeuksia, toinen tiedoston ryhmän oikeuksia ja kolmas muiden oikeuksia. Jokaisella tiedostolla on omistaja (joka on oletuksena tiedoston luoja) ja se kuuluu johonkin käyttäjäryhmään. Mahdolliset arvot jokaiselle numerolle ovat:
- 0 = ei oikeuksia
- 1 = suoritus
- 2 = kirjoitus
- 3 = kirjoitus ja suoritus (1+2)
- 4 = luku
- 5 = luku ja suoritus (1+4)
- 6 = luku ja kirjoitus (1+2)
- 7 = luku, kirjoitus ja suoritus (1+2+4)
Jolloin esimerkiksi 000 piilottaisi tiedoston kaikilta eikä antaisi kenenkään muokata sitä (huom! omistaja ja root voisivat kuitenkin muuttaa oikeuksia!) ja 777 antaisi kaikille kaikki mahdolliset oikeudet (huono tietoturvan kannalta).
Kirjainyhdistelmä taas on ehkäpä hieman monimutkaisempi. Tarkastellaan esimerkkinä tiedostoa, jonka oikeudet ovat -rwxr-xr-x. Ensimmäinen merkki - tarkoittaa tiedostoa (jos sen tilalla olisi d, kyseessä olisi hakemisto). Ensimmäisenä oleva l-kirjain merkitsisi symbolista linkkiä. Muitakin mahdollisia merkkejä ovat esimerkiksi merkkilaite (c), lohkolaite (b) ja putki (p). Seuraavat kolme merkkiä ovat tiedoston omistajan oikeudet. Mahdollisia merkkejä ovat r (lukuoikeus), w (kirjoitusoikeus) ja x (suoritusoikeus). - tarkoittaa että oikeuksia ei ole lainkaan. Esimerkiksi omistajalla olisi luku- ja kirjoitusoikeus merkkijonolla rw- ja kaikki oikeudet (eli myös suoritusoikeus) merkkijonolla rwx (kuten esimerkissämme).
Seuraavat kolme merkkiä taas ovat vastaavalla tavalla ryhmän oikeudet, esimerkissämme r-x eli luku- ja suoritusoikeudet mutta ei kirjoitusoikeuksia. Viimeiset kolme merkkiä ovat muiden oikeudet.
Oikeuksien asettaminen
Tiedoston tai hakemiston oikeudet asetetaan käyttäen chmod-ohjelmaa. Tiedoston (tai hakemiston tai vastaavan) omistaja - ja tietysti myös root - voivat muuttaa oikeuksia yksinkertaisesti komennolla
chmod 760 tiedosto
Joka antaisi siis tiedoston omistajalle kaikki oikeudet, ryhmälle luku- ja kirjoitusoikeuden ja piilottaisi tiedoston muilta. Jos komennon kanssa käytetään valitsinta -R ja tiedoston paikalla on jokin hakemisto, muutetaan myös jokaisen alihakemiston ja alihakemiston tiedoston oikeudet.
Oikeudet voidaan asettaa myös käyttäen merkkijonoja. Voidaan komentaa esimerkiksi
chmod o+r tiedosto
joka antaisi muille lukuoikeudet. Syntaksi on seuraavanlainen: chmod <kenelle> <+/-/=> <oikeus> tiedosto. Oikeudet voidaan antaa joko omistajalle u (user), ryhmälle g (group), muille o (other) tai kaikille a (all). Kohteeseenkin voi yhdistää useampia kirjaimia, esim go=rw. Ryhmämerkintä "a" tarkoittaa siis samaa kuin "ugo". Mahdollisia oikeuksia ovat edellä esitellyt r, w ja x.
+ tarkoittaa että tietty oikeus lisätään ja - ottaa tietyn oikeuden pois. = merkkiä käytettäessä tietty oikeusmerkkijono asetetaan, eli esimerkiksi
chmod g=rw tiedosto
asettaisi ryhmälle luku- ja kirjoitusoikeuden riippumatta aiemmista oikeuksista (eli suoritusoikeutta ei enää ole jos sellainen aiemmin oli).
Tiedostojen oikeuksia voi toki muuttaa myös graafisesti käyttäen jotain tiedostonhallintaohjelmaa, esimerkiksi Konqueroria.