(procesu) Vnější identita, identita uživatele Je tvořena přihlašovacím jménem a heslem Slouží k: přihlášení do systému pojmenování domovského adresáře jako jméno pro mail... Vnitřní identita, identita procesu Tvoří ji identifikační a efektivní identifikační číslo uživatele a skupiny (uid, gid, euid, egid). Jsou to celá čísla sloužící k autorizaci procesu uvnitř systému (ověření práv k provádění operací se soubory a práv ke spouštění jiných procesů). Každý proces má právě jedno: uid a euid (obvykle jsou stejná) primární gid a egid (opět obvykle stejná) Proces může mít přidělena další tzv. sekundární gid predn_04.doc 18.11.01 23:24 1
Vztah mezi identitami je definován: soubory v /etc: passwd, shadow, group jmennými službami - umožňují centralizaci správy (nejen) uživatelů: nis (příkazy yp...) nis+ (příkazy nis...) ldap predn_04.doc 18.11.01 23:24 2
Soubor /etc/passwd: Slouží k překladu uid na jméno a naopak a k uložení informací nutných pro přihlášení uživatele. Pro každého uživatele jedna řádka rozdělená znaky : (dvojtečka)na sedm položek: přihl.jméno:krypt.heslo:uid:gid:úplné_jméno:dom.adresář:shell Příklad: $ cat /etc/passwd root:x:0:1:super-user:/root:/sbin/sh daemon:x:1:1::/: bin:x:2:2::/usr/bin: sys:x:3:3::/: listen:x:37:4:network Admin:/usr/net/nls: nobody:x:60001:60001:nobody:/: noaccess:x:60002:60002:no Access User:/: nobody4:x:65534:65534:sunos 4.x Nobody:/: honza:x:1001:10:honza:/home/honza:/bin/ksh predn_04.doc 18.11.01 23:24 3
uživatelské_jméno Max. 8 znaků, definuje ho administrátor, uživatel ho nemá právo měnít. Nesmí být tvořeno pouze velkými písmeny Nemá smysl přiřadit stejné jméno dvěma uživatelům (druhý se nikdy nepřihlásí) Po přihlášení lze zobrazit: jako hodnotu proměnné LOGNAME příkazem whoami příkazem who am i Příklad: $ echo $LOGNAME honza $ who am i honza pts/3 Oct 21 11:52 (localhost) $ whoami honza $ predn_04.doc 18.11.01 23:24 4
uživatelské_heslo Max. 8 znaků (většinou). Mění se příkazem passwd uživatel musí znát původní heslo, root ne uživatel musí dodržovat pravidla (délka, znaky), root ne. Uloženo v kryptovaném tvaru v /etc/passwd resp. /etc/shadow Kryptování je jednocestné: vstupní heslo (max. 8 znaků) sůl (2 znaky) crypt výstupní heslo (2+11 znaků) predn_04.doc 18.11.01 23:24 5
uid - identifikační číslo uživatele Přidělováno administrátorem. Celé číslo (dříve max. 65535, nyní i více ale nedoporučuje se). uid=0 definuje tzv privilegovaného uživatele (obvykle se jménem root) Pod tímto uid bude po přihlášení uživatele spuštěn jeho shell (7.položka) Různí uživatelé by měli mít různá uid. gid - identifikační číslo primární skupiny Přidělováno administrátorem. Celé číslo, dříve max. 65535, nyní i více ale nedoporučuje se Pod tímto gid bude po přihlášení uživatele spuštěn jeho shell. predn_04.doc 18.11.01 23:24 6
úplné_jméno Podrobnější popis uživatele Posílán jako úplné jméno v mailu domovský_adresář Adresář ze kterého je odstartován přihlašovací shell. Je na něj nastavena proměnná HOME shell Absolutní cesta k příkazu, který je spuštěn po řádkovém přihlášení uživatele. Obvykle shell, ale může být i jiný program. predn_04.doc 18.11.01 23:24 7
Soubor /etc/group Slouží k překladu gid na jméno skupiny a naopak a k definici tzv. sekundárních skupin. Pro každou skupinu jedna řádka rozdělena znaky : (dvojtečka) na čtyři pole: jméno_skupiny:heslo_skupiny:gid:seznam_uživatelů $ cat /etc/group root::0:root other::1: bin::2:root,bin,daemon... nuucp::9:root,nuucp staff::10: daemon::12:root,daemon sysadmin::14:honza nobody::60001: noaccess::60002: nogroup::65534: $ predn_04.doc 18.11.01 23:24 8
jméno_skupiny Pravidla jako pro jméno uživatele. Uživatel se může přihlásit i když jeho primární skupina (z /etc/passwd) není v /etc/group heslo_skupiny Nebývá obvykle implementováno (je prázdné). gid Celé číslo podobně jako uid. seznam_uživatelů 1. Uvedení uživatelé mají právo skupinového přístupu k souborům této skupiny (tato skupina je jejich sekundární skupinou). 2. Uvedení uživatelé mají právo příkazem newgrp si nastavit tuto skupinu jako primární. predn_04.doc 18.11.01 23:24 9
Výpis a změna vnější identity Identitu definuje administrátor, uživatel si může měnit heslo příkazem passwd Kromě příkazů whoami a who am i vnější identitu zobrazují příkazy: groups who last Příklad: root@solaris/root>whoami root root@solaris/root>who am i root pts/2 Oct 24 09:46 (dilna) root@solaris/root>last -3 root pts/2 dilna Wed Oct 24 09:46 still logged in honza pts/2 dilna Sun Oct 21 21:27-02:11 (04:43) honza pts/3 localhost Sun Oct 21 14:52-19:27 (04:34) root@solaris/root>who root pts/2 Oct 24 09:46 (dilna) root@solaris/root> predn_04.doc 18.11.01 23:24 10
Výpis a změna vnitřní identity Aktuální uid a gid lze zobrazit příkazem id resp. id -a Pokud jsou efektivní uid resp. gid různá od uid resp. gid, zobrazí se také (id -a). Identitu kernel nastavuje při startu procesu nebo mění na žádost procesu. Obvykle jsou uid a euid resp. gid a egid stejná a dědí se z rodičovského procesu. Ve zvláštních případech se nedědí, ale nastavují všechna nebo jen některá: Pozor! Při přihlášení (login, dtlogin) nebo programem su se mění uid i gid, normální i efektivní Programem newgrp se mění gid a egid. U programů s nastaveným suid bitem se mění euid. U programů s nastaveným sgid bitem se mění egid. suid/sgid bit nefunguje pro skripty a některé programy (je závislé na implementaci). predn_04.doc 18.11.01 23:24 11
Příkaz su su [-] [přihlašovací_jméno} Startuje nový shell pod novou identitou. Původní shell nekončí. Po odhlášení z su se v něm pokračuje. Je-li su volán uživatelem, vyžaduje heslo, od roota ne. Je-li uveden přepínač -, provede přihlašovací skripty (nastaví prostředí). Je-li vynecháno přihlašovací jméno, doplní se jméno root Příkaz newgrp newgrp sekundární_skupina Nahrazuje původní shell jiným shellem s novou skupinovou identitou. Použití příkazu je omezeno (viz dále u popisu souboru /etc/group) Příklad: predn_04.doc 18.11.01 23:24 12
Příklad: root@solaris/root>id uid=0(root) gid=1(other) root@solaris/root>su - honza Sun Microsystems Inc. SunOS 5.8 Generic February 2000 $ id uid=1001(honza) gid=10(staff) $ id -a uid=1001(honza) gid=10(staff) groups=10(staff),14(sysadmin) $ groups staff sysadmin $ newgrp sysadmin $ id uid=1001(honza) gid=14(sysadmin) $ newgrp staff $ id uid=1001(honza) gid=10(staff) predn_04.doc 18.11.01 23:24 13
Vlastnictví souborů a přístupová práva Každý soubor/adresář má v i-uzlu: vlastníka (uid) a skupinu (gid). přístupová práva čtení (read), zápis (write) a provádění (execute) pro vlastníka (user), skupinu (group) a ostatní (other): Tyto informace vypisuje příkaz ls -l: přístupová práva pro vlastníka, skupinu, ostatní drwxr-xr-x 2 honza staff 512 Oct 14 22:32 d1 drwx------ 2 root other 512 Oct 21 15:32 dir -rw-r--r-- 1 honza staff 0 Mar 4 2001 konec typ souboru -, d, c, b, p vlastník (uid) skupina (gid) predn_04.doc 18.11.01 23:24 14
Význam přístupových práv: právo význam u souboru význam u adresáře r číst obsah souboru (cat) vypisovat obsah adresáře (ls) w měnit obsah souboru (vi) zakládat a rušit soubory v adresáři (rm) x spouštět soubor jako program nastavovat a procházet adresář (cd) predn_04.doc 18.11.01 23:24 15
Postup při vyhodnocení práv: euid procesu = 0 + přístup povolen euid procesu = uid souboru - egid procesu = gid souboru - použij příst. práva ostatní + použij příst. práva vlastníka + použij příst. práva skupiny predn_04.doc 18.11.01 23:24 16
Změna přístupových práv Právo měnit přístupová práva má pouze vlastník souboru a root Přístupová práva se mění příkazem chmod Symbolická změna přístupových práv: chmod [-R] seznam_změn seznam_souboru seznam_změn je seznam jedné nebo více změn oddělených čárkami ve tvaru <kdo><jak><co> kde: <kdo> je jedno nebo více z: user, group, other, all <jak> je právě jedno z: +, -, = <co> je jedno nebo více z: r, w, x Příklad: $ ls -l t1 -rwxr-xr-x 1 honza staff 21 Mar 4 2001 t1 $ chmod u-w,go=w,a-x t1 $ ls -l t1 -r---w--w- 1 honza staff 21 Mar 4 2001 t1 $ predn_04.doc 18.11.01 23:24 17
Absolutní (oktalová) změna přístupových práv: chmod [-R] kód seznam_souboru kde kód jsou oktalově vyjádřená přístupová práva. Příklad: $ ls -l t1 -r---w--w- 1 honza staff 21 Mar 4 2001 t1 $ chmod 127 t1 $ ls -l t1 ---x-w-rwx 1 honza staff 21 Mar 4 2001 t1 $ Nejčastější změny přístupových práv $ ls -l t[12] ---x-w-rwx 1 honza staff 21 Mar 4 2001 t1 -rw-r--r-- 1 honza staff 0 Oct 6 21:21 t2 $ chmod 755 t1 $ chmod +x t2 $ ls -l t[12] -rwxr-xr-x 1 honza staff 21 Mar 4 2001 t1 -rwxr-xr-x 1 honza staff 0 Oct 6 21:21 t2 predn_04.doc 18.11.01 23:24 18
Přístupová práva nově zakládaných souborů Jsou definována pomocí tzv. masky přístupových práv. Hodnota masky je součástí procesu (podobně jako uid a gid) a je dědičná. Hodnotu masky lze vypsat a případně měnit příkazem umask. Přístupová práva vzniknou množinovým rozdílem výchozí hodnoty a masky. Výchozí hodnota je 666 pro soubory a 777 pro adresáře. maska soubor adresář poznámka 000 666 777 odpovídá výchozí hodnotě Nebezpečné! 022 644 755 obvyklé nastavení 027 640 750 vyšší bezpečnost 077 600 700 největší restrikce 066 600 711 kompromisní řešení predn_04.doc 18.11.01 23:24 19
Příklad: $ umask 022 $ mkdir a1 $ touch s1 $ umask 026 $ mkdir a2 $ touch s2 $ ls -ld [as][12] drwxr-xr-x 2 honza sysadmin 512 Oct 21 18:27 a1 drwxr-x--x 2 honza sysadmin 512 Oct 21 18:27 a2 -rw-r--r-- 1 honza sysadmin 0 Oct 21 18:27 s1 -rw-r----- 1 honza sysadmin 0 Oct 21 18:28 s2 $ predn_04.doc 18.11.01 23:24 20
Změna vlastnictví souboru Právo měnit má pouze root (dříve i vlastník, to je ale bezpečnostní problém). Vlastnictví (i skupinové) lze měnit příkazem chown, skupinové příkazem chgrp. Volání: chown [-R] nový_vlastník[:nová_skupina] seznam_souborů chgrp [-R] nová_skupina seznam_souborů kde -R znamená rekurzivní změnu do podadresářů Příklad: root@solaris/home/honza/dir>ls -la total 4 drwx------ 2 root other 512 Oct 21 19:27. drwxr-xr-x 6 honza staff 512 Oct 21 18:28.. -rw-r--r-- 1 root other 0 Oct 21 19:27 s root@solaris/home/honza/dir>chown -R honza:staff.;ls -la total 4 drwx------ 2 honza staff 512 Oct 21 19:27. drwxr-xr-x 6 honza staff 512 Oct 21 18:28.. -rw-r--r-- 1 honza staff 0 Oct 21 19:27 s predn_04.doc 18.11.01 23:24 21
Speciální přístupová práva právo nastavení význam u souboru význam u adresáře s(uid) 4000 s(gid) 2000 l(ock) s(t)icky s(t)icky 4000 u+s 2000 g+s 1000 o+t program má po spuštění euid vlastníka programu program má po spuštění egid vlastníka programu (jeli x pro skup.) soubor se povinně zamyká (není-li x pro skupinu) - není-li nastaven x pro ostatní, souboru není měněn čas přístupu (swap) - nové soubory v adresáři dědí gid z adresáře, nikoliv z gid procesu. Toto právo nelze nastavit absolutním způsobem. soubory v adresáři s právy rwxrwxrwt smí zakládat každý, ale rušit smí pouze vlastník nebo root nebo uživatel s právem zápisu do souboru predn_04.doc 18.11.01 23:24 22
Příklad: root@solaris/home/honza>chmod 7000 t1 d1; ls -ld [td]1 d--s-----t 2 honza staff 512 Oct 14 22:32 d1 ---S--l--T 1 honza staff 21 Mar 4 2001 t1 root@solaris/home/honza>chmod 7777 t1 d1; ls -ld [td]1 drwsrwxrwt 2 honza staff 512 Oct 14 22:32 d1 -rwsrwsrwt 1 honza staff 21 Mar 4 2001 t1 root@solaris/home/honza>chmod g+s d1;ls -ld [td]1 drwsrwsrwt 2 honza staff 512 Oct 14 22:32 d1 -rwsrwsrwt 1 honza staff 21 Mar 4 2001 t1 root@solaris/home/honza> predn_04.doc 18.11.01 23:24 23
Seznamy pro řízení přístupu (Access Control List, ACL) Rozšíření přístupových práv po vzoru MS Vyžadováno při zvýšené bezpečnosti Nestandardní a proto nekompatibilní mezi implementacemi. Není vždy implementováno Příklad pro Solaris 8: $setfacl -s u::7,g::5,o:1,m:4,g:sysadmin:6,u:honza:7 t1 $ls -l t1 -rwsr-l--t+ 1 root staff 21 Mar 4 2001 t1 $getfacl t1 # file: t1 # owner: root # group: staff user::rwx user:honza:rwx #effective:r-- group::r-x #effective:r-- group:sysadmin:rw- #effective:r-- mask:r-- other:--x predn_04.doc 18.11.01 23:24 24
predn_04.doc 18.11.01 23:24 25