UNIX 4. Uživatelé a skupiny v Unixu © Milan Keršláger 05.10.2017 http://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/
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 (číslo) 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 na prvním řádku je typicky root 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:membe rs 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čů, e-mailové 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č, e-mailový 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