Autentizační systémy Kerberos a PAM

Michal Procházka, xprocha7@fi.muni.cz


Obsah


Co je Kerberos?

Kerberos je autentizační služba vyvinutá v MIT. Hlavním účelem je umožnit autentizovat uživatele a služby mezi sebou navzájem. To jest prokázat mezi sebou svoji identitu.

Kerberos je navržen tak, aby eliminoval opětovné zadávaní jména a hesla. Jakmile jednou uživatel prokáže svoji identitu vůči Kerberovi, pak programy, které vyžaduji autentizaci a umí spolupracovat s Kerberem, budou považovat uživatele za důvěryhodného.

Kerberos je distribuován ve dvou implementacích:


Princip Kerbera

Pojmy systému Kerberos:

Popis autentizace:

  1. Klient A pošle žádost KAS o spojení s jiným serverem B.
  2. Pokud je klient A a server B v databázi KAS, pak KAS vygeneruje dočasný klíč TempKey, který bude využit při komunikaci mezi klientem A a TGS. TempKey KAS zašifruje tajným klíčem klienta, který má uložen v databázi. Dále vytvoří TGT, který slouží ke komunikaci s TGS, takže je zašifrován tajným klíčem TGS (tajný klíč zná jen KAS a TGS). TGT obsahuje též dočasný klíč. Obě zprávy jsou zaslány zpět klientovi.
  3. Klient A rozšifruje první zprávu pomocí svého hesla a získá tak dočasný klíč pro komunikaci s TGS. Klient A vytvoří autentizátor (authenticator). Autentizátor obsahuje jméno klienta A, adresu a časové razítko. Klient A zašifruje dočasným klíčem, který obdržel od KAS. Klient A dále pošle TGS žádost o lístek pro server B, žádost obsahuje jméno serveru B, TGT (TGT je zašifrován klíčem TGS) a zašifrovaný autentizátor.
  4. TGS rozšifruje TGT svým tajným klíčem a získá dočasný klíč, kterým rozšifruje autentizátor a zkontroluje jeho pravost. Pokud je vše v pořádku, pak TGS vytvoří nový dočasný klíč, který bude využíván k šifrování komunikace mezi klientem A a serverem B. Nový dočasný klíč začlení do lístku, kterým se bude klient A prokazovat serveru B, lístek je zašifrován tajným klíčem serveru B.
  5. Klient A ze zaslané zprávy získá dočasný klíč pro komunikaci s cílovým serverem B, který vytvořil TGS. Vytvoří nový autentizátor, který zašifruje dočasným klíčem. Cílovému serveru pošle lístek, který obdržel od TGS (zašifrovaný klíčem cílového serveru B) a zašifrovaný autentizátor.
  6. Cílový server B rozšifruje lístek i autentizátor, zkontroluje časovou značku a adresu jak u lístku, tak i autentizátoru. Server B si je v tuto chvíli jist identitou klienta A, dále klient A i server B sdílejí tajmenství, kterým šifrují komunikaci.

Zjednodušená verze protokolu:
L - doba platnosti
k - klíč
E - šifrování
T - časové razítko
n - náhodné číslo
Ticket B = EKBT(k, "A", L), Authenticator = Ek("A", TA)

  1. A → T: "A", "B", nA
  2. A ← T: TicketB, EKAT(k, nA, L, "B")
  3. A → B: TicketB, Authenticator
  4. A ← B: Ek(TA)


Instalace Kerbera

Nainstalovat si Kerbera, zdrojové kódy popř. binárky lze stáhnout z:
 MIT Kerberos: http://web.mit.edu/kerberos/www/dist/index.html
 Heimdal: ftp://ftp.pdc.kth.se/pub/heimdal/src/

Po instalaci Kerbera editujeme soubor /etc/krb5.conf:

Ukázka souboru krb5.conf:

[libdefaults]
    default_realm = LAB.FI.MUNI.CZ

[realms]
    LAB.FI.MUNI.CZ = {
    	kdc = kerberos.lab.fi.muni.cz
    	kdc = kerberos-1.lab.fi.muni.cz
    	admin_server = kerberos.lab.fi.muni.cz
    {

[logging]
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmin.log
    default = FILE:/var/log/krb5lib.log

soubor může ještě obsahovat sekce:
appdefaults - defaultní hodnoty pro Kerberos aplikace
domain_realm - určuje vazby mezi doménami a subdomenami a realmy, dále je tato volba nutná pokud je název implicitní domény ruzný od názvu realmu

Záznamy default_realm a kdc nemusíme nastavovat, pokud nastavíme hodnoty TXT a SRV v DNS záznamech.

Dále editujeme soubor /usr/local/var/krb5kdc/kdc.conf, soubor má stejnou strukturu jako krb5.conf. Může však obsahovat pouze tyto sekce kdcdefaults, realms, logging
Ukázka souboru kdc.conf:

[kdcdefaults]
#nastavení kompatibility s Kerberos 4
 v4_mode = nopreauth

#acl_file - soubor s právy pro uživatele, kteří chtějí přistupovat k Kerberos databázi
 acl_file = /var/kerberos/krb5kdc/kadm5.acl

dále musíme vytvořit databázi na KDC serveru:

/usr/local/sbin/kdb5_util create -r LAB.FI.MUNI.CZ -s /usr/local/var/krb5kdc/principal - parametr -r určuje REALM a parametrem -s vytvoříme klíč pro server. Pokud neuvedeme cestu k souboru s databází, použije se implicitní adresář /usr/local/var/krb5kdc/).

Vytvoříme ACL (Access Control List) soubor, jméno souboru by mělo souhlasit s parametrem "acl_file" v souboru kdc.conf. Implicitní soubor je /usr/local/var/krb5kdc/kadm5.acl. Tento soubor obsahuje přístupová práva k databázi Kerbera.
Ukázka souboru kadm5.acl:

Kerberos_principal		permissions     [target_principal]	[restrictions]
*/admin@LAB.FI.MUNI.CZ  	* 

Dalším krokem je přidání uživatelů do databáze. Nejprve musíme přidat admin účet, protože v databázi zatím žádný účet není. Správa Kerbera se provadí pomocí kadmin nebo kadmin.local.

Přidání uživatele admin:

/usr/local/sbin/kadmin.local -q "addprinc admin/admin"

Nyní můžeme spustit Kerbera pomocí příkazu:

/usr/local/sbin/krb5kdc
Pokud chceme spustit i administraci Kerbera zadáme:
/usr/local/sbin/kadmind
Kontrolu zda vše běží správně můžeme provést například takto:
shell% tail /var/log/krb5kdc.log
Dec 02 12:35:47 beeblebrox krb5kdc[3187](info): commencing operation
shell% tail /var/log/kadmin.log
Dec 02 12:35:52 beeblebrox kadmind[3189](info): starting


Replikace Kerbera

Každý z KDC potřebuje účet v Kerberos databázi. Pokud běží kadmin deamon, můžeme tyto účty založit z libovolné stanice, jinak použijeme kadmin.local na KDC serveru.

Ukázka vytvoření účtu pro stroj kerberos.lab.fi.muni.cz (master KDC) kerberos-1.lab.fi.muni.cz (slave KDC):

shell% /usr/local/sbin/kadmin
kadmin: addprinc -randkey host/kerberos.lab.fi.muni.cz
kadmin: addprinc -randkey host/kerberos-1.lab.fi.muni.cz
Master KDC nemusí mít účet v Kerberos databázi, ale je to užitečné pro případ, kdybychom chtěli slave a master KDC prohodit.

Dále pro každý s KDC vytvoříme keytab, pro slave KDC vytvoříme soubor /usr/local/var/krb5kdc/kpropd.acl, upravíme /etc/inetd.conf a /etc/services pro každý KDC. Na slave KDC spustíme /usr/local/sbin/kpropd.

Nakonec provedeme replikaci databáze (replikaci databáze je vhodné provádět pravidelně), na master KDC spustíme:

/usr/local/sbin/kdb5_util dump /usr/local/var/krb5kdc/slave_datatrans
a pro každý slave KDC spustíme:
/usr/local/sbin/kprop -f /usr/local/var/krb5kdc/slave_datatrans kerberos-1.lab.fi.muni.cz


Co je PAM?

Linux-PAM (Pluggable Authentication Modules for Linux) je sada knihoven, které umožňují jak budou aplikace ověřovat uživatele. Jinak řečeno, pro změnu autentizace uživatelů není potřeba přepisovat/rekompilovat jednotlivé aplikace. Vznik PAMu byl podmíněn rozvojem autentizačních metod. Zvýšila se potřeba rychlé a spolehlivé autentizace, to znamenalo vznik mnoha různých autetizačních metod. Upravovat každý program pro určitou autentizační metodu by bylo velice neefektivní, proto vznikl PAM, tvoří meziúroveň mezi aplikací a autentizačním mechanismem. PAM podporuje různé druhy autentizace jako například: Kerberos, RSA, smart cards, DCE. PAM je součásti vetšiny Linuxových distribucí jako Debian 2.2 a novější, Red Hat 5.0 a novější, dále je podporován FreeBSD od verze 3.1, NetBSD, Solaris, Irix, ...


Konfigurace PAM

Konfigurace PAMu je uložena buď v jediném souboru /etc/pam.conf a nebo v adresáři /etc/pam.d jsou uloženy jednotlivé konfigurační soubory vztahující se ke konkrétním službám/aplikacím. V adresáři /lib/security jsou dynamické knihovny, které využívají aplikace k autentizaci.

Ukázka souboru /etc/pam.d/

#module-type	control-flag   	module-path   	arguments

# The PAM configuration file for the cron daemon
#
account    	required	pam_unix.so
auth       	required	pam_unix.so 	nullok
auth       	required	pam_env.so
session    	required	pam_unix.so


Stručný popis nejpoužívanějších voleb:
Používáme-li jedinný soubor /etc/pam.conf, pak před module-type je ješte sloupec service-name, kde je uvedeno jméno služby/aplikace.

module-type

control-flag

module-path - jak sám název napovídá určuje se cesta k modulu

arguments - seznam argumentů, které jsou předány modulu při spuštění


Moduly PAM

Stručný popis základních modulů PAM:

pam_nologin.so - standardní Unixová autentizace s využitím nologin
pam_deny.so - blokuje přístup k aplikaci
pam_warn.so - loguje informace o pokusu přihlášení a změnu hesla
pam_unix.so - tento modul poskytuje základní Unixovou autentizaci (/etc/shadow, /etc/passwd) /


Zdroje

Kerberos
PAM
Skripta PV157 - Autentizace a řízení přístupu