- CS-A0100
- 3. Hakemistot ja tiedostot
- 3.4 Tiedostojen oikeuksista
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ä:
Tiedoston omistajan oikeudet. Tässä
r
tarkoittaa lukuoikeutta jaw
kirjoitusoikeutta. Kuten on luonnollista, sinulla (tiedoston omistajalla) on siis tiedostoon sekä luku- että kirjoitusoikeudet.Tiedoston ryhmän oikeudet. Tässä koko käyttäjäryhmällä (mikä se sitten sattuukaan olemaan) on pelkästään lukuoikeudet.
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?
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.
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.