Failiõigused Linuxis
Kohapeal olijad palun registreerige enda praktikumis osalemine vastaval veebilehel http://cs.ut.ee/reg
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). Arutage sõbraga (google) miks on -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äited: su peeter, su - peeter ja sudo su - peeter Aruta sõbra (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, et kuidas Unixi-põhistes operatsioonisüsteemides failiõiguste süsteem toimib ning kuidas seda kasutada.
| Õigus | Bitt | Tähendus failile | Tähendus kataloogile |
|---|---|---|---|
| Read | r | lugeda/kopeerida | näha sisu nimekirja (ls) |
| Write | w | muuta faili sisu | kataloogi uute faile/kataloogide loomine, kustutamine ja liigutamine ning ümber nimetamine |
| Execute | x | käivitada programmifailifaili | siseneda 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.
- Missuguseid õigusi (r,w,x) on Unixis omanikul minimaalselt vaja (
d- directory,f- fail)- a) kataloogile
/dfaili/d/flugemiseks ning - b) failile
/d/ffaili/d/flugemiseks - c) kataloogile
/dfaili/d/fkustutamiseks - d) failile
/d/ffaili/d/fkustutamiseks?
- 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 skriptifailei ole piisav õigus shelli skriptifaili käivitamiseks? Millist õigust lisaks käivitamisele veel vaja läheb skriptifaili käivitamiseks? Põhjendage lühidalt?
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 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 abil antud pääsuõigustes kontrollitakse. Faili omanikku ja omanikgruppi saab muuta chown käsklusega. Lisainfot ja süntaksit uurige man chown käsklusega.
- 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. ls -lauurige, kes on faili omanik ja mis on faili gruppcat uusfail.txtproovige faili lugeda. kas õnnestus?chmod a= uusfail.txteemaldame faililt kõik õigusedcat uusfail.txtproovige faili lugeda. kas õnnestus?- pange faili omanikuks mõni teine kasutaja (näiteks peeter
sudo chown peeter:majasisene uusfail.txt). Uurige, mis muutusls -laväljundis. - Kausta majasiseseks-kasutamiseks omanikuks märkige root ja grupiks majasisesene
sudo chown root:majasisene .(PS! "." tähistab linuxis aktiivset kataloogi, ".."" eelmist (ülem) kataloogi. - 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 kogu masina restart (praktikumijuhendajal näiteks).
- Kontrollige käsuga
- Milliseid on minimaalsed õigused (rwx), mis on vajalikud teie tavakasutajal (kuulub gruppi majasisene) (mitte
rootvõipeeterkasutajal, kausta ja faili omanikud)uusfail.txtsisu kuvamiseks. Esita ekraanivaadeid,ls -lajacat uusfail.txtkäskude 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
opetajaseejärelsudo su - opetaja - Edasised käsud käivitage
opetajakasutaja alt. Kõigepealt tehke kataloog nimegaklass.
$ mkdir klass
See kataloog olgu avalikkusele loetav (andke vastavad õigused käsuga chmod).
- Looge kataloogi
klassfail nimegahinded.txtning 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
klassuus 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 mingeopetajakasutaja kataloogiklass(/home/opetaja/klass). Nagu te aru saate, siisjukuisaon sellehinded.txtjaoks other ning seetõttu ei ole tal võimalik faili lugeda. Proovigehinded.txtlugeda kasutajana jukuisacat 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
hindedJukulsetuid õ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 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
peetergruppi direktorsudo adduser peeter direktor.- Kontrollige tulemus
id peeterkäsuga
- Kontrollige tulemus
- Uurige faili
hinded.txtacl õ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
peeterning muutkeJukumatemaatikahinne viieks. Kas saate seda teha? - Uurige käsuga
ls -lfaili hinded.txt õigusi - mida märkate? - Seejärel uurige õigusi täpsemalt, kasutades käsku
getfaclning kopeerige see tulemus oma vikilehele.
# Lõpuks eemaldage ACL õigused faililthinded.txtkä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.
Tulemus
Viki lehel tuleb vastata järgmistele küsimustele.
- Missuguseid õigusi (r,w,x) on Unixis omanikul minimaalselt vaja (
d- directory,f- fail)- a) kataloogile
/dfaili/d/flugemiseks ning - b) failile
/d/ffaili/d/flugemiseks - c) kataloogile
/dfaili/d/fkustutamiseks - d) failile
/d/ffaili/d/fkustutamiseks?
- a) kataloogile
- Miks
chmod a=x skriptifailei ole piisav õigus shelli skriptifaili käivitamiseks? Millist õigust lisaks käivitamis-õigusele veel vaja läheb shelli skripti käivitamiseks? Põhjendage lühidalt? - Milleks on kasulik see, et igal kasutajal on omanimeline grupp? (teema: umask lõpp)
- Milliseid on minimaalsed õigused (rwx), mis on vajalikud teie tavakasutajal (mitte
rootvõipeeterkasutajal)uusfail.txtsisu kuvamiseks. Esita ekraanivaadeid,ls -lajacat uusfail.txtkäskude väljundist tõestamaks lahendust. - Tehke screenshot tulemusest, kus oleks näha
hinded.txtfailiõigusedls -la hinded.txtja jukuisa käivituskäsk koos väljundiga ning lisage see oma viki lehele. (teema:setuidjasetgid.) - Kas
setuidvõisetgidkasutamine võib vähendada süsteemi turvalisust? KuiJAH, siis kuidas? kuiEI, siis miks ei vähenda? - Kirjutage oma viki lehele kõik kasutajaid, kes saavad
sticky bitõigustega kataloogist nüüdpeeterkasutaja loodud faile kustutada. (teema: sticky bit) - Uurige käsuga
ls -lafailihinded.txtõigusi - mida märkate? Seejärel uurige õigusi täpsemalt, kasutades käskugetfaclning kopeerige see tulemus oma vikilehele. (teema: ACL) - Kes saab
chattr +iparameetriga faili sisu modifitseerida (kirjutada)? Milliste käskudega saate kustutadatestfail-2nimelise+iparameetriga faili.
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).
(Tähtaeg 2 nädalat)