Failiõigused Linuxis
Kui võrrelda erinevate operatsioonisüsteemide turvalisust, siis Windows on läbi aegade olnud Linuxist kehvem. Enamik 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 võimas ja paindlik. Kurivara arendatakse eeldatavasti Windowsile rohkem, sest eelkõige tavakasutajaid 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
Failiõiguste tundma õppimiseks peate kõigepealt oskama luua uusi kasutajaid ning gruppe. Uue kasutaja loomiseks kasutatav käsk:
$ 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
). Arutage sõbraga (Google) miks -a
vajalik on.
Kasutajat saab gruppi lisada ka käsuga
$ sudo adduser <kasutaja> <grupp>
Kontrollida, millistesse 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äited: su peeter
, su - peeter
ja sudo su - peeter
. Arutage sõbraga (Google), mis on eelnevate käskude erinevus, et teil endal oleks hõlpsam katsetada järgnevas materjalis esinevaid näiteid.
NB! Tutvu Unixi failiõigustega. See materjal annab ülevaate, kuidas failiõiguste süsteem Unixi-põhistes operatsioonisüsteemides toimib ning kuidas seda kasutada.
Õigus | Bitt | Täheline | Tähendus failile | Tähendus kataloogile |
---|---|---|---|---|
Read | 4 | r | lugeda/kopeerida | saab näha nimekirja kataloogis olevatest failidest (ls) |
Write | 2 | w | muuta faili sisu | kataloogi uute faile/kataloogide loomine, kustutamine, liigutamine ja ümbernimetamine |
Execute | 1 | x | käivitada programmifaili | siseneda või läbida kataloogi (misiganes objekti poole pöördumine sealt kataloogist) (cd) |
Tehke katsetusi (looge uusi faile ja katalooge, andke neile erinevate kasutajatega õigusi).
$ 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 käsuga chmod
loodud kaustadele ja failidele erinevaid õigusi ning katsetage, mida teha saate. Ideaalis võiks failidel olla nii vähe õigusi, kui võimalik, kuid kasutajad peaksid siiski omama õigusi vajalike failidega opereerida. Järgnevalt oleme teile püstitanud levinud Linuxi failiõiguste ülesande: milliseid õigusi on minimaalselt vaja mingi tegevuse sooritamiseks? Vihje: Lugege juhendis viidatud materjale või otsige internetist infot juurde ja veenduge katseliselt, et teil ei ole antud järgmise ülesande lahendamiseks rohkem õigusi kui vaja.
- Missuguseid õigusi (r,w,x) on Unixis omanikul (u) minimaalselt vaja (
d
- directory,f
- fail) (Grupiõigusi (g) ja ülejäänute others (o) õigusi ei ole siin vaja määrata, ainult kausta/faili omaniku (user) õigusi.)- a) kataloogile
/d
faili/d/f
lugemiseks? - b) failile
/d/f
faili/d/f
lugemiseks? - c) kataloogile
/d
faili/d/f
kustutamiseks? - d) failile
/d/f
faili/d/f
kustutamiseks?
- a) kataloogile
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
$ chmod a=x Kaust3/skript.sh
Nüüd enam programm EI OLE käivitatav ilma interpretaatorit eraldi näitamata
$ Kaust3/skript.sh
- Miks
chmod a=x skriptifail
ei ole piisav õigus shelli skriptifaili käivitamiseks? Millist õigust selleks lisaks käivitamisele veel vaja läheb? Põhjendage lühidalt.
umask
Eespool saite lugeda selle kohta, kuidas failiõigusi muuta. Tekib küsimus, 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 sellest aru saada ehk võtmega umask -S
. Uurige erinevate kasutajate "maske".
Seejärel andke oma tavakasutajale umask 037
. Tekitage faile, mida märkate?
Uurige ka failide ja kasutajate id kasutajanimi
gruppe. Miks on igal kasutajal omanimeline grupp? (Vastake viki lehele.)
Muutke umask
tagasi vaikeväärtuseks umask 0002
(peeter) või umask 0022
(tavakasutaja) sõltuvalt kasutajast.
chown
Praktikumi alguses toimetasite kasutajate ja kasutajagruppidega. Lisaks õigustele on failide puhul olulised ka omanik ja omanikgrupp. Need määravad ära, missugust osa chmod
i abil antud pääsuõigustes kontrollitakse. Faili omanikku ja omanikgruppi saab muuta chown
-käsuga. Lisainfot ja süntaksit uurige man chown
-käsuga.
- Looge uus kaust nimega majasiseseks-kasutamiseks:
mkdir majasiseseks-kasutamiseks
. - Liikuge eelmises punktis loodud kausta:
cd majasiseseks-kasutamiseks
. - Looge mõni uus fail oma tavakasutajana (
nano uusfail.txt
) ja lisage sinna vabalt valitud paar lauset teksti. - Käsuga
ls -la
uurige, kes on faili omanik ja mis on faili grupp. - Käsuga
cat uusfail.txt
proovige faili lugeda. Kas õnnestus? - Käsuga
chmod a= uusfail.txt
eemaldame faililt kõik õigused. - Käsuga
cat uusfail.txt
proovige faili lugeda. Kas õnnestus? - Pange faili omanikuks mõni teine kasutaja (näiteks peeter:
sudo chown peeter:majasisene uusfail.txt
). Uurige, mis muutusls -la
väljundis. - Kausta majasiseseks-kasutamiseks omanikuks märkige root ja grupiks majasisesene:
sudo chown root:majasisene .
(PS! "." tähistab Linuxis aktiivset kataloogi, ".." ülemkataloogi.) - Lisage ennast gruppi
majasisene
(sudo adduser kasutaja grupp).- Kontrollige käsuga
id
. (PS! Väljundis peaksite nägema gruppi majasisene.) - Enamasti on vajalik välja logida ja uuesti sisse, et grupiõigused uueneksid. Teatud tingimustel tuleb teha kogu masina restart (praktikumijuhendajal näiteks).
- Kontrollige käsuga
- Millised on minimaalsed õigused (rwx), mis on vajalikud teie tavakasutajal (kuulub gruppi majasisene) (mitte
root
- võipeeter
-kasutajal, kausta ja faili omanikud) failiuusfail.txt
sisu kuvamiseks? Esitage ekraanivaade käskudeid
,ls -la
jacat uusfail.txt
väljundist, tõestamaks lahendust.
Programmide käivitamine: setuid- ja setgid-failid
Mõnikord võib tekkida vajadus anda protsessidele rohkem õigusi kui kasutajatele.
- Looge endale uus kasutaja nimega
opetaja
, seejärelsudo su - opetaja
. - Edasised käsud käivitage
opetaja
kasutaja alt. Kõigepealt tehke kataloog nimegaklass
.
$ mkdir klass
See kataloog olgu avalikkusele loetav (andke vastavad õigused käsuga chmod
).
- Looge kataloogi
klass
fail nimegahinded.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 ...
- Seejärel andke failile õigused nii, et tulemus oleks selline:
$ ls -l -rw------- 1 opetaja opetaja 124 okt 1 09:10 hinded.txt
Seega faili saab lugeda ainult opetaja
kasutaja.
- Tehke kataloogi
klass
uus fail nimegahindedJukul.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 kompileerige programm:
$ 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 olema käivitamise õigus, kontrollige ls
käsuga (kompileeritud programmidele paneb kompilaator ise käivitamisõiguse):
$ ls -la hindedJukul $ chmod a+x hindedJukul
Kui nüüd käivitate selle programmi opetaja
kasutajana –
$ ./hindedJukul
– siis te jõuate tulemuseni, sest programm, joostes opetaja
kasutajana, saab lugeda faili hinded.txt
.
- Tehke uus kasutaja nimega
jukuisa
. Logige temana sisse (su jukuisa
) ning mingeopetaja
kasutaja kataloogiklass
(/home/opetaja/klass
). Arvatavasti te ei saa ilma opetaja kaustaõigusi muutmata ligi, nii et andke käsugachmod o+x /home/opetaja
teistele kasutatele ligipääs õpetaja kaustadele ja failidele, kui nad teavad täisteed. Proovige uuesti kaustaleklass
ligi saada käsugacd /home/opetaja/klass
ja seejärells
. Nagu te aru saate, siisjukuisa
on sellehinded.txt
i jaoks other ning seetõttu ei ole tal võimalik faili lugeda. Proovigehinded.txt
i lugeda kasutajana 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
.
- Määrata faili omaniku poolt programmile
hindedJukul
setuid-õigused.
Vahetage kasutaja tagasi opetaja
(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 kuvatõmmis tulemusest, kus oleks näha faili hinded.txt
õigused ja jukuisa käivituskäsk koos väljundiga, ning lisage see oma vikilehele. 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-i või setgid-i kasutamine võib vähendada süsteemi turvalisust? Kui jah, siis kuidas?
Sticky bit
Kataloogidele saab määrata lisaks veel ka sticky bitti. Tehke kasutajaga opetaja
kataloog yhiskaust
ning andke kõigile kasutajatele õigused sellele kataloogile. Trükkige:
$ sudo su - opetaja $ mkdir /tmp/yhiskaust $ chmod 777 /tmp/yhiskaust $ chmod +t /tmp/yhiskaust
Uurige tulemust käsuga ls -l
, mida märkate?
Looge sinna nüüd faile (erinevate kasutajatena) ja üritage neid seejärel kustutada teiste kasutajatega.
- Kirjutage oma vikilehele kõik kasutajad, kes saavad
sticky bit
-õigustegayhiskaust
-kataloogist nüüdpeeter
-kasutaja loodud faile kustutada. (Õige vastus sisaldab vähemalt 3 eri kasutajat).
ACL
ACL (Access Control List) võimaldab teha veelgi paindlikumalt konfigureeritavat õigustejagamist. Selle kasutamiseks peab failisüsteem olema monteeritud "acl"-lipuga, kasutamaks ACLi tuge. Meie kasutatava Ubuntu 20.04 sees see nii juba vaikimisi on ja lisategevusi pole vaja.
- Tekitage uus grupp nimega
direktor
. - Lisage kasutaja
peeter
gruppi direktor:sudo adduser peeter direktor
.- Kontrollige tulemust
id peeter
-käsuga.
- Kontrollige tulemust
- 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 käsurealt sisse kasutajaga
peeter
ning muutkeJuku
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 faililthinded.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-2 $ sudo chattr +i testfail-2 $ lsattr testfail-2 $ rm testfail-2 $ sudo rm testfail-2
# Kes saab chattr +i
-parameetriga faili sisu modifitseerida (kirjutada)? Milliste käskudega saate kustutada testfail-2
-nimelise faili (ehk kuidas siiski kustutada +i
-parameetriga faili).
Tulemus
Praktikumi vastused tuleb panna Githubi dokumenti nimega praks5_failioigused.md. Soovitame käesoleva praktikumi lahenduse esitamiseks kasutada Githubi, sest praktikumi aruanne on pikem ja IT-tudengitel on dokumentatsiooni koostamine vajalik oskus. Github ja viki on kaks enimkasutavat keskkonda erinevate IT-juhendite koostamiseks ja jagamiseks. Juhend Githubis konto ja repo tegemiseks ning kodutöö esitamiseks – https://github.com/AndresNamm/opsys_Namm/blob/main/INTRO.md (privaatsed repod peavad olema jagatud ka aine õppejõududega).
NB! Need, kes ei soovi Githubi kontot luua, võivad esitada praktikumi aruande (lahenduse) ka Osalejate omanimelisel alamlehel, mis on korrektselt vormistatud. NB! Courses-viki redigeerimisega võib suure koormuse hetkedel esineda probleeme.
Githubis/Vikilehel tuleb vastata järgmistele küsimustele.
- Missuguseid õigusi (r,w,x) on Unixis omanikul minimaalselt vaja (
d
- directory,f
- fail)- a) kataloogile
/d
faili/d/f
lugemiseks? - b) failile
/d/f
faili/d/f
lugemiseks? - c) kataloogile
/d
faili/d/f
kustutamiseks? - d) failile
/d/f
faili/d/f
kustutamiseks?
- a) kataloogile
- Miks
chmod a=x skriptifail
ei ole piisav õigus shelli skriptifaili käivitamiseks? Millist õigust shelli skripti käivitamiseks lisaks käivitamisõigusele veel vaja läheb? Põhjendage lühidalt. - Milleks on kasulik see, et igal kasutajal on omanimeline grupp? (Teema: umask lõpp)
- Millised on minimaalsed õigused (rwx), mis on vajalikud teie tavakasutajal (kuulub gruppi majasisene) (mitte
root
- võipeeter
-kasutajal, kausta ja faili omanikud) failiuusfail.txt
sisu kuvamiseks? Esitage ekraanivaade käskudeid
,ls -la
jacat uusfail.txt
väljundist, tõestamaks lahendust. - Tehke kuvatõmmis tulemusest, kus oleks näha faili
hinded.txt
õigused ja jukuisa käivituskäsk koos väljundiga, ning lisage see oma vikilehele. (Teema:setuid
jasetgid
.) - Kas
setuid
i võisetgid
i kasutamine võib vähendada süsteemi turvalisust? KuiJAH
, siis kuidas? KuiEI
, siis miks ei vähenda? - Kirjutage oma vikilehele kõik kasutajad, kes saavad
sticky bit
-õigustegayhiskaust
-kataloogist nüüdpeeter
-kasutaja loodud faile kustutada. (Teema: sticky bit) - Uurige käsuga
ls -la
failihinded.txt
õigusi - mida märkate? Seejärel uurige õigusi täpsemalt, kasutades käskugetfacl
, ning kopeerige see tulemus oma vikilehele. (teema: ACL) - Kes saab
chattr +i
-parameetriga faili sisu modifitseerida (kirjutada)? Milliste käskudega saate kustutadatestfail-2
-nimelise+i
-parameetriga faili?
Kui teil Github või viki lehekülg valmis on, esitage kommentaar Githubi URLiga (privaatsed repod peavad olema jagatud ka aine õppejõududega) (või Courses-viki link) koos history -failiga. Näiteks käsk history >> history.txt
genereerib ilusa faili, mis teie õppimist hästi illustreerib.
(Tähtaeg 2 nädalat)