UNIX 5. Přístupová oprávnění Obsah: tradiční unixová oprávnění, ACL speciální oprávnění (SUID, SGID, sticky bit) atributy, rozšířené atributy © Milan Keršláger http://www.pslib.cz/ke/slajdy 9.3.2011 http://creativecommons.org/licenses/by-nc-nd/3.0/
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í
Význam oprávnění Soubor Adresář Read (čtení) Write (zápis) eXecute (spuštění) čtení (zobrazení) obsahu souboru výpis obsahu adresáře (příkaz ls) změna obsahu adresáře (vytvoření, smazání a přejmenování položek) zápis do souboru (změna obsahu) vstup do adresáře (musí být i ve všech nadřízených) spuštění (provedení) binárka, skript
Uplatňování oprávnění řízení přístupu podle modelu DAC uživatel má definováno UID a GID (těch i více) objekty 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í POZOR: (!!!) žádný (!!!) průnik ani sjednocení atp.
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 typ objektu počet odkazů -rw-rw-r-- 1 huzva www 801512 led 22 2009 seznam.txt tři trojice oprávnění název skupina čas poslední změny obsahu vlastník délka Typ vypsaného objektu: - → obyčejný soubor d → adresář (directory) b → blokové zařízení (block) c → znakové zařízení (char) p → roura (pipe) s → soket 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.
Příklad výstupu $ ls -ld /dev/ttyS0 /dev/sda web.tgz vyuka brw-r----- 1 root disk 8, 0 bře 19 06:28 /dev/sda crw-rw---- 1 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 550258 lis 7 2008 web.tgz $ stat ucitele.txt File: `ucitele.txt' Size: 2280 Blocks: 16 IO Block: 4096 regular file Device: fd00h/64768d Inode: 9132416 Links: 1 Access: (0644/-rw-r--r--) Uid: (500/huzva) Gid: (500/huzva) Access: 2009-10-01 09:17:19.000000000 +0200 Modify: 2008-08-29 08:31:50.000000000 +0200 Change: 2008-08-29 08:31:57.000000000 +0200
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 4 2 1 r w x
Nastavení oprávnění u + r g - w o = x příkazem chmod využití oktalového zápisu oprávnění chmod 775 /bin/bash rwxrwxr-x chmod 664 index.html rw-rw- r-- symbolický zápis oprávnění místo oktalového příklad: u+r, u+rw, g-x, o=r, o= u + r g - w o = x
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 777 - 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
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í
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 slouží pro zjištění ACL (standardní výpis jen „+“) $ ls -ld /home/huzva drwx--x---+ 48 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::--- 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živatele m – maska g – pro skupinu o – 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) 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 ve výpisu je místo x u práv ostatních písmeno t Pozn.: Je-li písmeno velké, překryté oprávnění není přítomno.
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--------. 1 root root 1753 26. bře 23.16 /etc/shadow -rwsr-xr-x. 1 root root 25464 28. led 17.12 /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 111784 bře 11 2009 /usr/bin/gnomine -rw-rw-r-- 1 games games 95 bře 17 11:10 /var/lib/games/gnomine.Small.scores
Procesy se SUID a SGID bitem při spuštění dojde ke specifickému nastavení RUID, RGID: na UID uživatele, který proces spustil EUID, EGID: nastaveno podle binárky tj. podle vlastníka (je-li nastaven SUID) a skupiny (SGID) za normálních okolností EUID=RUID, EGID=RGID za běhu lze volat setuid() a setgid() slouží k dočasné změně EUID původní hodnoty uloženy do SavedUID, SavedGID využívají démoni ke zvýšení bezpečnosti privil. procesů různé unixové systémy mají drobné odlišnosti Linux má navíc FSUID, FSGID pro přístup k FS
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 12288 27. bře 10.38 /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)