Kerberos a PAM

Matej Hašuľ, 143350<at>mail<dot>muni<dot>cz

Obsah

Kerberos

Kerberos je protokol, ktorý zaisťuje autentizáciu v sieti. Používa model klient-server, to znamená, že server si overí identitu klienta a naopak.

Pre unixové systémy existujú 2 implementácie - referenčná implementácia MIT kerberos a švédska implementácia Heimdal. Kerberos 5 je popísany v RFC 1510 (1993) a RFC 4120 (2005).

História

Kerberos vznikol na MIT ako súčasť projektu Athena. Do verzie 3 bol dostupný len pre MIT, od verzie 4 je dostupný pod BSD licenciou. Jeho vývoz mimo územie USA bol zakazaný, pretože používal algoritmus DES. Preto vznikla vo Švédsku európska implementácia kerbera - Heimdal.

Princíp fungovania

Kerberos funguje na princípe pridelovania lístkov uživateľom, tí pomocou tohto lístka preukazujú svoju identitu službe. V sieti existuje KDC (key distribution center), ktore sa skladá z

Detailnejšie rozobratá autentizácia vyzerá takto:

  1. Užívateľ zadá svoj login a heslo.
  2. Klient (užívateľov počítač) vyráta hash hesla, tento hash sa stane klúčom.
  3. Klient pošle správu AS, v ktorej sa dožaduje prístupu k službám.
  4. Ak je užívateľ v databázi, tak AS pošle klientovi späť 2 správy:
  5. Klient obdrží obe správy, správu A dešifruje a získa klient/TGS session key. So správou B nič nespraví, pretože nepozná tajný klúč TGS.
  6. Ak klient požaduje prístup k nejakej službe, tak pošle tieto dve správy TGS:
  7. TGS dešifruje autentizátor (správu D) pomocou klient/TGS session key a pošle klientovi tieto spravy:
  8. Klient obdrží obe správy a konečne sa môže autentizovať voči SS (service server, klientom požadovaná služba). Klient pošle SS:
  9. SS dešifruje lístok (Správa E) pomocou svojho tajného klúča a pošle klientovi správu aby potvrdil svoju identitu
  10. Klient dešifruje správu H a overí, či bolo časové razítko správne navýšené. Ak áno, tak môže začat používat server.

TGT a pridelené lístky expirujú po uplynutí doby platnosti, takže treba požiadať o predĺženie. Klient pomocou TGT získava lístky na ďalšie služby bez zásahu užívateľa.

Inštalácia

Ja som sa rozhdol pre Heimdal, zdrojáky su dostupné na domovskej stránke projektu. Okrem zdrojákov sa tu nachádzajú aj binárne distribúcie pre rôzne distribúcie linuxu (Debian, gentoo) a operačné systémy (FreeBSD, OpenBSD, Solaris, Mac OS X).

Inštalácia zo zdrojakov sa spraví pomocou ./configure && make && make install. Pomocou ./configure --help si možete pozriet čo všetko sa dá povoliť/zakázať pri inštalácii (IPv6, openssl,...).

Konfigurácia

Príklad konfiguračného súboru:
[logging]
 kdc = FILE:/var/log/krb5kdc.log 
 admin_server = FILE:/var/log/kadmind.log #logovanie do suboru
 default = SYSLOG #logovanie do sysolgu

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false #pouzit DNS TXT zaznam na namapovanie domeny na realm
 dns_lookup_kdc = false #vyhladat KDC pomocou DNS SRV zaznamu
 ticket_lifetime = 24h #doba platnosti listka
 clockskew = 60 #posunutie hodin - tolerancia pri porovnavani casov
 default-etypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5 #defaultne pouzivane sifry
 forwardable = yes

 EXAMPLE.COM = { #konfiguracia realmu EXAMPLE.COM
  kdc = kerberos.example.com:88 #adresa kdc servera
  admin_server = kerberos.example.com:749 #adresa administracneho servera
  default_domain = example.com
 }

[domain_realm] #mapovanie domeny na realm
 .example.com = EXAMPLE.COM #adresa hocico.example.com patri do realmu EXAMPLE.COM
 example.com = EXAMPLE.COM #adresa example.com patri do realmu EXAMPLE.COM

[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults] 
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }
Viac informacií poskytne man 5 krb5.conf.

Užitočné utility

Kerberizácia

Na kerberizáciu klienta stačí skopírovať /etc/krb5.conf a používať kerberizované programy.

Na kerberizáciu serveru treba na server skopírovať súbor /etc/krb5.conf a vytvoriť súbor /etc/krb5.keytab. Súbor /etc/krb5.keytab obsahuje názov servera (v databáze kerbera) a svoj tajný klúč. Vytvoríme ho pomocou príkazu ext v kadminovi.

Kompatibilita

Heimdal a kerberos od MIT su navzájom kompatibilné až na administračné utility. Tento protokol nebol definovaný, preto sú v ňom rozdiely, takže nemožno používať MIT kerberos a kadmin od heimdalu.

PAM (Pluggable authentication modules)

PAM je sada knižníc, ktorá integruje viacero autentizačných mechanizmov do jedného API. PAM sa skladá z knižnice libpam (aplikácie musia byt zlinkované s touto knižnicou) a z modulov, ktoré predstavujú jednotlivé autentizačné mechanizmy.Tieto moduly sa nachádzajú v /lib/security alebo /usr/lib/security.

Konfigurácia

Konfiguračný súbor sa nachádza v /etc/pam.conf, prípadne viacero súborov v adresári /etc/pam.d.

Konfiguračný súbor ma tvar:

[service] [type] [control] [module-path] [module-args]

V prípade že sa jedná o konfiguračný súbor z /etc/pam.d, tak sa pole [service] vypúšťa, miesto neho sa použije názov súboru.
Každý riadok predstavuje jedno autentizačné pravidlo, pričom pravidlá sa môžu reťaziť.

Význam jednotlivých polí:

Príklad konfiguračného súboru /etc/pam.d/system-auth

auth     required   pam_securetty.so
auth     required   pam_env.so
auth     required   pam_nologin.so
auth     sufficient pam_unix.so nullok
auth     required   pam_deny.so
account  required   pam_unix.so
password required   pam_cracklib.so retry=3
password sufficient pam_unix.so nullok md5 shadow
password required   pam_deny.so
session  required   pam_limits.so
session  required   pam_unix.so
session  optional   pam_console.so

Moduly

Literatúra