UNIX Přístupová oprávnění © Milan Keršláger
Tradiční unixová oprávnění ● velmi jednoduchá ● v době vzniku Unixu málo výkonné počítače (1969) ● jde o rychlost souborového systému (FS – filesystem) ● žádná dědičnost, vše na konkrétní adresář, soubor – ke čtení ze souboru jsou nutná metadata – metadata jsou v i-node, který obsahuje i oprávnění – využijeme data, která stejně musíme načíst → efektivní ● „svatá trojice“ – jednotně pro soubory i adresáře ● 3 druhy: čtení, zápis, spuštění (Read, Write, eXecute) ● 3 cíle: vlastník, skupina, ostatní
Další oprávnění ● speciální oprávnění ● výjimky ze standardního chování systému ● řeší situace, které tradiční oprávnění řešit neumí ● standardní součást unixových systémů ● ACL (dle POSIXu) ● rozšíření standardních oprávnění ● trojice ( rwx ) pro další uživatele i skupiny – MS Windows vlastní ACL (jemnější) – Linux ACL vážně až dnes (v RHEL 4 od roku 2005) – Samba oprávnění mapuje (redukuje), připravuje vlastní
Význam oprávnění čtení (zobrazení) obsahu souboru výpis obsahu adresáře (příkaz ls ) zápis do souboru (změna obsahu) změna obsahu adresáře (vytvoření, smazání a přejmenování položek) spuštění (provedení) binárka, skript vstup do adresáře (musí být i ve všech nadřízených)
Uplatňování oprávnění ● máme oprávnění pro vlastníka, skupinu a ostatní ● uplatňují se jen nejkonkrétnější oprávnění ● jsem-li majitel → práva pro vlastníka ● patřím do skupiny, ale nejsem majitel → pro skupinu ● nejsem ani vlastník, ani skupina → práva pro ostatní ● poznámky: ● (!!!) žádný (!!!) průnik ani sjednocení atp. ● platí stejně pro soubory i pro adresáře
Zobrazování oprávnění ● pro objekty (soubor, adresář) zobrazuji: ● tři trojice oprávnění (Read, Write, eXecute) ● vlastník, skupina, ostatní – rwx rwx rwx ● ve výpisu musí být k objektu vypsán: ● vlastník ● skupina
ls -l -rw-rw-r-- 1 huzva www led seznam.txt typ objektu tři trojice oprávnění vlastník skupina délka čas poslední změny obsahu název Typ vypsaného objektu: - → obyčejný soubor d → adresář b→ blokové zařízení c→ znakové zařízení p→ roura s→ soket počet odkazů Počet odkazů je počet jmen (v adresářích), které odkazují na daný objekt. Souvisí s pevnými odkazy („hardlink“). U adresářů se započítává odkaz z vnitřku samotného adresáře (tj. dvě tečky „..“) a další případně obsažené podadresáře.
Oktalový zápis oprávnění ● každá trojice oprávnění se dá zapsat oktalově ● velmi často využíváno ● součet vah: ● rwx → 7 → všeobecně přístupný (skript, adresář) ● rw- → 6 → čtení a zápis (textový soubor) ● r-x → 5 → binárka, adresář s programy ● r-- → 4 → jen čtení (textový soubor) ● --x → 1 → binárka, nelze použít debugger
Nastavení oprávnění ● příkazem chmod ● využití oktalového zápisu oprávnění ● chmod 775 /bin/bashrwxrwxr-x ● chmod 664 index.htmlrw-rw-r-- ● symbolický zápis oprávnění místo oktalového ● příklad: u+r, u+rw, g-x, o=r, o=
umask ● slouží k implicitnímu nastavení oprávnění ● pro nové soubory a adresáře ● určuje, která oprávnění se mají ODEBRAT – výsledek je tedy rozdíl umask ● u adresáře je oprávnění x všude nastaveno ● příklad: umask→ výpis aktuálního umask umask 022→ soubor bude mít 644, adresář 755 umask 006→ soubor bude mít 661, adresář 771
Uchovávané časy ● modify – čas poslední změny obsahu ● u souboru čas posledního zápisu ● access – čas posledního přístupu ● evidence posledního čtení ze souboru ● každé čtení vyprovokuje zápis (aktualizaci) ● snižuje výkon souborového systému – nižší rozlišení (např. 10 minut) – úplný zákaz může ovlivnit některé další funkce ( ) ● change – čas poslední změny metadat ● změna v i-node (délka, oprávnění, seznam bloků...)
Příklad výstupu $ ls -ld /dev/ttyS0 /dev/sda web.tgz vyuka brw-r root disk 8, 0 bře 19 06:28 /dev/sda crw-rw root uucp 4, 64 bře 19 06:28 /dev/ttyS0 drwxrwxr-x 4 rene www 4096 pro 18 07:18 vyuka -rw-r--r-- 1 rene rene lis web.tgz $ stat ucitele.txt File: `ucitele.txt' Size: 2280 Blocks: 16 IO Block: 4096 regular file Device: fd00h/64768d Inode: Links: 1 Access: (0644/-rw-r--r--) Uid: (500/huzva) Gid: (500/huzva) Access: :17: Modify: :31: Change: :31:
ACL – Access List ● rozšíření tradičních unixových oprávnění ● ale i na složitější požadavky stačí tradiční + speciální ● využívá tradiční trojici oprávnění ( rwx ) ● pomocí ACL může mít objekt další klasická oprávnění pro další jednotlivé uživatele i skupiny ● definováno normou POSIX ● implementace v Linuxu ● existuje dlouho, ale problémy – vyřešeno 2005 ● současné distribuce mají ACL implicitně zapnuto – ACL se dá selektivně aktivovat pro jednotlivé FS
getfacl $ ls -ld /home/huzva drwx--x huzva huzva 4096 bře 26 07:37 /home/huzva $ getfacl /home/huzva getfacl: Removing leading '/' from absolute path names # file: home/huzva # owner: huzva # group: huzva user::rwx user:apache:--x group::--x mask::--x other::--- ● slouží pro zjištění ACL (standardní výpis jen „+“) tradiční oprávnění (vlastník) uživatel zapsaný v ACL tradiční oprávnění (skupina) maska práv ACL tradiční oprávnění (ostatní)
setfacl ● slouží k nastavení ACL ● setfacl -m u:apache:rw názevsouboru – m → změna nastavení ACL – u – pro uživatelem – maska – g – pro skupinuo – ostatní – x → odebrat konkrétní ACL – b → odebrání všech ACL (zůstanou jen tradiční) ● maska je sjednocením všech oprávnění – tj. uživatelé i skupiny – pokud nějaké chybí, ve výsledku se neuplatní
Speciální oprávnění ● tradiční součást unixových systémů ● mění standardní chování systému (s oprávněním) ● řeší se pomocí nich speciální situace ● SUID bit ● ve výpisu je místo x u práv vlastníka písmeno s ● SGID bit ● ve výpisu je místo x u práv skupiny písmeno s ● sticky bit ● ne výpisu je místo x u práv ostatních písmeno t
SUID bit ● standardní chování: ● nový proces přebírá oprávnění od svého rodiče ● na binárce programu je nastaven SUID bit: ● spuštěný proces běží s právy vlastníka binárky ● může to být jakýkoliv uživatel, často ale root – při chybě v SUID programu bezpečnostní problém!!! ● příklad: změna hesla ● soubor /etc/shadow běžný uživatel nepřečte ● program na změnu hesla je SUID root $ ls -l /etc/shadow /usr/bin/passwd -r root root bře /etc/shadow -rwsr-xr-x. 1 root root led /usr/bin/passwd
SGID bit ● podobné jako SUID, ale pro skupinu ● nový proces běží s právy skupiny vlastnící binárku ● příklad: skóre ve hře ● skóre hry je pro všechny uživatele v souboru – hra i uživatelé mohou měnit → dá se fixlovat ● soubor se skóre dáme skupině games – zápis bude možný pouze pro skupinu games (664) ● program se hrou bude SGID games – spuštěná hra skóre zapíše, ale uživatel sám ne $ ls -l /usr/bin/gnomine /var/lib/games/gnomine.Small.scores -r-xr-s--x 1 root games bře /usr/bin/gnomine -rw-rw-r-- 1 games games 95 bře 17 11:10 /var/lib/games/gnomine.Small.scores
SGID bit pro adresáře ● SGID má speciální význam pro adresář ● založíme-li v adresáři nový objekt, nebude patřit primární skupině uživatele, který ho založil, ale bude patřit skupině, která je SGID v tomto adresáři ● používá se na společné projekty více uživatelů (uživatelé jsou ve stejné skupině) ● kombinujeme s umask ● nastaví-li si uživatel vhodný umask, nebude bránit uživatelům ve stejné skupině v modifikaci souborů, které on sám vytvoří (nebude smazáno právo w)
Sticky bit ● problém adresáře /tmp ● všichni do něj mají právo zápisu ● procesy do něj odkládají dočasné soubory ● právo zápisu však je i právem mazat, přejmenovat ● různí uživatelé si tak navzájem mohou škodit ● na adresáři je nastaven sticky bit ● vytváření není nijak omezeno ● mazání a přejmenování může provést jen majitel daného objektu (souboru, adresáře) $ ls -ld /tmp drwxrwxrwt. 88 root root bře /tmp
Atributy ● nastavení specifických vlastností objektů FS ● interpretuje OS (pro jednotlivé soubory, adresáře) ● v různých systémech různě (Linux, OS/X, BSD, Win) ● společné atributy souborů unixových systémů ● i – immutable → nelze smazat ani změnit obsah ● a – append only → lze jen přidávat (logy) ● další atributy (Linux) – synchronní operace, potlačení atime, nezálohovat, komprimováno, žurnálování dat, bezpečné mazání,... ● příkazy: lsattr, chattr
Rozšířené atributy ● „poznámky“ k objektům FS (systému souborů) ● nejsou pevně dány OS nebo FS, typicky: ● název=hodnota → celé zapsáno jako řetězec ● systémové rozšířené atributy – např. definice nastavení pro pro SELinux ● uživatelské rozšířené atributy – využívají aplikace (kontrolní součet souboru, asociovaná aplikace, použité kódování,...) ● typicky omezená velikost, sdruženo s metadaty – v extrémním případě až do max. velikosti souboru (fork)