UNIX 4. Uživatelé a skupiny v Unixu © Milan Keršlágerhttp:// Obsah: ● uživatelé, /etc/passwd, /etc/shadow ● skupiny, /etc/group, /etc/gshadow ● správa uživatelů a skupin, příkaz sudo ● adresářová služba (LDAP, NIS) ● bezpečnost (programátorská chyba, zranitelnost, exploit) ● SELinux, AppArmor, chroot, sandbox
Unixový systém ● víceúlohový ● nutné vzájemné oddělení úloh (procesů) ● proces nemůže zasahovat do paměti jiného ● nutná podpora procesoru – ochrana paměti – IBM PC: i386 (32bitový, Windows NT) – privilegovaný režim – dtto (nelze nebezpečné instrukce) – existovaly i systémy bez podpory CPU → problém ● víceuživatelský ● nutné vzájemné oddělení uživatelů ● pomocí oprávnění (soubory, adresáře, procesy) – nutná podpora v jádře operačního systému (+privileg. r.)
Uživatelé ● správce (administrátor) → root (UID=0) ● není jádrem OS omezován ● může se změnit na libovolného uživatele – využíváno při přihlašování (uvítací program jako root ) ● běžný uživatel → UID!=0 ● může zasahovat jen do vlastních souborů, procesů – využívá se systém oprávnění ● NEmůže se změnit na jiného uživatele ● jádro OS pracuje s UID (běžně 0 až 32767) ● ve výpisu se překládá na jméno (srozumitelnost)
Definice uživatelů ● uloženo v souboru /etc/passwd ● jednoduchá databáze ( chyba → zbytek se nepoužívá ) ● 1 řádek = 1 uživatel, položky odděleny znakem „ : “ ● login:passwd:UID:GID:FullName:HomeDir:shell ● využívá se při překladu UID → jméno uživatele ( ls -l ) ● založení uživatele ● prosté přidání dalšího řádku – lze i editorem ● nástroje (GUI, useradd, userdel) – používáme kvůli zamykání (editační konflikt)
Data o uživatelích ● jsou uložena v textových souborech ● /etc/passwd – definice uživatelů ● /etc/shadow – hesla v chráněném souboru (uživatel nemůže ani číst) ● /etc/group – seznam skupin + členství uživatelů ve skupinách ● /etc/gshadow – hesla skupin v chráněném souboru (jako /etc/shadow )
/etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin... huzva:x:500:500:René Hužva:/home/huzva:/bin/bash ● na prvním řádku je typicky root ● dále jsou tzv. systémové účty se speciálním využitím ● některé mají GUID=0, takže je to „malý root “ ● tři tečky naznačují řádky, které byly v ukázce smazány
Skrytá hesla (shadow passwords) ● heslo zakódováno jednosměrnou funkcí ● původně crypt(), později md5, sha1, sha2 – přidávána sůl (1 heslo = více zakódovaných tvarů) ● i tak lze použít útok hrubou silou – bereme všechny kombinace hesel (využití slovníku) – zakódujeme a porovnáme s uloženým tvarem – dnes tzv. „rainbow table“ → otázka vteřin (md5, sha1) ● ukrytí hesel do souboru /etc/shadow ● může číst jen root, běžný uživatel ne ● nevadí, protože před přihlášením oprávnění root
/etc/shadow ● opět jednoduchá databáze ● login:passwd:další:údaje:... ● další údaje upřesňují vlastnosti hesla – poslední změna hesla, platnost hesla, účtu, povinná změna, zákaz změny hesla uživatelem,... ● soubor může číst jen uživatel root – zašifrovaná hesla chráněna před zcizením – nelze použít útok hrubou silou – změna hesla uživatelem → SUID (speciální oprávnění) root:6$630fCdtG$:14632:0:99999:7::: huzva:465sWTI1pX/:14251:0:99999:7:::
Skupiny ● každý uživatel je členem alespoň 1 skupiny ● další skupiny v /etc/group ● primární skupina ● explicitně definována v /etc/passwd ● změna primární skupiny příkazem newgrp (nový shell) ● BSD systémy posuzují pouze primární skupinu ● SYSV systémy posuzují všechny skupiny najednou – dnes typické chování (v Linuxu volitelná vlastnost jádra)
/etc/group ● seznam skupin ● opět jednoduchá databáze ● názevsk:passwd:GID:login1,login2 ● BSD systémy ● všichni uživatelé ve skupině users ● SYSV systémy ● každý uživatel má vlastní stejnojmennou skupinu ● větší důraz na implicitní soukromí ● dá se nastavit (při vytváření uživatele) – /etc/default/useradd
/etc/gshadow ● stejná ochrana hesel, jako /etc/shadow ● názevsk:heslo:administrators:members ● typicky se hesla nepoužívají ● členství ve skupinách pevně dáno – nastaví se při přihlášení uživatele ● je-li však heslo nastaveno, může uživatel do skupiny vstoupit až po přihlášení – příkaz newgrp
Správa uživatelů a skupin ● různé nástroje pro GUI a příkazový řádek ● GUI se liší dle distribuce, řádkové stejné (standard) ● useradd, userdel, usermod ● groupadd, groupdel, groupmon ● passwd ● pro změnu hesla (uživatel vlastní, root všechny) ● id ● výpis aktuálních informací (UID, GID, skupiny) uid=500(huzva) gid=500(huzva) groups=500(huzva),501(www)
Nástroj sudo ● kontrolovaná elevace (zvýšení) oprávnění ● lze spustit příkaz jako jiný uživatel (i jako root ) ● /etc/sudoers → konfigurace ● použití: sudo příkaz – využívá distribuce Ubuntu (vkládá se heslo uživatele) ● příkaz su ● změna na jiného uživatele ● nutno znát jeho heslo ( root nemusí)
Adresářová služba ● externí databáze uživatelů ● nahrazuje nebo doplňuje lokální databázi (viz dříve) ● specializovaná databáze, replikace, distribuovanost ● uživatelé, skupiny, hesla, členství ve skupinách, jména tiskáren, počítačů,... ● optimalizace pro čtení a prohledávání ● aktualizace (změny) jen občasné ● LDAP ( Lightweight Directory Access Protocol ) ● NIS ( Network Information Service ) ● MS Active Directory, X.500, ale též DNS
LDAP ● původně protokol k X.500 ● model klient – server, používá TCP/IP ● jednotný globální prostor ● autentizace uživatelů, ACL ● podpora decentralizace ● podpora různých atributů ● na TUL jméno + heslo, ale též heslo pro WiFi apod. ● OpenLDAP, Fedora Directory Server ● open source implementace LDAP ● MS Active directory privátní implementací LDAP
Atributy LDAP ● dle X.520 ● C – country (CZ) ● SP – state or province (Liberecký kraj) ● L – locality (Liberec) ● O – organization (Technická univerzita) ● OU – organization unit (Fakulta mechatroniky) ● CN – common name (René Hužva) – CN=René Hužva, OU=Fakulta mechatroniky, O=Technická univerzita, L=Liberec, SP=Liberecký kraj, C=CZ
NIS ● původně Yellow Pages (YP) ● kolidovalo s ochrannou značkou v UK ● firma Sun Microsystem ● licencováno pro unixové systémy ● dnes spíše LDAP ( blíže k tomu, co má MS Windows ) ● uživatelé, hesla, názvy počítačů, ové aliasy, skupiny a členství ve skupinách,... ● novější verze: NIS+
Počítačová bezpečnost ● jedna celé disciplína kolem počítačů ● lze rozdělit na několik základních oblastí – fyzické zabezpečení ● zámky, mříže, hlídač, alarm,... – softwarové zabezpečení ● problém programátorských chyb (audity, aktualizace) ● výběr vhodného software (operační systém, ale i aplikace) ● správné nastavení software (oprávnění, šifrování, hesla,...) – personální opatření ● zaměstnanci – školení, zodpovědnost, hmotná odpovědnost... ● klienti – kompromis mezi omezením a volným přístupem
Bezpečnost v UNIXu ● bezpečnostní model tradičně typu DAC ● Discretionary Access Control podle TCSEC (USA) ● uživatel má přístup ke svým procesům a souborům – po „autentizaci“ (jméno+heslo) je uživatel „autorizován“ ● uživatel může poskytnout přístup jiným uživatelům ● slabým místem je uživatel root (správce systému) – root má absolutní oprávnění – → ovládne-li někdo jeho proces, ovládá celý systém ● alternativou je MAC model ● vše zakážu, selektivně povolím → RBAC (SELinux)
Zranitelná místa ● při návrhu ● chybně navržený nebo vybraný program či OS ● při implementaci ● programátorská chyba způsobí zranitelnost ● program využívající zranitelnost je exploit ● při provozu ● špatná implementace či nastavení ● typicky chyba obsluhy počítačového systému
Programátorská chyba ● opomenutí kontroly, logická chyba, překlep, … ● nebezpečné u nedůvěryhodných vstupů – např. data přicházející z počítačové sítě, Internetu – webový prohlížeč, ový klient, … ● často u složitých implementací – RPC → sdílení souborů v síti – SMB (!), NFS – a další síťové servery, ale i „běžné“ programy ● použití nebezpečných funkcí ● například strcpy() & spol. v jazyce C – jde o systematickou chybu (chybný přístup k řešení) – existují „příručky bezpečného programování“
Zranitelnost ● způsobeno programátorskou chybou ● děláme audity → ověřování bezpečnosti ● audit použitých zdrojových kódů – dělá se těžko u uzavřeného kódu (typicky komerčního) – certifikace systému podle nějaké specifikace ● většinou čistě formální záležitost (pro Windows) ● význam má u specializovaných systémů (OpenVMS) ● penetrační testy se typicky nedělají ● audit funkce a nastavení systému – přidělená oprávnění musí být vždy minimální nutná ● zaznamenáváme a analyzujeme činnost systému – „audit log“
Exploit ● konkrétní využití zranitelnosti ● typicky specializovaná aplikace – snadno dostupné pro starší zranitelnosti (Internet) – problém toho, že exploit má náskok ● black hat (to jsou ti zlí), white hat (to jsou ti hodní) ● často ve formě skriptu pro masivní útok – necílený útok, hledáme zranitelný počítač, službu – následuje snaha o elevaci (zvýšení) oprávnění ● nejdřív se dostane do počítače, pak se stane správcem systému ● forma exploitu ● remote explotit → ze sítě – nejnebezpečnější ● local exploit → ze stejného počítače – obtížnější
Aktualizace ● vydávání oprav → aktualizace ● řešíme pozdě, ale alespoň něco – tzv. zero-day zranitelnosti ● typicky není možné reagovat tak rychle, jak by bylo potřeba ● je nezbytně nutné aktualizace aplikovat – zajistit restart služby nebo celého počítače – Linux aktualizace prostřednictvím distribuce ● na rozdíl od Windows aktualizace pro celý systém ● antivirus zde nepomůže – chyba v programu → antivirus je obejit
SELinux ● doplňující zabezpečení pro Linux ● implementuje MAC (Mandatory Access Control) – přesněji RBAC → Role-based Access Control – na souborech jsou rozšířené atributy – definované role pro různé skupiny programů – → i proces běžící jako root může být omezen ● vytvořila NSA v USA (Národní úřad pro bezpečnost) – používá Fedora a klony RHEL (CentOS apod.) ● 3 režimy: – disabled, permissive (jen hlášení, bez omezení), enabled
AppArmor ● doplňující zabezpečení pro Linux ● implementuje MAC (jako SELinux) – nevyužívá rozšířené atributy → cesta k binárce ● vytvořila firma Novell – používáno v SLES, openSUSE, Ubuntu ● jednodušší správa – není tak komplexní, jako SELinux
chroot ● systémové volání jádra OS ● běžícímu procesu je změněn kořen FS – kořen je „posunut“ do zvoleného adresáře – vzniká problém s přístupem k dynamickým knihovnám ● dyn. knihovny musí být nakopírovány do chroot prostředí ● proces se „nedostane“ mimo chroot – neplatí pro uživatele root – chroot není zabezpečením, spíše ochranou proti chybě ● například nemožnost smazat soubory mimo chroot ● v unixových systémech velmi oblíbené
Sandbox ● bezpečnostní technika ● implementováno v jádře OS ● proces se může „odstřihnout“ od funkcí OS – typicky si proces vybere, které funkce znepřístupnit ● vybraná systémová volání přestanou fungovat ● v případě funkčního exploitu nejsou další akce povoleny – velmi dobře implementováno ve Windows ● bohužel to zcela využívá jen prohlížeč Google Chrome – v unixových OS neexistuje ucelená implementace ● sandbox lze vytvořit např. pomocí SELinuxu