Autentizační systémy

Bukal Tomáš, xbukal@fi.muni.cz


Obsah


Úvod

Kerberos je autentizační protokol. Původ má v iniciativě OSF DCE (Open System Foundation, Distributed Computing Environment). Požadovalo se, aby autentizační systém byl bezpečný (musí zamezit maškarádě), aby byl spolehlivý (neustále v provozu), transparentní (uživatel se jednou přihlásí a může opakovaně používat síťové služby), úměrně složitý (použitelný pro tisíce uživatelů, modulární a s distribuovanou architekturou). Kerberos byl vytvořen Massachusetts Institute of Technology (MIT), používá kryptografii s tajným klíčem. Je volně stáhnutelný s podobnými autorskými právy použitými u BSD a X Window System.

Princip fungování

Uživatel si otevře relaci na svém počítači. Pošle přihlašovací jméno, které je zpracováno procesem pro otevření relace. Tento proces nazývaný "přihlašovací klient" předá přihlašovací jméno uživatele autentizačnímu serveru označovanému jako "AS". Tento server vyhledá v databázi Kerbera heslo uživatele, z něhož vygeneruje tajný klíč, kterým zašifruje první pověřovací listinu (TGT, Ticket Granting Ticket) vrácené klientovi. Přihlašovací klient listinu přijme a vyžádá si od uživatele zadání hesla, ze kterého vygeneruje stejným postupem jako server tajný klíč. Pokud tímto klíčem správně dešifruje přijatou zašifrovanou listinu, uživatel se může přihlásit. V listině TGT je uvedena specifikace serveru TGS (Ticket Granting Server) autentizujícího přístup ke službě. Uživatel mající úspěšně dešifrovanou listinu je oprávněn po serveru požadovat pověřovací listiny pro jednotlivé obsluhovacé aplikační servery - tikety a opakovaně používat různé služby.
Při navazování komunikace se vzdáleným počítačem je nutné mít právě listinu, ve které je uvedeno který server provedl autetifikaci. Mimo jiné také obsahuje časovou známku a dobu po jakou tato listina platí. Jelikož je serverů více, je nutno, aby si data mezi sebou vyměňovaly. Tomuto se říká replikace. Po uplnutí doby platnosti tiketu je nutno, aby se uživatel znovu autentifikoval. Je tedy také mutné synchronizovat čas.

Rozdíl mezi MIT Kerberos a Heimdal

U klientů je rozdíl v konfiguračním souboru /etc/krb5.conf. U MIT je lepší použít stávající konfigurační soubor, kdežto i u Heimdal, lze nakonfigurovat celý od začátku.

PAM

PAM (Pluggable Authentication Modules) je knihovna pro autentizaci uživatelů. Knihovna obsahuje několik modulů, které se využívají při programování přístupu k uritým aplikacím. Aby se při změně způsobu autentizace nemusel měnit kód každého programu, byla vyvinuta právě tahle knihovna. Při změně se totiž mění jen její kód a prototypy funkcí zůstávají. Lze konfigurovat jednotlivé služby, pro které existují konfigurační soubory. V adresáři /etc/pam.d jsou soubory s názvem služeb. Soubory obsahují pravidla, kde první položka znamená typ, druhá ověření, další cestu k modulu a poslední jsou argumety modulu. Typ může být třeba auth, který znamená, že se ověřují data uživatele (jméno, heslo). U tohoto typu lze použít ověření sufficient a modul /lib/security/pam_rookok.so, což bude znamenat, že služba se může použít, jelikož je postačující, že uživatel je root. Pokud ovšem uživatel root není, jde se na další položku při ověřování. Zde by už mělo být ověřování nastaveno na required, pokud musí být podmínky splněny. Jako modul zde uvedeme /lib/security/pam_stack.so service=system-auth, což znamená, že se vyhodnocení uloží na zásobník. Pokud je vrácena chyba, ověření selže, pokud neselže, uživatelova data jsou ověřena. Existují další typy např. password znamená změnu hesla, account ověřuje typy služeb (zda vypršelo heslo, zda má uživatel právo na použití určité služby, atd.), session je skupina úloh, které pokrývají věci, které by měly být hotové před spuštěnou službou a po jejím ukončení. Např. namoutování domovského adresáře.
Existují další konfigurační soubory umístěné v adresáři /etc/security. Je to např.:
access.conf: tabulka pro správu přihlašování. Jednotlivá práva a omezení jsou na řádcích. Hodnoty jsou odděleny dvojtečkami. První políčko znamená přístup, který může bý budĄpovolen (+) nebo zamítnut (-). Další políčko je pro výpis uživatelů, kterých se to týká, jména jsou odděleny mezerami. Lze použít i ALL EXCEPT (pro všechny kromě...). Do poslední položky se udává, pro které terminály omezení platí. Lze použít jména tty pro lokální přihlášení, pro vzdálené název počítače, ale i pro domény uvozené tečkou. Lze zadat i IP adresu končící tečkou a předdefinovaná slova ALL a LOCAL (pro všechny terminály a jen pro lokální). limits.conf: slouží k nastavení limitů pro uživatele. Soubor obsahuje jednotlivé položky, přičemž sloupečko po řadě jsou doména, typ, položka, hodnota. Doména může být uživatel, skupina se syntaxí @skupina a nebo * pro implicitní nastavení. Typ nabývá dvou hodnot, a to soft a hard pro vynucení lehkých či tvrdých pravidel. Položka může nabývat nejvíce hodnot, z nichž uvedeme jen pár. Např. nofile - maximální počet otevřených souborů, cpu - v minutách největší využití procesoru, nproc - maximální počet procesů, maxlogins - kolikrát může být uživatel přihlášen.
group.conf: podobně jako u time.conf. Navíc je položka pro určení skoupin, které uživatel dědí po splnění předešlých podmínek. time.conf: konfigurace přístupu v určitý čas. Lze nastavit pro jakou službu, z jakého terminálu, jaký uživatel a v jaký čas se uživatel nebo skupina uživatelů můžou přihlásit. Nastavení času je logický seznam. Dny jsou reprezentovány dvěmi počátečními písmeny. Chcete-li, aby se uživatel přihlásil pouze v pondělí, ve středu a v pátek, vložíte sekvenci MoWeFr. Opakované dny se vymazávají. Tedy MoMo znamená nikdy a MoWk jsou všechny dny kromě pondělí. Všechny kombinace mohou být: Mo, Tu, We, Th, Fr, Sa, Su, Wk, Wd, Al. Za dny se píše čas "od-do" počítaje 24 hodin. !Al0000-2400 znamená tedy nikdy.


LDAP

Lightweight Directory Access Protocol byl původně vyvinut, aby umožňoval přístup k databázi X.500. LDAP se defacto standard pro internetové adresářové služby. Obsahuje mnoho funkcí, pomocí nichž se stává ideální pro poskytování síťových informačních služeb s podporou šifrovacích algoritmů, přístupovými listy, rychlým čtením a přístupem. Databáze může obsahovat jakákoliv data. Může obsahovat seznamy uživatelů, kteří pracují v určitých firmách, databázi těchto firem, její bodovy a jejich majetek. LDAP může uchovávat u každého uživatele také heslo, které se používá pro autentizaci, a které může být změněno pomocí PAM. Jednoduchá LDAP doména je strukturovaná jako NIS doména. Existují masters, slaves a clients. Clients se můžou dotazovat masters nebo slaves, ale všechny změny musí jít přes masters. Doménové jméno je jen lehce odlišné od DNS. LDAP domény mohou používat jména organizací a zemí, např. 'O=Acme Widgets, C=US' nebo hierarchický doménový formát .dc=acme, dc=com'. Klient se může, ale nemusí autentizovat serveru, záleží na konfiguraci klienta a typu informací, které vyžaduje. Přístup k volně šiřitelným informacím (jako třeba port na pro určitou službu) není autentizován, zatímco informace o jakýmkoliv heslu popřípadě jejich změny vyžadují autetizaci. Větší organizace dělí své LDAP domény na subdomény. LDAP tohle dělení umožňuje a uživatele odkazuje na jiné servery (stejná metoda je použita slaves serverů předat požadavky na změny master serverům). Takže 'dc=eng, dc=acme, dc=com' nebo 'OU=Engineering, O=Acme Widgets, C=US' mohou být subdomény v síti Acme Widgets. Strom může být libovolný. Chceme-li vést údaje o majetku školy, doména může být škola a subdoména třeba patra, pak třeba třídy, atd.
Pokud máte zájem nainstalovat si LDAP server pro Linux, znamená to, že si musíte nainstalovat OpenLDAP server. Po instalaci je nutné editovat konfigurační soubor /etc/slapd.conf a změnit jméno organizace, binddn a heslo. Pak lze vytvořit databázi. Pokud je použito více serverů, je nutná jejich replikace. Při každé změně databáze (ať je to přidání položky či modifikace), server posílá replikaci ostatním serverům, které má v seznamu. To proto, aby data byla vždy aktualizována a dotazy se nemusely zasílat jen jednomu serveru. Pro výměnu dat slouží slurpd. Na počítači, který bude provádět replikaci, se musí v konfiguračním souboru LDAP serveru přidat řádek binddn="cn=replicator, o=SomeOrgName', jenž se shoduje s hodnotou, která se nachazí v téže konfiguračním souboru master serveru. Lze také nastavit soubor, do kterého se bude zapisovat historie. slouží k tomu položka replogfile, za níž následuje cesta k souboru.
Jelikož LDAP uchovává jakékoliv informace, je nutné vědět, jakého typu jsou. K tomuto účelu slouží schemata. Jsou uložena v /etc/openldap/schema. Obsahují typy a třídy. Vyjádření typu je číslicové, které si uchovává samotný program, pro snadnější zapamatování obsahuje i své jméno, popis a syntax. Pro příklad atributu vezmu ipHostNumber:
attributetype ( 1.3.6.1.1.1.1.19 NAME 'ipHostNumber'
DESC 'IP addresses as a dotted decimal, eg. 192.168.1.1., omitting leading zeros'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} );

Třídy jsou podobné atributům, jen definují, jaké položky se vyplnit musí a které můžou. Příklad je třída ipHost:
objectclass ( 1.3.6.1.1.1.2.6 NAME 'ipHost' SUP top AUXILIARY
DESC 'Abstraction of a host, an IP device. The distinguished value of the cn attribute denotes the host"s canonical name. Device SHOULD be used as a structural class'
MUST ( cn $ ipHostNumber )
MAY ( l $ description $ manager ) )

Pro práci s LDAP se používají nástroje ldapsearch, ldapadd, gq a jiné. Příkaz ldapadd a ldapmodify jsou nástroje pro změnu položek. Informace o položkách načítají ze standardního vstupu, lze však přepínačem -f přesměrovat vstup ze souboru. Programy umějí další přepínače, např. -b, který říká, že hodnoty začínající '/' jsou binární, LDAP totiž umí ukládat mimo jiné i obrázky, jenž by se mohly hodit pro náhled k různým produktům nebo na IS, který zobrazuje fotografie žáků, další důležitý přepínač je -r, který nahradí stávající hodnoty implicitními. Také -n lze použít pro výpis, co všechno by se příkazem modifikovalo, ale žádné změny neprovede, -k pro použití autentizace, pokud máme platný TGT a mnoho dalších (viz. man ldapadd/ldapmodify).
Příkaz ldapsearch vyhledává data pomocí zadaného filtru, který může být reprezentace LDAP filtru definovaného v RFC 1558. Jako přepínačce lze uvést např. -n, který se chová stejně jako u ldapadd/ldapmodify, stejně tak i -k, přepínač -t záznamy ukládá do dočasných souborů, vhodné pro ukládání netextových informací (např. obrázky), -A vypíše pouze atributy bez hodnot, -f čte řádky ze souboru, který je zadán za přepínačem, vykonavajíc hledání pro každý řádek a opět spostu jiných přepínačů.
Zadávání příkazů do příkazové řádky se lze jednoduše vyhnout použitím gq, což je grafický nástroj, pro práci s LDAP.

Příklady práce s LDAP

Rekněme, že soubor /tmp/entrymods existuje a má následujcí obsah:

dn: cn=Modify Me, o=University of Michigan, c=US
changetype: modify
replace: mail
mail: modme@terminator.rs.itd.umich.edu
-
add: title
title: Grand Poobah
-
add: jpegPhoto
jpegPhoto: /tmp/modme.jpeg
-
delete: description
-

příkaz ldapmodify -b -r -f /tmp/entrymods nahradí obsah 'Modify Me' atributem mail s hodnotou 'modme@terminator.rs.itd.umich.edu', přidá titulek s hodnotou 'Grand Poobah' a obsah souboru '/tmp/modme.jpeg' (JpegPhoto) a odstraní atribut description

Pokud soubor /tmp/newentry existuje a má obsah:

dn: cn=Barbara Jensen, o=University of Michigan, c=US
objectClass: person
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: bjensen@terminator.rs.itd.umich.edu
uid: bjensen

příkaz ldapadd -f /tmp/newentry přidá novou položku Babs Jensen a hodnoty přečte ze souboru /tmp/newentry.

Příkaz ldapsearch "cn=mark smith" cn telephoneNumber vyhledá v podstromu položky s commonName s hodnotou 'mark smith', vypíší se jen commonName a telephoneNumber

ldapsearch -u -t "uid=mcs" jpegPhoto audio vyhledá položky s uživatelovým id="mcs", a uloží obrázky i audia do dočasných souborů.


PosixAccount, ShadowAccount

Pomocí PAM lze si také zvolit, jakým způsobem se budou primárně ověřovat hesla. Jak jsem již napsal v sekci PAM, lze si nastavit, jaké knihovny se využívají u jakých služeb. Lze použít knihovnu /lib/security/pam_pwdb.so k níž se váže konfigurační soubor /etc/pwdb.conf, který obsahuje názvy výpis po řádcích, a každý řádek obsahuje seznam databází. Názvy jsou oddělené znaménkem '+'. Každý řádek ukazuje na kolekci databází, které jsou spojeny a prohledávány při přihlášení uživatele. Knihovna vybere ten řádek, který první obsahuje položku požadovaného uživatele. Současně lze vybrat z databází nis, unix, radius a shadow.

SASL

Simple Authentication and Security Layer je metoda pro podoporu autentizace do protokolů. Při použití SASL protokol zahrunuje příkaz pro identifikaci a autentizaci uživatele. Chrání komunikaci protokolů, ke kterým se vložil. Je to vrstva mezi protokolem a spojením se vzdáleným počítačem.

Jak na LDAP v unixu

Konfigurační soubor /etc/nsswitch.conf obsahuje služby a způsob jejich prohledávání. Napřed se napíše do souboru služba následovaná dvojtečkou, a pak se postupně zapisují položky k prohledání. Hodnoty položky mohou být files (používájí se lokální soubory), db (používá se lokální databáze (.db soubory), dns (DNS) a jiné. Uživatele a jeho heslo tedy můžeme hledat buď v nějaké databázi (LDAP), pokud položka nebude nalezena, lze přejít k vyhledávání v lokálních souborech. Pokud mezi jednotlivé položky se vloží '[NOTFOUND=return]' a vyhledávání v předchozí položce selže, hledání se ukončí.
Při různých dotazech na servery se zatěžuje síť a samotné servery, je tedy výhodné uchovávat výsledky určitých dotazů v paměti. Právě pro tenhle účel slouží daemon ncsd, který uchovává po nějakou dobu v paměti žádaná data.

Zdroj

Veškeré uvedené konfigurace byly prováděny na RedHat.
Volná implementace protokolu Kerberos je přístupná na Massachusetts Institute of Technology
PAM moduly lze stáhnout kdekoliv, bývají však často implicitně instalovány se systémem.
OpenLDAP lze stahnout zde.