Arvutiteaduse instituut
  1. Kursused
  2. 2018/19 sügis
  3. Operatsioonisüsteemid (LTAT.06.001)
EN
Logi sisse

Operatsioonisüsteemid 2018/19 sügis

  • Pealeht
  • Loengud
  • Praktikumid
  • Kodutööd

Failiõigused Linuxis

Kui võrrelda erinevate operatsioonisüsteemide turvalisust, siis Windows on läbi aegade olnud Linuxist kehvem. Enamus viiruseid tehti vanasti just Windowsile ja vaid üksikud Linuxile. Üks selle põhjusi peitub Linuxi ja Windowsi erinevas ülesehituses.
Windows loodi algselt kui üksikkasutajasüsteem, kus kasutajal oli õigus teha kõike. Alles hilisemates versioonides eristati administraator tavakasutajatest, kuid nagu tarkvaras ikka, siis hiljem fundamentaalseid komponente ning kasutajate juurdunud harjumusi parandada on keeruline. Ka praegu esineb veel tavakasutajale mõeldud tarkvara, mida ilma administraatoriõigusteta installeerida ei saa.
Unix seevastu arendatigi välja kui mitmekasutajasüsteem, kus ülemkasutaja (root) eristus selgelt tavakasutajatest, ja Linux kasutab Unixi turvamudelit.
Samas on Windowsi tänapäevane turvamudel alates WIndows NT-st samuti piisavalt võimas ja paindlik ning kurivara on mõtet arendada Windowsile rohkem lihtsalt sellepärast, et kasutajaid on palju rohkem. Tänapäevane kurivara igasugustes operatsioonisüsteemides on pigem Trooja hobused, mille kasutaja ise sisse laseb või mis pääsevad sisse rakenduste turvaukude, mitte puuduliku õiguste süsteemi tõttu.
See praktikum tutvustabki Linuxi võimalusterohket failide pääsuõiguste süsteemi.

Lühike ülevaatlik dokument LINUXi failiõigustest PDF

Ülevaade Unixi failiõigustest

Et üldse failiõigusi tundma õppida, peate kõigepealt oskama luua uusi kasutajaid ning gruppe. Uue kasutaja loomiseks kasutage näiteks käsku

$ sudo adduser peeter

Uusi gruppe saab luua käsuga

$ sudo addgroup majasisene
$ sudo addgroup ylisalajane

Gruppidesse kasutajaid saab lisada käsuga

$ sudo usermod -a -G majasisene,ylisalajane peeter

Kindlasti uurige -a -G võtme kohta (man usermod). Lisage vikilehele selgitus, miks -a vajalik on? Kasutajat saab gruppi lisada ka käsuga

$ sudo adduser <kasutaja> <grupp>

Kontrollida, kuhu gruppidesse kasutaja kuulub, saate järgmise käsuga

$ id peeter

Tehke endale mõned kasutajad ning grupid ning logige uute kasutajatena erinevates terminaliakendes sisse (kasutaja vahetamise näide: su peeter), et teil endal oleks hõlpsam katsetada järgnevas materjalis esinevaid näiteid.
Tutvu Unixi failiõigustega. See materjal annab ülevaate, et kuidas Unixi-põhistes operatsioonisüsteemides failiõiguste süsteem toimib ning kuidas seda kasutada.

ÕigusBittTähendus failileTähendus kataloogile
Readrlugeda/kopeeridanäha sisu nimekirja (ls)
Writewmuuta faili sisukataloogi uute faile/kataloogide loomine, kustutamine ja liigutamine ning ümber nimetamine
Executexkäivitada programmifailifailisiseneda kataloogi (misiganes objekti poole pöördumine sealt kataloogist)

Tehke katsetusi (looge uusi faile ja katalooge, andke neile õigusi erinevate kasutajatega).

$ mkdir Kaust1 Kaust2 Kaust3
$ touch Kaust1/k1a1.txt Kaust1/k1a2.txt Kaust1/k1a3.txt Kaust2/k2a1.txt Kaust2/k2a2.txt Kaust2/k2a3.txt Kaust3/k3a1.txt Kaust3/k3a2.txt Kaust3/k3a3.txt
$ echo 'echo "Skript töötab!"' > Kaust3/skript.sh
$ sh Kaust3/skript.sh

Andke nüüd chmod käsuga erinevaid õigusi loodud kaustadele ja failidele ning katsetage, mida teha saate.

Eelnevalt loodud skripti saate käivitada käsuga sh skript.sh. Järgnevalt andke loodud skriptile ainult käivitusõigus (esmalt vaadake, kus asute käsuga pwd).

$ chmod a=x Kaust3/skript.sh

Nüüd võiks programm olla käivitatav ilma interpretaatorit eraldi näitamata, lihtsalt

$ Kaust3/skript.sh

Miks chmod a=x skriptifail ei ole piisav õigus shelli skriptifaili käivitamiseks? Millist õigust lisaks käivitamisele veel vaja läheb skriptifaili käivitamiseks?

umask

Eespool saite lugeda selle kohta, kuidas failiõigusi muuta. Tekib küsimus, et millised õigused määratakse vaikimisi failidele? See on kasutajapõhine ja selleks, et uurida, milline "mask" on parajasti kasutajal, kasutage käsku

$ umask

Lihtsam on ehk sellest aru saada võtmega -S. Uurige erinevate kasutajate "maske".
Seejärel andke oma tavakasutajale umask 007. Tekitage faile, mida märkate?
Uurige ka failide ja kasutajate id kasutajanimi gruppe. Miks on igal kasutajal omanimeline grupp? (vastake viki lehele)

chown

Praktikumi alguses toimetasite kasutajate ja kasutajagruppidega. Lisaks õigustele on failide puhul olulised ka omanik ja omanikgrupp. Need määravad ära, missugust osa chmod abil antud pääsuõiugustes kontrollitakse. Faili omanikku ja omanikgruppi saab muuta chown käsklusega. Lisainfot ja süntaksit uurige man chown käsklusega. Looge mõni uus fail ning pange faili omanikuks mõni teine kasutaja. Uurige, mis muutus ls -l väljundis.

Programmide käivitamine: setuid ja setgid failid

Mõnikord võib tekkida vajadus anda protsessidele rohkem õigusi kui kasutajatele.

  1. Edasised käsud käivitage oma tavakasutaja alt. Kõigepealt tehke kataloog nimega "klass".
$ mkdir klass

See kataloog olgu avalikkusele loetav (andke vastavad õigused käsuga chmod).

  1. Looge kataloogi klass fail "hinded.txt" ning lisage sinna järgmised read
Juku matemaatika 3-
Mari matemaatika 5+
Juku kehaline kasvatus 5
Mari kehaline kasvatus 4
Juku eesti keel 3
Mari eesti keel 5
...
  1. Seejärel andke failile õigused nii, et tulemus oleks selline (eesnimi = teie põhikasutaja)
$ ls -l
-rw------- 1 eesnimi eesnimi  124 okt    2 09:10 hinded.txt

Seega faili saab lugeda ainult teie tavakasutaja.

  1. Tehke kataloogi klass uus fail nimega hindedJukul.c, kuhu kopeerige alljärgnev sisu (C lähtekood).
#include <stdio.h>
#include <string.h>

int main()
{
        FILE *myfile;
        char buf[1000];

        myfile = fopen("hinded.txt", "r");
        if (!myfile) {
                perror("fopen()");
                printf("Ei leia faili hinded.txt või siis pole kasutajal õigust seda lugeda!");
                return 1;
        }

        while (fgets(buf, 1000, myfile) != NULL)
                if (strstr(buf, "Juku"))
                        printf("%s", buf);

        fclose(myfile);
        return 0;
}

seejärel paigaldage kompilaator (kui seda juba pole) ning kompileerige programm

$ sudo apt install gcc
$ gcc hindedJukul.c -o hindedJukul

Kataloogi klass tekkis nüüd binaarne fail nimega hindedJukul (Attach:hindedJukul). See programm võtab samas kaustas olevast failist hinded.txt välja Juku hinded ning väljastab need ekraanile.

Selleks, et tekkinud programm oleks käivitatav, peab tal eksisteerima käivitamise õigus, kontrollige (kompileeritud programmidele paneb kompilaator ise käivitamisõiguse):

$ ls -la hindedJukul
$ chmod a+x hindedJukul

Kui nüüd käivitate selle programmi oma tavakasutajana

$ ./hindedJukul

siis te jõuate tulemuseni, sest programm, joostes tavakasutajana, saab lugeda faili hinded.txt.

  1. Tehke uus kasutaja nimega "jukuisa". Logige temana sisse ning minge algse kasutaha kataloogi "klass". Nagu te aru saate, siis jukuisa on selle "hinded.txt" jaoks "other" ning selle tõttu ei ole tal võimalik faili lugeda. Proovige hinded.txt lugeda kasutajana jukuisa (su jukuisa) cat hinded.txt. Samuti vaadake mis veateate annab ./hindedJukul

Programm käivitub kasutajana "jukuisa" ning faili hinded.txt lugemiseks avamisel saab ta vea, et pole ligipääsu failile hinded.txt.

  1. Määrata faili omaniku poolt programmile "hindedJukul" setuid õigused

Vahetage kasutaja tagasi hinded.txt looja õigusteks ja sisestage järgmine käsk.

$ chmod u+s hindedJukul

Uurige tulemust käsuga ls -l, mida märkate? Kui te nüüd käivitate selle programmi jälle jukuisa (su jukuisa) õigustes, siis seatakse protsessi userid skripti omaniku omaks ning programm saab edukalt faili hinded.txt lugeda.
Tehke screenshot tulemusest, kus oleks näha hinded.txt failiõigused ja jukuisa käivituskäsk koos väljundiga ning lisage see oma viki lehele. Milleks on vaja setuid õigust?

Sarnaselt setuid-ga toimib failidel ka setgid (lihtsalt siis määratakse programmi töö ajaks teine grupp).
setgid õigust saab kasutada ka kataloogi puhul. Kui see on seatud, siis suvaline kasutaja, kellel on õigus teha faile sinna kataloogi, tekitab sinna faile, mille grupp on sama, mis kataloogil endal - katsetage. Kas setuid või setgid kasutamine võib vähendada süsteemi turvalisust? Kui jah, siis kuidas?

Sticky bit

Kataloogidele saab määrata lisaks veel ka sticky bitti. Tehke mingi kataloog ning andke kasutajatele õigused sellele kataloogile. Trükkige

$ chmod +t katalooginimi

Uurige tulemust käsuga ls -l, mida märkate? Looge sinna nüüd faile (erinevate kasutajatena) ja üritage neid seejärel kustutada. Kirjutage oma viki lehele kõik kasutajaid, kes saavad sellest kataloogist nüüd faile kustutada.

ACL

ACL (Access Control List) võimaldab teha veelgi paindlikumalt konfigureeritavat õigustejagamist. Selle kasutamiseks peab failisüsteem olema monteeritud "acl" lipuga, kasutamaks ACL tuge. Meil kasutatava Ubuntu 18.04 sees see nii juba vaikimisi ja lisategevusi pole vaja.

Tekitage uus grupp nimega "direktor". Lisage kasutaja peeter sellesse gruppi. Uurige faili hinded.txt acl õigusi

$ getfacl hinded.txt

Andke nüüd direktoritele rohkem õigusi failile hinded.txt

$ setfacl -m g:direktor:rw hinded.txt

Logige sisse kasutajaga peeter ning muutke Juku matemaatikahinne viieks. Kas saate seda teha?

Uurige käsuga ls -l faili hinded.txt õigusi - mida märkate? Seejärel uurige õigusi täpsemalt, kasutades käsku getfacl ning kopeerige see tulemus oma vikilehele.
Lõpuks eemaldage ACL õigused faililt hinded.txt käsuga

$ setfacl -b hinded.txt

Failisüsteemi täiendavad attribuudid

Linuxis saab kasutada käsku chattr failile täiendavate atribuutide seadistamiseks. https://en.wikipedia.org/wiki/Chattr ja https://www.tecmint.com/chattr-command-examples/

$ echo "see on oluline info" >> testfail
$ sudo chattr +i testfail
$ lsattr testfail
$ rm testfail
$ sudo rm testfail

Mis õigustega saate saab chattr +i parameetriga faili kustutada?

Tulemus

Viki lehel tule vastata järgmistele küsimustele.

  1. Missuguseid ̃oigusi (r,w,x) on Unixis omanikul minimaalselt vaja (d - directory, f - fail)
    1. kataloogile /d faili /d/f lugemiseks ning
    2. failile /d/f faili /d/f lugemiseks
    3. kataloogile /d faili /d/f kustutamiseks
    4. failile /d/f faili /d/f kustutamiseks?
  2. Milleks kasutatakse käsu usermod lippu -G koos -a'ga? (teema: ülevaade Unixi failiõigustest)
  3. Miks chmod a=x skriptifailei ole piisav õigus shelli skriptifaili käivitamiseks? Millist õigust lisaks käivitamisele veel vaja läheb shelli skripti käivitamiseks?
  4. Milleks on kasulik see, et igal kasutajal on omanimeline grupp? (teema: umask lõpp)
  5. Tehke screenshot tulemusest, kus oleks näha hinded.txt failiõigused ja jukuisa käivituskäsk koos väljundiga ning lisage see oma viki lehele. (teema: setuid ja setgid.)
  6. Kas setuid või setgid kasutamine võib vähendada süsteemi turvalisust? Kui jah, siis kuidas?
  7. Kirjutage oma viki lehele kõik kasutajaid, kes saavad sellest kataloogist nüüd faile kustutada. (teema: sticky bit)
  8. Mida teeb sticky bit?
  9. Uurige käsuga ls -l faili hinded.txt õigusi - mida märkate? Seejärel uurige õigusi täpsemalt, kasutades käsku getfacl ning kopeerige see tulemus oma vikilehele. (teema: ACL)
  10. Kes saab chattr +i parameetriga faili kustutada?

Kui teil wiki lehekülg valmis on, siis lisage meile kommentaar (koos history failiga. Näiteks käsk history >> history.txt genereerib ilusa faili, mis teie õppimist hästi illustreerib).

5. Praktikum 5 - Failiõigused Linuxis
Sellele ülesandele ei saa enam lahendusi esitada.

(Tähtaeg 2 nädalat)

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused