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.