Opi Linux ja tiedosto-oikeudet
Akun ja Iineksen kanssa

Tämä kirjoitus kertoo Linuxin tavasta hallita käyttäjien oikeuksia käsitellä tiedostoja. Esimerkit on tehty Red Hat Linuxin versiolla 7.2, mutta eroja muihin Linux-jakelupaketteihin ei pitäisi käytännössä olla, ja teksti sopii lähes sellaisenaan myös muiden Unix-tyyppisten järjestelmien käytännön kuvaamiseen.

Teksti etenee esimerkkien kautta. Esimerkit edellyttävät, että sinulla on pääkäyttäjän oikeudet koneellesi. Tekstissä käytetään muutamia peruskomentoja joita ei selitetä, mutta muutoin on pyritty vääntämään asia paksusta rautalangasta tekstin tiiviyden kustannuksella. Tätä tekstiä ei kannata pelkästään lukea, vaan myös kokeilla komentoja itse.

Sisällys

Alkuvalmistelu: käyttäjien ja ryhmien luonti

Aloitetaan luomalla käyttäjät aku, iines ja mikki. Tehdään sitten ryhmä miehet, johon tulevat aku ja mikki, sekä ryhmä ankat, johon tietysti kuuluvat aku ja iines. Anna komennot rootin tunnuksella.

[root@kone root]# adduser aku
[root@kone root]# adduser iines
[root@kone root]# adduser mikki
[root@kone root]# groupadd miehet
[root@kone root]# groupadd ankat

[root@kone root]# gpasswd -a aku ankat
Adding user aku to group ankat
[root@kone root]# gpasswd -a iines ankat
Adding user iines to group ankat
[root@kone root]# gpasswd -a aku miehet
Adding user aku to group miehet
[root@kone root]# gpasswd -a mikki miehet

Adding user mikki to group miehet

Halutessasi voit nyt tarkistaa, että käyttäjät ja ryhmät todella on luotu katsomalla tiedostojen /etc/passwd ja /etc/group loppua:

[root@kone root]# tail -3 /etc/passwd
aku:x:504:505::/home/aku:/bin/bash
iines:x:505:506::/home/iines:/bin/bash
mikki:x:506:507::/home/mikki:/bin/bash

[root@kone root]# tail -2 /etc/group
miehet:x:508:aku,mikki
ankat:x:509:aku,iines

Luvut riippuvat siitä, montako käyttäjää ja ryhmää testikoneessa entuudestaan on.

Uusille käyttäjille tarvitaan salasanat. Komennolla passwd aku voit asettaa akun salasanan, ja tietysti muille käyttäjille salasanat tulevat vastaavasti.

Perusasia: käyttäjät, ryhmät ja oikeudet

Tiedoston luku- ja kirjoitusoikeus

Kirjaudu sisään tunnuksella aku ja siirry hakemistoon /tmp cd-komennolla. Anna komento
umask 777
(Komennon merkitys selitetään myöhemmin, älä mieti sitä vielä.) Luo tiedosto kirje.txt esimerkiksi komennolla
echo "Hei Iines" > kirje.txt
Tuloksena on tiedosto, jota ei edes aku itse voi käsitellä. Katsotaan tiedostolistaus:

[aku@kone tmp]$ ls -l kirje.txt
----------    1 aku     aku           10 syys  15 15:23 kirje.txt

Ja yritetään tulostaa tiedoston sisältö:

[aku@kone tmp]$ cat kirje.txt
cat: kirje.txt: Permission denied

Lukuoikeus annetaan chmod-komennolla:

[aku@kone tmp]$ chmod u=r kirje.txt
[aku@kone tmp]$ ls -l kirje.txt
-r--------    1 aku     aku           36 syys  15 15:30 kirje.txt
[aku@kone tmp]$ cat kirje.txt

Hei Iines

Esimerkin chmod-komento tarkoittaa "aseta tiedoston omistajalle oikeus lukea tiedostoa, mutta ei mitään muuta oikeutta". Lukuoikeuden näkee r-kirjaimesta tiedostolistauksessa. cat-komento tulostaa tiedoston nyt, kun lukuoikeus on annettu.

Yritetään lisätä rivi tiedostoon:

[aku@kone tmp]$ echo "Olen pohtinut suhdettamme" >> kirje.txt

bash: kirje.txt: Permission denied

Lisätään kirjoitusoikeuskin:

[aku@kone tmp]$ chmod u=rw kirje.txt
[root@kone tmp]# ls -l kirje.txt
-rw-------    1 aku     aku           36 syys  15 15:30 kirje.txt
[aku@kone tmp]$ echo "Olen pohtinut suhdettamme" >> kirje.txt

[aku@kone tmp]$ cat kirje.txt
Hei Iines
Olen pohtinut suhdettamme

Mahdollista on myös antaa tiedostolle pelkästään kirjoitusoikeus, vaikka tätä ei käytännössä paljonkaan käytetä. Esimerkin vuoksi, kokeilkaamme:

[aku@kone tmp]$ chmod u=w kirje.txt
[aku@kone tmp]$ ls -l kirje.txt
--w-------    1 aku     aku           36 syys  15 15:30 kirje.txt

[aku@kone tmp]$ echo "ja tullut siihen tulokseen" >> kirje.txt
[aku@kone tmp]$ cat kirje.txt
cat: kirje.txt: Permission denied

Tiedoston suoritusoikeus

Nyt tarvitaan ohjelmatiedosto, ja sopiva sellainen on pwd, joka vain tulostaa työhakemiston. Kopioidaan se vaikka nimelle "tyohak".

[aku@kone tmp]$ cp /bin/pwd tyohak
[aku@kone tmp]$ ls -l tyohak
----------    1 aku     aku        10428 syys   5 13:29 tyohak

Yritetään ajaa ohjelma, lisätään suoritusoikeus ja yritetään uudelleen.

[aku@kone tmp]$ ./tyohak
bash: ./tyohak: Permission denied

[aku@kone tmp]$ chmod u=x tyohak
[aku@kone tmp]$ ls -l tyohak
---x------    1 aku     aku        10428 syys   5 13:29 tyohak
[aku@kone tmp]$ ./tyohak
/tmp

Ohjelmatiedoston sisältöä ei silti pysty tulostamaan, kokeile vaikka less-komennolla. (Ohjelmatiedosto näyttää epämääräiseltä mössöltä, ja joskus sen tulostaminen cat-komennolla sekoittaa konsolin merkistön, siksi less-komento on parempi.) Kokeile lisätä lukuoikeus (u=rx) ja varmista vielä, että lukuoikeus ja suoritusoikeus ovat toisistaan riippumattomia. Myös kirjoitusoikeus on erillinen oikeus; sitäkin voit kokeilla, mutta muutetun ohjelmatiedoston ajaminen ei ole hyvä idea.

Tässä vaiheessa siis näet, että pitkän tiedostolistauksen alussa olevan kymmenen merkin toinen, kolmas ja neljäs merkki kuvaavat luku-, kirjoitus- ja suoritusoikeuksia kirjaimilla r, w ja x.

Hakemistojen oikeudet

Seuraavana vuorossa: oikeudet hakemistoille. Jotta Linuxin käyttö ei olisi liian helppoa, on hakemistoilla samat r-, w- ja x-oikeudet, mutta niiden merkitys on aivan muu kuin tiedostoilla. Aloitetaan tekemällä hakemisto kirjeet, ja vaihteeksi edetään toisinpäin poistamalla oikeuksia.

[aku@kone tmp]$ mkdir kirjeet
[aku@kone tmp]$ chmod u=rwx kirjeet/
[aku@kone tmp]$ ls -ld kirjeet
drwx------    2 aku     aku         1024 syys  15 16:08 kirjeet

Komento ls toimii normaalisti niin, että ls xx näyttää tiedoston xx, jos xx on tiedosto, ja hakemiston xx sisältämät tiedostot, jos xx on hakemisto. d-valitsin muuttaa toimintaa niin, että tulostetaan pelkästään hakemiston nimi eikä sisältöä.

Jos ensimmäinen merkki tiedostolistauksessa on d-kirjain, on kyse hakemistosta eikä tavallisesta tiedostosta.

Luodaan hakemistoon kirje, annetaan sille luku- ja kirjoitusoikeus, tulostetaan kirjeet-hakemiston sisältö ja vielä tulostetaan kirje:

[aku@kone tmp]$ echo "Moi Hessu" > kirjeet/hessulle.txt
[aku@kone tmp]$ chmod u=rw kirjeet/hessulle.txt

[aku@kone tmp]$ ls -l kirjeet
total 1
-rw-------    1 aku     aku           10 syys  15 16:31 hessulle.txt
[aku@kone tmp]$ cat kirjeet/hessulle.txt
Moi Hessu

Poistamalla hakemistolta suoritusoikeus poistuu oikeus käsitellä hakemiston joko suoraan tai alihakemistojen kautta sisältämiä tiedostoja. Siis

[aku@kone tmp]$ chmod u=rw kirjeet

[aku@kone tmp]$ ls -ld kirjeet
drw-------    2 aku     aku         1024 syys  15 16:31 kirjeet
[aku@kone tmp]$ cat kirjeet/hessulle.txt
cat: kirjeet/hessulle.txt: Permission denied

Jos taas suoritusoikeus on, mutta lukuoikeus puuttuu, niin...

[aku@kone tmp]$ chmod u=xw kirjeet

[aku@kone tmp]$ ls -ld kirjeet
d-wx------    2 aku     aku         1024 syys  15 16:31 kirjeet
[aku@kone tmp]$ cat kirjeet/hessulle.txt
Moi Hessu
[aku@kone tmp]$ ls -l kirjeet
ls: kirjeet: Permission denied

...hakemiston sisältämiä tiedostoja voi käsitellä, mutta hakemiston sisältöä ei saa listattua. Käytännössä siis tiedoston käyttö onnistuu vain, jos tiedoston nimen tietää etukäteen. (Tosin mikään ei estä kokeilemasta järjestyksessä cat aaa, cat aab, cat aac ... cat zzz. Aikaa saattaa kyllä kulua aika kauan.)

Uusia tiedostoja saa tehdä (ja vanhoja poistaa) hakemistoon, johon on kirjoitusoikeus ja suoritusoikeus. Kokeilemme:

[aku@kone tmp]$ chmod u=rwx kirjeet

[aku@kone tmp]$ ls -ld kirjeet
drwx------    2 aku     aku         1024 syys  15 16:31 kirjeet
[aku@kone tmp]$ echo "Moi Minni" > kirjeet/minnille.txt
[aku@kone tmp]$ chmod u=rx kirjeet
[aku@kone tmp]$ ls -ld kirjeet
dr-x------    2 aku     aku         1024 syys  15 16:41 kirjeet

[aku@kone tmp]$ echo "Moi Iines" > kirjeet/iinekselle.txt
bash: kirjeet/iinekselle.txt: Permission denied

Käyttäjät ja ryhmät (ja kaikki muut)

Nyt päästään vihdoin asiaan. Kuten noin 7000 merkkiä sitten muistat, luotiin aluksi ryhmä ankat, johon tuli käyttäjät aku ja iines. Red Hat Linux toimii niin, että jokainen käyttäjä kuuluu omaan henkilökohtaiseen ryhmäänsä. Siksi tiedostolistauskin näyttää käyttäjätunnuksen kahteen kertaan:

----------    1 aku     aku           10 syys   1 21:54 kirje.txt

Vaihdetaan tiedoston ryhmäksi ankat komennolla chgrp, ja annetaan ryhmälle lukuoikeus sekä akulle itselleen luku- ja kirjoitusoikeus:

[aku@kone tmp]$ chgrp ankat kirje.txt
[aku@kone tmp]$ chmod g=r kirje.txt
[aku@kone tmp]$ chmod u=rw kirje.txt
[aku@kone tmp]$ ls -l kirje.txt

-rw-r-----    1 aku     ankat         10 syys   1 21:54 kirje.txt

Kirjaudu toisista virtuaalikonsoleista tunnuksilla iines ja mikki ja kokeile miten tiedostoa voi käsitellä:

[iines@kone tmp]$ cat kirje.txt
Hei Iines
[iines@kone tmp]$ echo "Tekstiä kirjeeseen" > kirje.txt

bash: kirje.txt: Permission denied

[mikki@kone tmp]$ cat kirje.txt
cat: kirje.txt: Permission denied

Siis: ankat-ryhmään kuuluu akun lisäksi iines, ja ryhmälle on annettu chmod-komennolla lukuoikeus (siis g=group ja r=read), mutta ei kirjoitusoikeutta. Siksi iines voi lukea tiedoston sisällön ja vaikka kopioida sen itselleen vaan ei kirjoittaa tiedostoon. Mikillä ei ole mitään asiaa käpälöidä tiedostoa.

Tiedostolla on aina tasan yksi ryhmä, samaa tiedostoa ei aku siis voi antaa sekä ankat- että miehet-ryhmän käsiteltäväksi.

Tiedoston omistajan ja ryhmän lisäksi oikeuksia voi antaa myös kaikille käyttäjille. Jos esimerkiksi aku ja mikki kirjoittavat yhdessä julistusta miesten sorsimisesta, ja pitävät jutun kirjoitusaikanakin kaikkien luettavissa, se onnistuu näin:

[aku@kone tmp]$ echo "Miesten asema nykyään:" > julistus.txt
[aku@kone tmp]$ chgrp miehet julistus.txt
[aku@kone tmp]$ chmod u=rw julistus.txt
[aku@kone tmp]$ chmod g=rw julistus.txt
[aku@kone tmp]$ chmod o=r julistus.txt

[aku@kone tmp]$ ls -l julistus.txt
-rw-rw-r--    1 aku     miehet        23 syys   1 22:08 julistus.txt

Viimeisessä chmod-komennossa o-kirjain tulee sanasta "others", siis "muut". Nyt tiedostoon voivat kirjoittaa aku ja mikki, ja iines (ja kaikki muutkin koneen käyttäjät) voivat lukea tiedostoa. Kokeile!

Tiedostolistauksessa näkyy siis alussa kymmenen merkkiä. Ensimmäinen kuvaa tiedoston tyyppiä, viiva tarkoittaa tiedostoa ja d-kirjain hakemistoa, ja loput yhdeksän merkkiä jakautuvat kolmeen ryhmään, joista kussakin on kolme merkkiä. Ensimmäinen kolmikko kuvaa omistajan itsensä oikeuksia tiedostoon, toinen kolmikko ryhmän oikeuksia ja viimeinen kolmikko kaikkien oikeuksia. Jokaisessa ryhmässä samat oikeudet merkitään kirjaimilla r,w ja x.

Kaikki mitä aiemmin opit suoritusoikeuksista ja hakemistojen oikeuksista pätee yhä. Esimerkiksi aku voi lukea tiedoston /tmp/aa/bee/cee.txt sisällön, jos hakemistolla /tmp on kaikille suoritusoikeus, hakemiston /tmp/aa ryhmä on miehet ja ryhmällä on suoritusoikeus, hakemiston /tmp/aa/bee ryhmä on ankat ja ryhmällä on suoritusoikeus, ja tiedoston cee.txt omistaja on aku ja akulla on lukuoikeus tiedostoon. Monimutkaista? Ei oikeastaan, mutta kannattaa oikeasti harjoitella kunnes tuntee osaavansa asian. Kokeillessa kannattaa kirjautua sisään useista virtuaalikonsoleista eri tunnuksilla ja sanoa aina ensimmäisenä umask 777. (Usko pois, kyllä se umask-komentokin vielä selitetään. :=) )

Hakemistojen suoritusoikeus (x) on helpoin mieltää kauttakulkuoikeudeksi: tarvitset suoritusoikeuden jokaiseen käsiteltävän tiedoston polussa olevaan hakemistoon.

chmodista lisää

Edellä on käytetty chmod-komennosta vain muotoa, joka asettaa oikeudet. On mahdollista käyttää myös plusmerkkiä oikeuden lisäämiseen ja miinusmerkkiä oikeuden poistamiseen. On mahdollista antaa yhdellä kertaa oikeuksia sekä omistajalle, ryhmälle että muille. Lisäksi a-kirjain tarkoittaa "all" eli kaikkia. Esimerkki valaissee parhaiten:

[aku@kone tmp]$ ls -l julistus.txt
-rw-rw-r--    1 aku     miehet        23 syys   1 22:08 julistus.txt

[aku@kone tmp]$ chmod g-w julistus.txt
[aku@kone tmp]$ ls -l julistus.txt
-rw-r--r--    1 aku     miehet        23 syys   1 22:08 julistus.txt
[aku@kone tmp]$ chmod a=w julistus.txt
[aku@kone tmp]$ ls -l julistus.txt

--w--w--w-    1 aku     miehet        23 syys   1 22:08 julistus.txt
[aku@kone tmp]$ chmod u+r,go-w julistus.txt
[aku@kone tmp]$ ls -l julistus.txt
-rw-------    1 aku     miehet         2 syys   5 12:30 julistus.txt

chmod tuntee valitsimen -r, pidemmälti sanottuna --recursive. Se tarkoittaa, että oikeudet muutetaan kaikkien alihakemistojenkin tiedostoihin. Sama valitsin toimii myös chgrp-komennossa.

chmod tuntee vielä myös ison X-kirjaimen. Se tarkoittaa suoritusoikeutta kaikille hakemistoille ja niille tiedostoille, joilla jo suoritusoikeus on. Käytännössä root testaa ensin jonkun hakemiston haaran toiminnan ja sanoo sitten
chmod --recursive a+rX hakemistonnimi
jolloin kaikille tulee oikeus lukea tiedostoja ja listata kaikkien tiedostojen sisältö, sekä oikeus ajaa kaikkia niitä ohjelmatiedostoja, joihin suoritusoikeus oli.

root on kaikkivaltias; chown-komento

Vain omistamansa tiedoston ryhmän voi vaihtaa, ja ryhmäksi voi laittaa vain sellaisen ryhmän, jonka jäsen on. Siis aku voi vaihtaa vain omien (eli yleensä itse luomiensa) tiedostojen oikeuksia, ja vain ryhmiin ankat tai miehet, Red Hat Linuxin tapauksessa myös ryhmään aku. root on kuitenkin aina kaikkivaltias, ja voi vaihtaa minkä tahansa tiedoston ryhmän miksi tahtoo, ja voi myös vaihtaa kaikkien tiedostojen oikeuksia.

chown-komennolla voi vaihtaa tiedoston omistajan. Komentoa voi käyttää vain root. Samalla komennolla voi vaihtaa sekä omistajan että ryhmän erottamalla ne pisteellä. Esimerkki:

[root@kone tmp]# ls -l kirje.txt julistus.txt
-rw-r-----    1 aku     ankat         10 syys   1 21:54 kirje.txt
-rw-rw-rw-    1 mikki   miehet        23 syys   1 22:08 julistus.txt
[root@kone tmp]# chown iines kirje.txt

[root@kone tmp]# chown aku.ankat julistus.txt
[root@kone tmp]# ls -l kirje.txt julistus.txt
-rw-r-----    1 iines   ankat         10 syys   1 21:54 kirje.txt
-rw-rw-rw-    1 aku     ankat         23 syys   1 22:08 julistus.txt

umask ja hassut numeroarvot

Jos ihmisellä olisi kahdeksan sormea, niin käyttäisimme kai numeroita nollasta seitsemään. Kahdeksanlukujärjestelmä sopii kivasti kolmen kyllä/ei -arvon esittämiseen: kun määritellään r-oikeuden arvoksi neljä, w-oikeuden arvoksi kaksi ja x-oikeuden arvoksi yksi, saadaan summaksi luku nollasta seitsemään. Kolmella tällaisella luvulla saadaan kuvattua kaikki oikeudet, ja chmod hyväksyy numeroarvotkin.

Esimerkiksi omistajalle luku- ja suoritusoikeus tekee neljä ynnä yksi tekee viisi, ryhmälle kirjoitusoikeus tekee kaksi ja muille ei mitään oikeuksia tekee nolla, eli:

[aku@kone tmp]$ chmod 520 kirje.txt

[aku@kone tmp]$ ls -l kirje.txt
-r-x-w----    1 aku     aku            4 syys   1 22:53 kirje.txt

Numeroarvot ovat epäkäteviä, mutta umask-komento toimii vain numeroilla. Umask tarkoittaa mitä oikeuksia luotavat tiedostot oletusarvoisesti eivät saa. umask 777 tarkoittaa ettei tiedostoille tule mitään oikeuksia kenelläkään, ja esimerkiksi aika käyttökelpoinen umask 027 antaa oletusarvoisesti tiedoston omistajalle kaikki oikeudet (0=ei mitään, siis jää kaikki) ja ryhmälle luku- ja suoritusoikeuden (2=kirjoitus, siis jää luku ja suoritus) ja muille ei mitään (7=1+2+4=kaikki, siis ei jää mitään).

Jälleen kerran: kokeile! Vaihda umask, luo uusi tiedosto ja katso mitä oikeuksia se saa. Antamalla pelkän umask-komennon näet mikä on maskin arvo tällä hetkellä.

Edelliset kappaleet olivat huijausta. Oikeasti umask toimii myös symbolisessa muodossa, kokeile vaikka komentoa
umask -S u=rwx,g=rx,o=
Sen sijaan esimerkiksi samban (palvelu, joka jakaa Linux-palvelimen levyjä windows-työasemille) asetustiedostoon umask-arvot pitää syöttää oktaalinumeroina.

Edistyneempi asia: erikoisokeudet

Erikoisempia oikeuksia tiedostoille

Edellä tuli kerrottua "tavalliset" oikeudet. Lisäksi on vielä kolme erikoisempaa oikeutta.

Normaalisti käyttäjän oikeudet periytyvät käynnistettäville ohjelmille, eli ellei akulla ole lukuoikeutta tiedostoon, ei mikään akun käynnistämä ohjelmakaan tiedostoa voi lukea. setuid-oikeus tarkoittaa, että ohjelmatiedosto suoritetaan tiedoston omistajan oikeuksilla. Asia on helpoin esittää esimerkillä.

Aloitetaan tekemällä ohjelma "tulosta", joka tulostaa ensimmäisen merkin hakemiston /tmp/aku sisältämästä tiedostosta. Kopioi seuraava ohjelma tiedostoon nimeltä tulosta.c++

#include <fstream.h>
#include <string.h>

int main(int argc, char * argv[]) {
  char tiedostonnimi[100]="/tmp/aku/";
  int polunpituus=strlen("/tmp/aku/");
  if (argc < 2) {
    cout << "Virhe. Anna tiedostonnimi.\n";
  }
  else {
    if (strlen(argv[1]) >= 100-polunpituus) {
      cout << "Virhe. Anna lyhyempi tiedostonnimi.\n";
    }
    else {
      strcpy(tiedostonnimi+polunpituus, argv[1]);
      ifstream tiedosto(tiedostonnimi);
      if (tiedosto.good())
        {
          char merkki;
          tiedosto >> merkki;
          cout << merkki << "\n";
        }
      else {
        cout << "Virhe. Tiedostoa ei löydy tai ei voi lukea.\n";
      }
    }
  }
}

Vaihda ensin umask, jotta kääntäjä voi lukea väliaikaisia tiedostojaan. Käännä tulosta.c++ g++ -komennolla, jolloin tuloksena on ajettava ohjelma nimeltään "tulosta". Tee hakemisto "aku" ja laita hakemistoon tiedosto, jonka sisältönä on vaikka "xyz".

[aku@kone tmp]$ umask 077
[aku@kone tmp]$ g++ -o tulosta tulosta.c++
[aku@kone tmp]$ mkdir aku
[aku@kone tmp]$ echo "xyz" > aku/jee

[aku@kone tmp]$ ls -l aku/jee
-rw-------    1 aku     aku            4 syys   5 15:45 aku/jee

Anna tulosta-ohjelmalle suoritusoikeus kaikille käyttäjille ja kokeile ohjelman toimintaa eri käyttäjätunnuksilla. Lisää sitten setuid-oikeus ja kokeile uudelleen:

[aku@kone tmp]$ chmod a+x tulosta
[aku@kone tmp]$ ./tulosta jee
x

[iines@kone tmp]$ ./tulosta jee
Virhe. Tiedostoa ei löydy tai ei voi lukea.

[aku@kone tmp]$ chmod u+s tulosta
[aku@kone tmp]$ ls -l tulosta
-rws--x--x    1 aku     aku        15791 syys   5 15:44 tulosta

[iines@kone tmp]$ ./tulosta jee
x

Siis nyt ohjelma "tulosta" suoritetaan aina käyttäjän "aku" oikeuksilla, ja ohjelma voi siis lukea ja kirjoittaa niitä tiedostoja joihin akulla on oikeus, siirtyä vastaavasti hakemistoihin jne, ja ohjelman mahdollisesti edelleen käynnistämät ohjelmat saavat myös samat oikeudet. Edelläoleva esimerkki on tyhmä, mutta osoittaa perusidean: käyttäjä voi sallia tiedostojen käytön muille jollain rajatulla tavalla.

setuid on vaarallinen! Mitä tapahtuu, jos iines käyttää komentoa
/tmp/tulosta ../../home/aku/salainen-tiedosto
?

Käytännössä setuid-oikeutta käyttää lähinnä root. Esimerkiksi tiedostoihin /etc/passwd ja /etc/shadow pääsee kirjoittamaan vain root,

[aku@kone tmp]$ ls -l /etc/passwd /etc/shadow
-rw-r--r--    1 root    root        1352 syys  15 15:18 /etc/passwd
-rw-------    1 root    root        1202 syys  15 15:18 /etc/shadow

mutta käyttäjienhän pitää päästä vaihtamaan oma salasanansa. Se onnistuu, sillä passwd-ohjelmalla on setuid-oikeus päällä:

[aku@kone tmp]$ ls -l /usr/bin/passwd
-r-s--x--x    1 root     root      13476 elo     7 07:03 /usr/bin/passwd

passwd-ohjelma taas rajoittaa toimintaa niin, että jokainen käyttäjä voi vaihtaa vain oman salasanansa. Jos passwd-ohjelmasta löytyisi sopiva virhe, niin käyttäjät voisivat vaikka vaihtaa rootin salasanan, ja päästä näin tuhoamaan koko järjestelmän! Voit kokeilla itsekin setuid-bittiä tässä:

[root@kone tmp]# chmod u-s /usr/bin/passwd
[root@kone tmp]# ls -l /usr/bin/passwd

-r-x--x--x    1 root     root      13476 elo     7 07:03 /usr/bin/passwd

[mikki@kone tmp]$ passwd
passwd: Authentication token manipulation error

[root@kone tmp]# chmod u+s /usr/bin/passwd

[mikki@kone tmp]$ passwd
Changing password for mikki
(current) UNIX password:

Aivan samoin kuin setuid-oikeus toimii myös setgid-oikeus, joka tekee ohjelman ajettavaksi ryhmän oikeuksilla. Kokeile tätäkin itse, komento on chmod g+s

Mikään ei estä antamasta samalle ohjelmalle sekä setuid- että setgid-oikeuksia.

setuid ja setgid eivät toimi shell-skripteillä. Syy tähän on turvallisuus, shell-skriptiä olisi liian helppo väärinkäyttää. (Kun ohjelma alkaa #!/bin/bash se suoritetaan käynnistämällä ensin bash ja sitten bash lukee shelliskriptin ja toimii sen mukaan. Tässä välissä voisi käyttäjä vaihtaa skriptin sisältöä (onnistuu sopivalla symbolisella linkillä), ja pääsisi suorittamaan omaa koodiaan jonkun toisen tunnuksilla.)

(setgid-oikeus ilman suoritusoikeutta ryhmälle tarkoittaa mandatory lockingia, aihetta ei käsitellä tässä.)

Ohjelmatiedostolle voi asettaa kolmannenkin erikoisoikeuden, ns. sticky bitin eli tahmabitin, komennolla
chmod o+t tiedostonnimi
mutta Linuxissa se ei vaikuta mitään, vaikka ainakin Reh Hat Linuxin sisältämä chmod-komennon manuaalisivu niin väittääkin.

Ohjelmakoodia ei siirretä sivutustiedostoon muistin loppuessa samalla tavoin kuin dataa, ohjelmakoodihan voidaan aina ladata levyltä uudelleen. t-bitti ohjelmatiedostossa muuttaa tätä joissakin Unixeissa niin että ohjelmakoodikin voidaan sivuttaa. Tästä olisi teoreettista hyötyä jos ohjelma sijaitsisi hitaalla levyllä ja sivutustiedosto nopealla levyllä, mutta Linux siis ei ominaisuutta tue.

Erikoisempia oikeuksia hakemistoille

Kuten "tavallisten" oikeuksienkin kohdalla, on hakemistoilla muodollisesti samat erikoisoikeudet kuin tiedostoilla, mutta merkitys on aivan muu.

Hakemistollekin voi asettaa setuid-oikeuden, mutta se ei vaikuta mitenkään.

setgid-oikeus hakemistolla tarkoittaa, että hakemistoon luotavat tiedostot saavat saman ryhmän kuin hakemistolla on. Eli esimerkiksi:

[aku@kone tmp]$ mkdir juttuja
[aku@kone tmp]$ chgrp ankat juttuja
[aku@kone tmp]$ chmod 770 juttuja

[aku@kone tmp]$ ls -ld juttuja
drwxrwx---    2 aku     ankat       1024 syys   2 00:40 juttuja

[iines@kone tmp]$ echo "juu" > juttuja/ekajuttu

[aku@kone tmp]$ chmod g+s juttuja

[iines@kone tmp]$ echo "joo" > juttuja/tokajuttu
[iines@kone tmp]$ ls -l juttuja
total 2
-rw-rw-r--    1 iines   iines          4 syys   2 00:42 ekajuttu
-rw-rw-r--    1 iines   ankat          4 syys   2 00:43 tokajuttu

Setgid hakemistoille periytyy:

[iines@kone juttuja]$ mkdir alihakemisto
[iines@kone juttuja]$ ls -ld alihakemisto
drwxrwsr-x    2 iines   ankat       1024 syys   2 00:45 alihakemisto

Lopuksi on vielä sticky bit, epävirallisesti suomennettuna tahmabitti, hakemistoille. Se tarkoittaa, että vain tiedoston omistaja saa poistaa tiedoston - normaalistihan kirjoitusoikeus hakemistolle antaa oikeuden poistaa hakemistosta kaikkia tiedostoja. Esimerkki:

[aku@kone tmp]$ mkdir tekstit

[aku@kone tmp]$ chgrp ankat tekstit
[aku@kone tmp]$ chmod 770 tekstit
[aku@kone tmp]$ echo "moi" > tekstit/eka
[aku@kone tmp]$ echo "hei" > tekstit/toka
[aku@kone tmp]$ chgrp ankat tekstit/*
[aku@kone tmp]$ ls -ld tekstit

drwxrwx---    2 aku     ankat       1024 syys   2 00:59 tekstit

[iines@kone tmp]$ cd tekstit
[iines@kone tekstit]$ ls -l
total 2
----------    1 aku     ankat          4 syys   2 00:59 eka
----------    1 aku     ankat          4 syys   2 00:59 toka
[iines@kone tekstit]$ rm eka
rm: remove write-protected file `eka'? y

[aku@kone tmp]$ chmod o+t tekstit
[aku@kone tmp]$ ls -ld tekstit
drwxrwx--T    2 aku     ankat       1024 syys   2 01:00 tekstit

[iines@kone tekstit]$ rm toka

rm: remove write-protected file `toka'? y
rm: cannot unlink `toka': Operation not permitted

Katso juurihakemiston tiedostolistaus pitkässä muodossa (ls -l /). Millä hakemistolla on tahmabitti päällä? Miksi?

Tiedostolistauksessahan s- ja t-kirjain voi peittää x-kirjaimen. Jos "alla" on oikeus päällä, näkyy s- tai t-kirjain pienenä, muutoin suurena. Vielä esimerkki:

[aku@kone tmp]$ chmod g+x tulosta

[aku@kone tmp]$ ls -l tulosta
-rwxr-s--x    1 aku     ankat      15341 syys   1 23:59 tulosta
[aku@kone tmp]$ chmod g-x tulosta
[aku@kone tmp]$ ls -l tulosta
-rwxr-S--x    1 aku     ankat      15341 syys   1 23:59 tulosta

Muuta asiaa sivuavaa

Laitetiedostot ja pseudokäyttäjät ja pseudoryhmät

Unixissa kaikki on tiedostoja. Esimerkiksi tavallista korppuasemaa vastaa tiedosto /dev/fd0 ja levykkeen alkua voi lukea komennolla
less -f /dev/fd0
ja tulostinportteja vastaavat tiedostot /dev/lp0, /dev/lp1 ja /dev/lp2 ja tekstitiedoston saa tulostettua (yleensä) komennolla
cp tiedostonnimi /dev/lp0

Myös laitetiedostoilla on oikeudet, esimerkiksi

[aku@kone aku]$ ls -l /dev/hda /dev/lp0
brw-rw----    1 root    disk       3,  0 elo    30 23:30 /dev/hda

crw-rw----    1 root    lp         6,  0 elo    30 23:30 /dev/lp0

tarkoittaa, että vain root ja ryhmään disk kuuluvat käyttäjät voivat käsitellä suoraan ensimmäisen IDE-väylän master-levyn (DOS/Win-puolella C-aseman sisältävä levy) levypintaa, ja että root ja ryhmään lp kuuluvat käyttäjät voivat kirjoittaa ja lukea tulostinporttia.

Yleensä näitä oikeuksia ei joudu muuttamaan. Eräs poikkeus on levykkeen käsittely mtools-paketilla, joka onnistuu muiltakin kuin pääkäyttäjältä kun joko annetaan /dev/fd0 -laitetiedostolle sopivat oikeudet tai asetetaan setuid-bitti paketin sisältämille ohjelmille.

Tiedostolistauksen alussa näkyvä b-kirjain tarkoittaa lohkolaitetta (engl. block device) ja c-kirjain merkkilaitetta (engl. character device). Lohkolaite lukee ja kirjoittaa aina kerralla esimerkiksi 512 tai 1024 tavun lohkon, merkkilaite käsittelee yksittäisiä merkkejä. Oikeuksien kannalta erolla ei ole merkitystä, luku- ja kirjoitusoikeus sekä käyttäjä ja ryhmä määritellään samalla tavoin.

Laitetiedostoilla on muodollisesti myös suoritusoikeus sekä setuid- ja setgid-oikeudet sekä tahmabitti, ja nämä oikeudet voidaan myös antaa chmod-komennolla. Niillä ei kuitenkaan ole mitään vaikutusta, sillä laitetiedostoa ei voi suorittaa.

On olemassa myös nimettyjä putkia (engl. named pipe), jotka merkitään tiedostolistauksessa p-kirjaimella, ja unix domain socketteja (suomennos??), joilla vastaava kirjain on s. Niitä ei käsitellä tässä enempää, mutta oikeudet määritellään niillekin samoin kuin laitetiedostoille.

Käyttäjällä ja ryhmällä on yleensä vastine reaalimaailmassa, vaikka Ville Virtanen ja palkanlaskennan henkilökunta. Jonkin verran käytetään myös pseudokäyttäjiä kuten "mail" ja "news", joilla voidaan säädellä tarkemmin mitä jotkut ohjelmat saavat tehdä. Pseudoryhmiä ovat esimerkiksi yllä näkyvät "disk" ja "lp".

Kovat ja symboliset linkit

Kova linkki on toinen nimi samalle tiedostolle. Sen oikeuksien, omistajan tai ryhmän muuttaminen muuttaa vastaavasti alkuperäistä tiedostoa. Symbolisen linkin oikeudet ovat aina kaikki-kaikille, mutta oikeudet tarkistetaan linkin kohteesta. Symbolisella linkillä voi olla eri omistaja ja ryhmä kuin alkuperäisellä tiedostolla. Esimerkki:

[aku@kone tmp]$ echo "moi" > kirje.txt
[aku@kone tmp]$ ln kirje.txt  kovalinkki

[aku@kone tmp]$ ln -s kirje.txt symbolinkki
[aku@kone tmp]$ ls -l kirje.txt kovalinkki symbolinkki
-rw-rw-r--    2 aku     aku            4 syys   5 11:31 kirje.txt
-rw-rw-r--    2 aku     aku            4 syys   5 11:31 kovalinkki
lrwxrwxrwx    1 aku     aku            9 syys   5 11:31 symbolinkki -> kirje.txt
[aku@kone tmp]$ chmod g-w kovalinkki
[aku@kone tmp]$ chgrp ankat kovalinkki
[aku@kone tmp]$ chgrp miehet symbolinkki

[aku@kone tmp]$ ls -l kirje.txt kovalinkki symbolinkki
-rw-r--r--    2 aku     ankat          4 syys   5 11:31 kirje.txt
-rw-r--r--    2 aku     ankat          4 syys   5 11:31 kovalinkki
lrwxrwxrwx    1 aku     miehet         9 syys   5 11:31 symbolinkki -> kirje.txt

Tiedostojärjestelmän on tuettava oikeuksia

Jotta käyttöoikeuksia voidaan rajoittaa, pitää tiedostojärjestelmän tukea sitä. Esimerkiksi MS-DOSin käyttämä FAT ei tue. mount-komennolla on kuitenkin mahdollista kertoa mitä FAT-osion tiedostojen käyttäjäksi, ryhmäksi ja oikeuksiksi halutaan. Seuraava esimerkki tuhoaa levykkeen sisällön:

[root@kone root]# mkfs.vfat /dev/fd0

mkfs.vfat 2.7 (14 Feb 2001)
[root@kone root]# mount -t vfat -o uid=aku,gid=ankat,umask=027 /dev/fd0  /mnt/floppy/
[root@kone root]# echo "testi" > /mnt/floppy/test.txt
[root@kone root]# ls -l /mnt/floppy/
total 1
-rwxr-x---    1 aku     ankat          6 syys   4 21:39 test.txt

[root@kone root]# umount /mnt/floppy/
[root@kone root]# mount -t vfat -o uid=iines,umask=007 /dev/fd0  /mnt/floppy/
[root@kone root]# ls -l /mnt/floppy/
total 1
-rwxrwx---    1 iines   root           6 syys   4 21:39 test.txt

[root@kone root]# umount /mnt/floppy/

Ensin siis liitettiin /dev/fd0 hakemistorakenteeseen niin, että kaikki sen tiedostot saivat käyttäjän aku, ryhmän ankat ja tietyt oikeudet. Kun /dev/fd0 irrotettiin ja liitettiin uudelleen eri valitsimilla, niin tiedostolla näkyi eri omistaja ja ryhmä. Tämä osoittaa, että FAT-osiolle ei todellakaan tallenneta tiedoston oikeuksia, ryhmää ja omistajaa.

Oletusarvoisesti mount-komento ottaa sen käyttäjän ja ryhmän joka komentoa käyttää ja oikeudet voimassa olevasta umask-arvosta.

Tarkkaan ottaen sekä tiedostojärjestelmän että sitä vastaavan ajurin pitää tukea oikeuksia. Esimerkiksi Windows NT:n käyttämä NTFS tukee oikeuksia pitkälti Linuxin tapaan, mutta ajuri ei.

Käyttörajoitusten rajat

Se, että Aku ei voi lukea Iineksen tiedostoja, johtuu vain siitä että Linuxin ydin estää sen. Tiedostoja ei silti ole mitenkään salattu, ja ne voidaan lukea esimerkiksi käynnistämällä kone levykkeeltä, jossa on Linux, jonka rootin salasana tiedetään.

Todellisuudessa tiedostojärjestelmä ei talleta merkkijonoa "aku" vaan esimerkiksi luvun 504. Lukua vastaava käyttäjätunnus haetaan tiedostosta /etc/passwd. Samoin ryhmä tallennetaan lukuna, ja vastaava selväkielinen nimi löytyy tiedostosta /etc/group. Tällä on merkitystä silloin, kun kiintolevy siirretään toiseen koneeseen tai samaa levyosiota käytetään saman koneen kahdesta täysin erillisestä Linux-asennuksesta käsin.

mount-komennon eräät valitsimet ohittavat oikeudet

mount-komennon -r -valitsin liittää tiedostojärjestelmän ilman kirjoitusoikeutta. Komennon -o -valitsimella voidaan lisäksi valita optio noexec, jolloin ohjelmatiedostoja ei voi suorittaa, tai nosuid, jolloin setuid ja setgid -oikeudet jätetään huomiotta. Otetaan esimerkki, joka jälleen tuhoaa levykkeen sisällön. Ensin tehdään korpulle ext2-tiedostojärjestelmä ja siirretään sinne pari aiemmin luotua tiedostoa:

[root@kone root]# mkfs.ext2 /dev/fd0
mke2fs 1.23, 15-Aug-2001 for EXT2 FS 0.5b, 95/08/09
 . . .
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@kone root]# mount -t ext2 /dev/fd0 /mnt/floppy/
[root@kone root]# cp /tmp/tulosta /mnt/floppy/
[root@kone root]# cp /tmp/tyohak /mnt/floppy/
[root@kone root]# cp /tmp/akun-teksti /mnt/floppy/

[root@kone root]# chown aku.aku /mnt/floppy/akun-teksti
[root@kone root]# chmod u=rw,go= /mnt/floppy/akun-teksti
[root@kone root]# chmod a=rx /mnt/floppy/tyohak
[root@kone root]# chown aku.aku /mnt/floppy/tulosta
[root@kone root]# chmod u=rxs,go=rx /mnt/floppy/tulosta
[root@kone root]# ls -l /mnt/floppy/

total 44
-rw-------    1 aku     aku            4 syys   4 22:15 akun-teksti
drwxr-xr-x    2 root    root       12288 syys   4 22:08 lost+found
-r-xr-xr-x    1 root    root       13715 syys   4 22:13 tyohak
-r-sr-xr-x    1 aku     aku        15341 syys   4 22:10 tulosta
[root@kone root]# umount /mnt/floppy

Kokeillaan ensin estää kirjoitus ja ohjelmien suorittaminen:

[root@kone root]# mount -r -t ext2 -o noexec /dev/fd0 /mnt/floppy/

[aku@kone floppy]$ echo "Jee" > akun-teksti
bash: akun-teksti: Read-only file system
[aku@kone floppy]$ ./tulosta
bash: ./tulosta: Permission denied

Ja sitten katsotaan vielä miten nosuid vaikuttaa. Vaihda ensin akun työhakemistoksi joku muu kuin /mnt/floppy, jotta voit irrottaa korpun hakemistopuusta.

[root@kone root]# umount /mnt/floppy/
[root@kone root]# mount -t ext2 -o nosuid /dev/fd0 /mnt/floppy/

[iines@kone floppy]$ ./tyohak
/mnt/floppy
[iines@kone floppy]$ ./tulosta jee

Virhe. Tiedostoa ei löydy tai ei voi lukea.

Viimeisen esimerkin tulosta-ohjelma kyllä suoritetaan, mutta komennon setuid-oikeus ei vaikuta mitenkään, ja tunnuksella iines ei ole oikeutta lukea tiedostoa /tmp/aku/jee. Tarkista itse kokeilemalla, että -o nosuid estää myös setgid-oikeuden toiminnan.

Huomaa, että tiedostolistaus näyttää kyllä setuid-oikeuden ja muutkin oikeudet aivan normaalisti, ja näitä oikeuksia voi myös muuttaa (paitsi jos käytettiin -r -valitsinta mount-komennossa), mutta niillä ei ole mitään vaikutusta.

-o nosuid vaikuttaa vain tiedostoihin. Hakemistoihin (joilla setgid tarkoitti aivan muuta kuin tiedostoilla) ei nosuidilla ole mitään vaikutusta.

Oikeasti noexec ei juurikaan estä ohjelmien suorittamista. Käyttäjä voi kopioida ohjelman jollekin laitteelle jossa -o noexec -vipua ei ole käytetty, ja vaikkei tämä onnistuisi voi käyttäjä sanoa /lib/ld-linux.so.2 ohjelma, jolloin ld-linux.so.2 ajaa ohjelman. Sitäpaitsi ohjelmien ajamisen rajoittaminen ei ole muutenkaan Linuxissa luontevaa, Linuxin tapa on rajoittaa ohjelmien käyttämien tiedostojen ja hakemistojen oikeuksia.

Loppusiivous

Käyttäjät saa poistettua userdel-komennolla. Sano roottina
userdel -r aku
jolloin käyttäjätunnuksen lisäksi poistuu myös akun kotihakemisto. groupdel ankat poistaa ankat -ryhmän. Muista poistaa myös ryhmät aku, iines ja mikki, jotka ovat ryhmiä joissa on vain vastaava käyttäjä itse. /tmp -hakemisto siivoutuu automaattisesti seuraavassa bootissa.

(Päivitys) ACL:t ja SELinux

Tämän kirjoittamisen jälkeen Linuxiin on tullut ACL-tuki ja SELinux. Kumpikin ansaitsisi oman juttunsa, tässä oleva selitys on erittäin pintapuolinen.

ACL on lyhenne sanoista Access Control List, ja sen avulla esim. Aku voi sanoa "Anna Iineksen lukea tämä tiedosto" ilman että ylläpitäjän tarvitsee tehdä Akua ja Iinestä varten ryhmää. Tiedoston johon jokin ACL-määritys vaikuttaa tunnistaa plus-merkistä:

[aku@kone tmp]$ ls -l kirje.txt
-rw-------+   1 aku     aku           10 syys  15 15:23 kirje.txt
ACL:stä saat lisätietoa täältä.

SELinux ('Security Enhanced Linux') mahdollistaa ohjelmakohtaisen käyttöoikeuksien hallinnan. Esimerkiksi WWW-sivuja jakava palvelinohjelma ei silloin välttämättä pääse käsiksi tiedostoon /etc/passwd, vaikka tuon tiedoston oikeudet sallivatkin kaikille lukuoikeuden. SELinuxin toiminnan tunnistaa yleensä /var/log/messages -tiedoston sisältämistä "avc denied" -merkinnöistä. Lisätietoja ks. SELinuxin pääsivu.

Tiivistelmä opitusta

Jokaisella tiedostolla on omistaja ja ryhmä. Omistajan voi vaihtaa vain root komennolla chown uusiomistaja tiedostonnimi. Ryhmän voi vaihtaa root miksi vain ja tiedoston omistaja ryhmäksi johon itse kuuluu komennolla chgrp uusiryhma tiedostonnimi.

Jokaisella tiedostolla on samat r,w ja x-oikeudet omistajalle, ryhmälle ja muille. r tarkoittaa lukuoikeutta, w kirjoitusoikeutta ja x suoritusoikeutta. Hakemistoilla r tarkoittaa oikeutta listata tiedoston sisältö, x oikeutta käsitellä hakemistossa olevia tiedostoja ja w oikeutta lisätä ja poistaa tiedostoja hakemistossa.

Oikeuksia muutetaan chmod-komennolla. Komennon muoto on neliosainen: mitkä käyttäjät, mitä tehdään, mitkä oikeudet ja mikä tiedosto. Esimerkiksi chmod g+w tiedostonnimi tarkoittaa ryhmälle (g) lisää (+) kirjoitusoikeus (w). Samalla kertaa voidaan asettaa enemmänkin oikeuksia, esim. chmod u=rwx,g+r,o-rw asettaa kaikki oikeudet omistajalle, lisää ryhmälle lukuoikeudet ja poistaa kaikilta muilta luku- ja kirjoitusoikeuden.

umask määrää mitä oikeuksia luotavat tiedostot eivät saa. Se koostuu kolmesta numerosta väliltä 0..7. r-oikeus tarkoittaa lukua 4, w-oikeus lukua 2 ja x-oikeus lukua 1, ja näiden summana saadaan haluttu luku. Umaskin ensimmäinen numero tarkoittaa omistajaa, toinen ryhmää ja kolmas muita. Jokainen umaskin numeroon koodattu oikeus ei tule luotavan tiedoston oikeudeksi. Sopiva umask on esimerkiksi 027.

chown, chgrp ja chmod tuntevat --recursive -valitsimen, jolla komentojen vaikutus ulotetaan koskemaan kokonaista hakemistorakennetta.

Ohjelmatiedostolle voidaan asettaa setuid-oikeus, jolloin tiedosto ajetaan aina omistajan käyttöoikeuksilla. setgid-oikeus vastaavasti tarkoittaa, että tiedosto ajetaan ryhmän oikeuksilla. Nämä asetetaan komennolla chmod u+s tiedostonnimi ja chmod g+s tiedostonnimi. setuid ja setgid voivat ovat vaarallisia oikeuksia virheellisesti toimivissa ohjelmissa, erityisesti jos tiedoston omistaa root.

Hakemistolla setgid-oikeus tarkoittaa, että kaikki hakemistoon luotavat tiedostot saavat ryhmäkseen hakemiston ryhmän. Ns. tahmabitti hakemistolla tarkoittaa, että hakemistosta saa poistaa vain itse omistamiaan tiedostoja. Tahmabitti asetetaan komennolla chmod o+t hakemistonnimi.

mount-komennon sopivilla valitsimilla voidaan estää tiedostojen muokkaaminen, jolloin tiedostojen ja hakemistojen w-oikeus ei vaikuta mitenkään. Myös ohjelmien setuid- ja setgid-oikeudet voidaan jättää huomiotta sopivilla valitsimilla mount-komennossa, samoin tiedostojen suoritusoikeus kokonaan.

Kaikki tiedostojärjestelmät eivät tue käyttäjiä, ryhmiä ja oikeuksia.

Linuxissa laitteet näkyvät erityisinä laitetiedostoina. Näilläkin on omistaja ja ryhmä sekä luku- ja kirjoitusoikeus tavallisten tiedostojen tapaan.

Harjoitustehtävä

Jos root poistuu koneen vierestä ja Aku saa minuutin ajan käyttää rootin komentotulkkia, niin mitä olennaisesti erilaisia tapoja Akulla on varmistaa, että hän voi myöhemmin lukea Iineksen tiedostoja aina halutessaan?


Kirjoittaja: Jori Mäntysalo

Kopiointi: Tämä kirjoitus on vapaa. Kirjoitusta saa levittää ja muuttaa vapaasti sillä ehdolla, että muutosten tekijä ilmoitetaan muutetussa versiossa selkeästi. Kirjoitelman tekijä on mainittava kirjoitelmasta ja sen johdannaisteoksista tehdyissä teoskappaleissa, jollei hän sitä erikseen kiellä.

Kiitokset kommenteista: Ari Saastamoinen