[http://vvv.cs.ut.ee/%7Emroos/turve/praks/unix_perm_en.html In English]
=== Unixi failiõiguste praktikum ===
,----------- faili omaniku õigused
|
,------- grupiõigused
|
|
,--- õigused kogu ülejäänud maailmale
rwx|rwx|rwx
..s ..s ..t
|
|
`-- sticky bit
|
`------ setgid bit
`---------- setuid bit
- Tehke sellele veebilehele Reload!
- Tekitage kasutajad esimene, teine, kolmas (vajab roodu õigusi)
adduser
viies - Tekitage grupp yhine, kuhu kuuluvad kõik 3 kasutajat (vt. järgmist punkti).
- Tekitage grupp salajane - kasutajad: esimene ja teine
addgroup
grupp1
addgroup
grupp2
usermod -G grupp1,grupp2 kasutajanimi
...
Pange tähele, et usermod -G annab ette täieliku gruppide nimekirja, eemaldades kasutaja kõigist muudest gruppidest! - Logige süsteemi erinevate kasutajatena - tehke selleks eraldi terminaliaknad ja
ssh user@127.0.0.1
- Uurige identiteeti - mis grupid on kasutajatel?
id kasutaja
id
Parandage, kuniid
näitab sisseloginud kasutajale, et tema grupid on õiged. - Looge uusi faile (
touch
) ja katalooge (mkdir
) - mis on nende grupp? õigused? omanik?
ls -l
newgrp yhine
(või salajane) - kontrolligeid
väljundit, tekitage uusi faile.
newgrp grupp
Korrake, kuni õnnestub tekitada faile teise grupiga kui algul.umask
- tekita uusi faile (mida tähendavad umask väärtused: 022, 077, 027, 007, 002 ?)
umask vaartus
- Tekitage (root kasutajana) kataloog /home/yhine ning tehke selle omanikuks kasutaja "esimene" (vt. järgmist punkti)
- Tekitage kataloog
/home/yhine/tmp
ja lubage kõigile kasutajatele sinna kataloogi kirjutamine (loabitid 777)
mkdir kataloog
chown omanik kataloog
chmod mode kataloog
- Kas saab võõrast faili kustutada? Kes saab? Kas see sõltub kustutatava faili õigustest? Kas faili õiguste määramisega saab kustutamist keelata? Vastus kirjutage kuhugi faili üles, seda läheb vaja arvestuse saamisel.
- Sticky bit:
chmod 1777 /home/yhine/tmp
võichmod o+t /home/yhine/tmp
Mis muutus? vt. eelmine punkt. - Mida teeb setgid kataloogil:
mkdir /home/yhine/salajane
chgrp salajane /home/yhine/salajane
chmod 2770 /home/yhine/salajane
ja proovige erinevate kasutajatena sinna faile tekitada. Mis tuleb grupiks? - Kombineerige
sticky
+setgid
, nii et ei oleks võimalik kogemata võõrast faili kustutada, testige. - Andke kasutajale kolmas õigus siseneda (ja kirjutada) kataloogi salajane (lugege enne hoiatust ülevaltpoolt usermod kohta!) - milline on tema loodud failide grupikuuluvus?
- Kopeerida fail
id
ning anda sellele vastavad õigused:
cp /usr/bin/id /home/yhine
chown esimene /home/yhine/id
chmod 4755 /home/yhine/id
Nii tekib setuid programm - käivitage erinevate kasutajate (teine,kolmas) alt ning uurige väljundit (euid!) - Fail
test.c
- kompileeridagcc test.c -o test
#include <unistd.h>
main() {
setuid(geteuid());
execl("/bin/bash", "/bin/bash", NULL);
}
chown root test; chmod 4755 test
- Käivitage (./test
) erinevate tavakasutajate (mitte root) õigustes - kontrollige identiteeti (id
) ning parandage, kuni saate tavakasutaja root-uks.chown esimene test; chmod 4755 test
- proovige uuesti, miks uid ei muutu?- Koduseks harjutamiseks? Arvutiklassis pole eraldi /home:
Monteerige failisüsteem /home nosuid parameetriga (kaotab käivitatavate programmide setuid biti efekti).mount -o remount,nosuid /home
Kontrollige eelmisi punkte (./id
ja./test
töötamist).
Monteerige failisüsteem /home noexec parameetriga.mount -o remount,noexec /home
Enam ei saa programme käivitada (proovige!). Failisüsteemi noexec omadusest oli varemalt võimalik linkeri abil mööda minna, tänapäeval enam mitte:/lib/ld-linux.so.2 ./test
NB! Monteerides juurfailisüsteemi (/) noexec-ina, ei ole ka /lib kataloogis asuv programmide laadimisega tegelev dünaamiline linker enam käivitatav ning süsteem muutub kasutuskõlbmatuks. - Otsige süsteemist "setuid" ja "setgid" programme:
find / -perm +4000 -or -perm +2000 -ls
Mis otstarve neil süsteemis on? - ACL (access control list); järgmiste punktide täitmiseks monteerige kõigepealt failisüsteem ümber, lubades ACL toe:
mount -o remount,acl / - Andke õigusi konkreetsele kasutajale:
setfacl -m u:teine:rwx fail
ja proovige, kas see toimib. - ls -l näitab nüüd '+' märki - kontrollige!
getfacl fail - Praktikumi arvestuse saamiseks saatke viimase
getfacl
väljund ja varem kirja pandud õiguste küsimuste vastused e-mailiga oma praktikumijuhendaja aadressil. - Eemaldage ACL:
setfacl
-x u:teine fail - Tekitage kataloog ja määrake sellele "default" ACL -
setfacl -d -m user:kolmas:rx
Veenduge, et see ACL päritakse edasi kõigile failidele ja alamkataloogidele, mida te loote selle alla. - acl mask - võimaldab tühistada mingit õigust kõigilt kasutajatelt/gruppidelt, kes on listis:
setfacl -m m::-
(mida teeb? katsetage!) - fail - kõik ACL-id maha.
setfacl -b - Töö lõpp: eemaldage süsteemist praktikumi käigus loodud kasutajad ja grupid (rooduna!).
userdel -r esimene; userdel -r teine; userdel -r kolmas
groupdel grupp1; jne...
rm -rf /home/yhine
Viiteid:
[http://www.csl.sri.com/users/ddean/papers/usenix02.pdf]
[http://www.csl.sri.com/users/ddean/papers/usenix02.pdf]