Identita uživatele predn_04.odt 28.03.2007 15:47:03 1
Identita uživatele (procesu) Vnější identita - identita uživatele Je tvořena přihlašovacím jménem a ověřována např. heslem Slouží k: přihlášení do systému pojmenování domovského adresáře jako jméno pro mail... Pravidla pro tvorbu jmen: 8 znaků obvykle malá písmena predn_04.odt 28.03.2007 15:47:03 2
Vnitřní identita - identita procesu, souboru Číselná identifikace uživatele a skupiny (uid, gid) 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á: uid (real, efective, saved) primární gid (real, efective, saved) Proces může mít přidělena další tzv. sekundární gid Každý soubor má: uid gid predn_04.odt 28.03.2007 15:47:03 3
Změna identity procesu: exec: RealUID SavedUID EfectiveUID proveditelný soub. s S(et)UID UID RealUID SavedUID EfectiveUID EUID=0: RUID, EUID na cokoliv EUID<>0: EUID na RUID nebo SavedUID predn_04.odt 28.03.2007 15:47:03 4
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.odt 28.03.2007 15:47:03 5
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.odt 28.03.2007 15:47:03 6
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.odt 28.03.2007 15:47:03 7
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.odt 28.03.2007 15:47:03 8
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.odt 28.03.2007 15:47:03 9
ú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.odt 28.03.2007 15:47:03 10
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.odt 28.03.2007 15:47:03 11
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.odt 28.03.2007 15:47:03 12
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 ls -l 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.odt 28.03.2007 15:47:03 13
Výpis a změna vnitřní identity Aktuální uid a gid lze zobrazit příkazem id ( id -a ), pcred pid (Solaris) Pokud jsou efektivní uid resp. gid různá od uid resp. gid, zobrazí se také (id -a). Identita se nastavuje při startu procesu nebo mění na žádost procesu (viz dříve). Obvykle jsou uid a euid resp. gid a egid stejná a dědí se z rodičovského procesu. Neprivilegovaný proces může změnit identitu jen voláním programu s suidbitem. Při přihlášení (login, dtlogin, sshd,...) mění vše. Programem newgrp se mění gid a egid. U programů s nastavenýmsuid bitem se mění euid. U programů s nastavenýmsgid bitem se mění egid. Pozor! suid/sgid bit je nebezpečný pro skripty. predn_04.odt 28.03.2007 15:47:03 14
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) predn_04.odt 28.03.2007 15:47:03 15
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.odt 28.03.2007 15:47:03 16
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.odt 28.03.2007 15:47:03 17
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.odt 28.03.2007 15:47:03 18
Postup při vyhodnocení práv: euid procesu = 0 euid procesu = uid souboru + + přístup povolen - egid procesu resp. sek. gid = 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.odt 28.03.2007 15:47:03 19
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 kde: <kdo><jak><co> <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, s, t 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.odt 28.03.2007 15:47:03 20
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.odt 28.03.2007 15:47:03 21
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.odt 28.03.2007 15:47:03 22
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.odt 28.03.2007 15:47:03 23
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.odt 28.03.2007 15:47:03 24
Speciální přístupová práva právo nastave ní význam u souboru význam u adresáře s(uid) 4000 4000 u+s program má po spuštění euid vlastníka programu - s(gid) 2000 l(ock) 2000 g+s program má po spuštění egid vlastníka programu (je-li x pro skup.) soubor se povinně zamyká (není-li x pro skupinu) nové soubory v adresáři dědí gid z adresáře, nikoliv z gid procesu. Toto právo nelze nastavit absolutním způsobem! s(t)icky s(t)icky 1000 o+t - není-li nastaven x pro ostatní, souboru není měněn čas přístupu (swap) 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.odt 28.03.2007 15:47:03 25
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.odt 28.03.2007 15:47:03 26
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: $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.odt 28.03.2007 15:47:03 27