Autentizace, PAM, LDAP

Jiří Novotný, xnovotn5@fi.muni.cz

Obsah

Co je autentizace

Proces ověření identity osoby/programu, žádající přístup do systému.

Autentizace v UNIXu

Jedná se o přihlášení ke svému účtu. Účet má vždy aspoň tři následující důležité atributy:

Klasická (tj. lokální) autentizace v UNIXu využívá tři důležité soubory:

/etc/passwd

Další informace viz man 5 passwd.

/etc/shadow

Mezi další používané soubory patří:

UNIXové systémy se mohou v některých věcech (formát souboru /etc/passwd apod.) lišit - např. NetBSD nemusí být ve všech uvedených věcech shodné s GNU/Linuxem.

Name Services Switch (NSS)

Některé důležité systémové tabulky (jako je třeba již zmiňovaný seznam uživatelů v /etc/passwd) jsou uloženy lokálně v běžných souborech. To značně ztěžuje hromadnou správu, jelikož je třeba případné změny dělat na každém počítači zvlášť.
Jedním z řešení tohoto problému byl přesun těchto tabulek na nějakou centrálně dostupnou službu a úprava/doplnění systémových volání v C knihovně. Takové řešení bylo funkční, ale značně neflexibilní. Sun Microsystems pak postoupil o krok dále a vytvořil čistší NSS, které bylo později portováno i na další UNIXové systémy.
Princip je jednoduchý. V konfiguračním souboru jsou uvedeny tzv. databáze (ekvivalentní se systémovými tabulkami), pro které jsou uvedeny zdroje. Pokud je použito podporované systémové volání, je zavolán zdroj uvedený v konf. souboru. Příklad:

  1. V konfiguračním souboru je následující řádek:
    hosts:          dns files
  2. Nějaký program zavolá funkci gethostbyname().
  3. Podle uvedeného řádku se má napřed použít zdroj dns. Musí existovat NSS modul /lib/libnss_files.so.2, ze kterého se volá funkce _nss_dns_gethostbyname(). Ta požadavek zkusí obsloužit - položí dotaz DNS serveru - a vrátí (mj.) NSS návratový kód. Podle tohoto kódu se rozhodne, zda se požadavek zkusí opakovat u dalšího zdroje v pořadí (zde files).

Návratové kódy mohou být:

Výchozí akcí pro návratový kód Success je ukončit prohledávání (Return). Naopak pro ostatní návratové kódy je výchozí akcí pokračovat s dalším zdrojem (Continue). Toto chování lze nicméně upravit:

hosts:          dns [NOTFOUND=return] files
V tomto případě se zdroj files nikdy nebude prohledávat, pokud je zdroj dns přístupný (tj. DNS je považováno za autoritativní).

Mezi obvyklé NSS databáze patří např. passwd, shadow, group, hosts, protocols, services, aj.
Hlavní NSS zdroje jsou:

Pochopitelně, každá kombinace typu databáze-zdroj nemusí být platná.
Další informace viz man nsswitch.conf.

Jelikož NSS zdroj nemusí být dostupný vždy (např. LDAP adresář může být dostupný jen ve vnitřní síti firmy), je možné výsledky NSS dotazů ukládat do vyrovnávací paměti (caching). Na to existuje několik nástrojů; často se používá nscd (name service cache daemon), který obvykle běží jako služba.
Tento démon poskytuje vyrovnávací paměť pro databáze passwd, group a hosts, přičemž pro každou z nich lze nastavit časovou platnost pro úspěšné i neúspěšné dotazy.
Další informace viz man nscd, man nscd.conf.

Pluggable Authentication Modules (PAM)

Pro tvůrce programů je UNIXová autentizace (i s použitím NSS) dost obtížná záležitost.

KonečnéMožné řešení: PAM - oddělení aplikací od informací o uživatelech.
Jinými slovy, pro různé metody autentizace oproti různým databázím uživatelů stačí, aby aplikace uměla pracovat s PAM.

Z čeho se PAM skládá? PAM je framework, do kterého patří:

PAM poskytuje služby ve čtyřech oblastech, pro různé fáze autentizačního procesu. Tyto oblasti jsou označovány jako management groups.

PAM modul je sdílená knihovna, která poskytuje nějakou funkčnost pro některé (nebo i všechny) tyto oblasti. Obvykle má dvě hlavní návratové hodnoty: OK (úspěch) a not-OK (selhání).

Jak již bylo uvedeno výše, konfigurace bývá uložena v adresáři /etc/pam.d/ a to modulárně - ve více souborech, které lze do sebe vkládat. Soubory se musí jmenovat po službě, kterou nastavují. Obsahem všech souborů jsou řádky v následujícím formátu:

Type Control Module [Module-arguments]
Služba Type Control Module Module-arguments

Řádek může mít ještě formát typu Type include|substack File - ze zadaného souboru se sem vloží všechny řádky pro oblast Type.

Dvě důležitá upozornění na závěr:

  1. Moduly se provádějí v pořadí v jakém jsou zapsány, odshora dolů. Tj. na pořadí výrazně záleží.
  2. Nerozlišují se malá/velká písmena, s výjimkou názvů/cest k souborům.

LDAP - Základní informace

Adresář

Adresářová služba

Pod pojem adresářová služba se často zahrnuje i adresář.

LDAP

Někdy se označuje pojmem LDAP i server nebo adresář, pracující s protokolem LDAP.

Příklady adresářových služeb

Vzniklo před X.500: DNS, NIS, Doména Windows (předchůdce Active Directory).

Založeno na X.500/LDAP: Red Hat Directory Server, IBM Tivoli Directory Server, eDirectory, Active Directory, OpenLDAP, ad.

Informační (datový) model

Adresářové služby, které jsou založené na X.500/LDAP, reprezentují data ve stromové struktuře, nazvané Directory information tree (DIT). Jedná se o zakořeněný strom, jehož uzly i listy jsou jednotlivé záznamy v adresáři.

Záznam

Atribut

Objektová třída

Schéma

Jmenný model

Jak je uvedeno výše, jednotlivé objekty (tj. záznamy) jsou reprezentovány stromovou strukturou DIT.
U každého záznamu některé jeho atributy (obvykle pouze jeden atribut) tvoří identifikátor: Relative Distinguished Name (RDN). Tento identifikátor musí být jedinečný mezi všemi svými sourozenci ve stromové struktuře.
Řada, skládající se z RDN záznamu a RDN všech jeho předků až ke kořenu, tvoří tzv. Distinguished Name (DN). To jednoznačně identifikuje konkrétní záznam i jeho polohu v DIT.

Příklad DN: cn=Jan Novák,ou=zamestnanci,dc=firma,dc=cz
Příklad RDN: cn=Jan Novák

Funkční model

Zahrnuje dotazování, úpravy a autentizaci (které požaduje klient a provádí server) pomocí LDAP nad DIT. Konkrétní operace jsou:

Prohledávání (search)

Srovnání (compare)

Smazání (delete)

Přejmenování (rename)

Úprava (modify)

Přidání (add)

Připojení/odpojení (bind/unbind)

Zrušení (abandon)

Bezpečnostní model

V podstatě hlavně autentizace/autorizace klienta, dále ještě zabezpečení komunikace přes SSL/TLS.

Autentizace je možná více způsoby:

Při přihlášení heslem se obvykle zadává jako jméno uživatele DN objektu, který by měl mít atribut typu userPassword nebo authPassword.

Autorizace není součástí LDAP standardu. Některé LDAP servery ale implementují tzv. Access Control List (ACL). Obecně vzato: ACL určuje, kteří autentizovaní uživatelé mohou provádět které operace (viz funkční model) nad kterými záznamy (nebo i jednotlivými atributy).

LDIF

Standardní textový formát pro reprezentaci LDAP záznamů a změn na LDAP záznamech. Široce podporován. Používá se mj. pro:

Příklad jednoho záznamu ve formátu LDIF:

    # Nejaky komentar, mozno pouze na cely radek

    dn: cn=Robert Smith,ou=people,dc=example,dc=com
    objectclass: inetOrgPerson
    cn: Robert Smith
    cn: Robert J Smith
    cn: bob smith
    sn: smith
    uid: rjsmith
    userpassword: rJsmitH
    carlicense: HISCAR 123
    homephone: 555-111-2222
    mail: r.smith@example.com
    mail: rsmith@example.com
    mail: bob.smith@example.com
    description: swell guy
    ou: Human Resources
    

Literatura