Tiedostojen oikeuksista

Linuxissa jokaisella tiedostolla on omistaja ja käyttäjäryhmä. Lisäksi tiedostoon liittyy myös oikeuksia, jotka rajaavat tiedoston käyttöä.

Jatketaan äskeisen tiedoston kokeilu.txt parissa. Jos poistit sen jo, voit luoda sen uudestaan esimerkiksi näin:

echo Lapio > kokeilu.txt

Katso hakemistolistausta tämän tiedoston osalta komennolla

ls -l kokeilu.txt

Kiinnitä huomiota erityisesti alussa olevaan rimpsuun, joka luultavasti on suunnilleen tämän näköinen:

-rw-r--r--

Tämä kryptisen näköinen rimpsu kannattaa jäsentää näin:

- rw- r-- r--

Ensimmäinen merkki olikin jo tullut tutuksi, siinä on yleensä hakemistojen kohdalla d ja tavallisten tiedostojen kohdalla - (koko tarina vähän mutkikkaampi). Mutta tämän jälkeen tulee kolmikoita, jotka kertovat tässä järjestyksessä:

  1. Tiedoston omistajan oikeudet. Tässä r tarkoittaa lukuoikeutta ja w kirjoitusoikeutta. Kuten on luonnollista, sinulla (tiedoston omistajalla) on siis tiedostoon sekä luku- että kirjoitusoikeudet.

  2. Tiedoston ryhmän oikeudet. Tässä koko käyttäjäryhmällä (mikä se sitten sattuukaan olemaan) on pelkästään lukuoikeudet.

  3. Kaikkien muiden oikeudet. Tässä kaikilla muilla saman koneen käyttäjillä on tiedostoon pelkästään lukuoikeudet.

Ei kuitenkaan kannata säikähtää, että kaikki näkisivät tiedoston sisällön automaattisesti. Jos tiedosto on kotihakemistossasi, sitä voi lukea vain ne, ketkä kotihakemistoosi pääsevät. Voit katsoa komennolla ls -ld ~ kotihakemistosi oikeudet. Ne saattavat näyttää esimerkiksi tällaisilta:

drwx------

Eli selvemmin jäsennettynä näin:

d rwx --- ---

Hakemistojen kohdalla x tarkoittaa pääsyä hakemistossa oleviin tiedostoihin. Tässä tapauksessa siis pelkästään käyttäjällä itsellään on täydet oikeudet kotihakemistoon ja muilla ei ole sinne mitään pääsyä. Ei siis tässä tapauksessa ole suurta merkitystä sillä, onko kotihakemistossasi olevilla tiedostoilla kuinka väljät oikeudet, kun kukaan muu ei kotihakemistoosi pääse. Joillain koneilla kotihakemiston oikeudet saattavat näyttää esimerkiksi tältä:

drwxr-x---

Eli selvemmin jäsennettynä näin:

d rwx r-x ---

Tässä tapauksessa käyttäjäryhmällä on pääsy hakemistoon, mutta tälläkään ei ole suurta väliä, jos samaan ryhmään kuuluu vain yksi käyttäjä (monissa Linux-järjestelmissä nykyään jokaiselle käyttäjällä luodaan oma henkilökohtainen ryhmä, johon ei oletuksena kuulu ketään muuta).

Oikeuksien rajaamista

Komennolla chmod voit rajata tiedostojen oikeuksia. Kokeile näitä kaikkia komentoja ja tarkista niiden vaikutus ls -l -komennolla:

chmod u-r kokeilu.txt
chmod u+r kokeilu.txt
chmod u-w kokeilu.txt
chmod u+w kokeilu.txt
chmod u-x kokeilu.txt
chmod u+x kokeilu.txt

chmod g-r kokeilu.txt
chmod g+r kokeilu.txt
chmod g-w kokeilu.txt
chmod g+w kokeilu.txt
chmod g-x kokeilu.txt
chmod g+x kokeilu.txt

chmod o-r kokeilu.txt
chmod o+r kokeilu.txt
chmod o-w kokeilu.txt
chmod o+w kokeilu.txt
chmod o-x kokeilu.txt
chmod o+x kokeilu.txt

Huomaat, että chmod u… säätää käyttäjän oikeuksia (user), chmod g… ryhmän (group) ja chmod o… muiden (other) oikeuksia. + lisää oikeuksia ja - poistaa.

Näitä toimintoja voi myös yhdistää; esimerkiksi tämä komento poistaa kaikki oikeudet ryhmältä ja muilta (kokeile!):

chmod go-rwx kokeilu.txt

Kirjoitusoikeudet

Säädä nyt oikeudet näin:

chmod go-rwx kokeilu.txt
chmod u-wx kokeilu.txt
chmod u+r kokeilu.txt

Jäljellä pitäisi olla siis pelkästään lukuoikeudet sinulla, eikä kellään muulla.

Tarkista, että voit edelleen lukea tiedoston sisältöä komennolla cat.

Yritä nyt muokata tiedostoa avaamalla se nano-editoriin. Mitä huomaat?

Mikä seuraavista kuvaa parhaiten nano-editorin käytöstä, kun avaat tiedoston, johon sinulla ei ole kirjoitusoikeuksia?

Kokeile, mitä tapahtuu, kun yrität uudelleenohjata tiedostoon, johon sinulla ei ole kirjoitusoikeuksia:

echo Lapio > kokeilu.txt

Poista lopuksi tiedosto kokeilu.txt komennolla rm kokeilu.txt. Mitä tapahtuu, kun yrität poistaa tiedoston, johon sinulla ei ole kirjoitusoikeuksia?

Ajo-oikeudet

Hakemistojen kohdalla x-oikeus tarkoitti pääsyä hakemistoon ja siellä oleviin tiedostoihin.

Tiedostojen kohdalla x-oikeus tarkoittaa ajo-oikeutta. Kokeile esimerkiksi tätä komentoa:

ls -l /usr/bin/uname

Huomaat, että uname-ohjelmassa on kaikille käyttäjille x-oikeudet, eli kyseessä on ajettava ohjelma. Voit esimerkiksi antaa tiedostonimen komentotulkille tähän tapaan, ja komento suoritetaan:

/usr/bin/uname

Kokeillaan luoda oma pieni ajettava skripti eli komentojono. Luo esimerkiksi komennon nano lapio.sh avulla tiedosto nimeltä lapio.sh, ja anna sen sisällöksi täsmälleen nämä rivit (viisi riviä kaikkiaan, ensimmäisellä rivillä hiukan mystinen #!-rimpsu, sen jälkeen tyhjä rivi ja sitten kolme tutumman näköistä komentoa):

#!/bin/bash

echo Hei!
echo Tervehdys!
echo Moi moi!

Tarkista komennolla cat lapio.sh, että tiedoston sisältö tosiaan on haluttu. Tällaista tiedostoa sanotaan shell-skriptiksi eli komentotulkin komentojonotiedostoksi; tiedostoon on koottuna lista komentoja, joita voidaan ajaa komentotulkilla.

Voimme pyytää bash-komentotulkkia ajamaan tämän komentojonon näin:

bash lapio.sh

Kokeile! Komennon pitäisi tulostaa kaikki kolme tervehdystä.

Mutta voimme myös tehdä tästä skriptistä ajettavan tiedoston näin:

chmod ugo+x lapio.sh

Nyt voitkin ajaa tiedoston yksinkertaisemmin, tähän tapaan; tässä . tarkoittaa nykyistä hakemistoa ja siis ./lapio.sh on vain vähän koukeroinen tapa viitata tässä hakemistossa olevaan tiedostoon lapio.sh:

./lapio.sh

Tai kun tiedosto sijaitsee kotihakemistossa, voit käynnistää sen myös esimerkiksi näin:

~/lapio.sh

Koska tiedosto on nyt merkitty x-oikeuksilla ajokelpoiseksi, tämäkin toimii nyt. Tiedoston ensimmäisellä rivillä oleva #!-loitsu kertoo, että tiedosto tulee antaa nimenomaan komentotulkille /bin/bash ajettavaksi. Riittää siis vain antaa tiedoston nimi komentotulkille, ja tiedosto suoritetaan juuri niin kuin halusimme.

Tässä on vain yksi pieni mutta. Ehkä jo mietit, miksi annoimme komennon ./lapio.sh eikä pelkästään lapio.sh. Jos komentotulkille antaa komennon, jossa ei ole lainkaan mitään viittauksia mihinkään hakemistoon (siis ei lainkaan /-merkkejä), komentotulkki alkaa etsiä ajettavaa komentoa polusta. Esimerkiksi pelkkä komento uname tarkoittaa, että etsitään tätä komentoa PATH-ympäristömuuttujassa kerrotuista hakemistoista. Ajettavia komentoja ei etsitä nykyisestä hakemistosta. Tämän vuoksi joudut käyttämään esimerkiksi muotoa ./lapio.sh niiden ajettavien komentojen kohdalla, jotka löytyvät nykyisestä hakemistosta.

Kokeile nyt poistaa ajo-oikeudet:

chmod ugo+x lapio.sh

Ja yritä käynnistää skripti kuten edellä:

./lapio.sh

Saat virheilmoituksen "Permission denied", koska tiedostolla ei ole enää ajo-oikeuksia.

Muokkaa tiedoston lapio.sh oikeuksia niin, että sinulla on ajo-oikeudet (x) mutta ei lukuoikeutta (r). Yritä käynnistää skripti komennolla ./lapio.sh. Mitä tapahtuu?

Kopioi ohjelma /usr/bin/uname kotihakemistoosi nimelle kokeilu. Varmista, että voit ajaa sen komennolla ./kokeilu. Muokkaa sitten tiedoston oikeuksia niin, että sinulla on ajo-oikeudet (x) mutta ei lukuoikeutta (r). Yritä käynnistää ohjelma komennolla ./kokeilu. Mitä tapahtuu?

Siivoa lopuksi kotihakemistostasi pois edellä luodut tiedostot, etteivät ne turhaan unohdu sinne.

Piilotiedostot

Kokeile kotihakemistossasi näitä kahta komentoa ja vertaa niiden tulostetta:

ls -l
ls -la

Huomaat, että jälkimmäisessä komennossa oleva lisävalitsin -a (all) näyttää myös joitain .-merkillä alkavia tiedostoja, joiden olemassaolosta et ollut ennen tietoinenkaan. Nämä ovat niin sanottuja piilotiedostoja. Piilotiedostoihin ei sinällään liity muuta magiaa kuin se, että ls ja moni muu vastaava toiminto jättää ne oletuksena näyttämättä.

Kokeile!

Luo oma piilotiedosto komennolla touch .lapio

Katso, miten se näkyy hakemistolistauksessa komennoilla ls -l ja ls -la. Kokeile myös komentoja ls ja ls -a.

Poista tiedosto lopuksi (rm .lapio).

Monien Linux-ohjelmien asetukset tallennetaan kotihakemistossa oleviin piilotiedostoihin, joten on hyvä olla tietoinen niiden olemassaolosta.

Palautusta lähetetään...