Kerberos / PAM

Martin Hinca, 99212 <$uco@mail.muni.cz>


Obsah


Kerberos

Všeobecné informácie

Kerberos je sieťový autentizačný protokol založený na Needham-Schroederovom symetrickom protokole, navrhnutý za účelom silného overovania totožnosti v klient/server prostredí. Jeho popis a implementácia vznikla ako súčasť projektu Athena na MIT. Prvé tri verzie boli vyvinuté ako experimentálne, zverejnená bola až štvrtá verzia. Piata sa potom stala rozšíreným internetovým štandardom a nedávno (v RFC 4120 z roku 2005) bola jej špecifikácia ďalej vylepšená.

Needham-Schroederov protokol má za úlohu založiť tzv. session key medzi dvoma stranami na sieti, za použitia trusted third party. Kerberos používa autentizačný server, schopný autentizovať užívateľov, ale aj stroje. Používa k tomu symetrické kľúče, naopak nepoužíva PKI (vo verzii 4). Key distribution center (KDC) dá užívateľovi ticket, ktorý je možné použiť na autentizáciu v rámci realmu. Kerberos je možno využiť na zabezpečenie inegrity, autentizácie, a bezpečnosti dát.

V terminológií Kerbera sa správa obsahujúca session key šifrovaná tajným kľúčom nazýva ticket, alebo lístok. Lístky bývajú spravidla očíslované, a obsahujú aj časové známky, podľa ktorých server môže identifikovať aktuálne a staré session kľúče. Životnosť lístkov je časovo obmedzená typicky na niekoľko hodín, podľa bezpečnostnej politiky. Po vypršaní tejto doby je potrebné získať nový ticket. Do lístkov sa pre zvýšenie bezpečnosti tiež vkladá adresa pracovnej stanice, ktorá je s lístkom spojená.

Jednoduchý model princípu autentizácie pomocou Kerbera, kde sa klient (C) autentizuje serveru (V) pomocou autentizačného serveru (AS):

  1.  C -> AS: IDC + PC + IDV
  2. AS ->  C: Ticket
  3.  C ->  V: IDC + Ticket

Ticket = EKv(IDC + PC + IDV)
Detailnejší popis funkcionality

Zameriam sa najmä na verziu 5, kde je jednou s výraznejších zmien zavedenie ticket-granting service (TGS). Dôvod na zavedenie TGS je jednoduchý: pôvodný protokol pri každom prístupe na nový server vyžaduje, aby užívateľ zaslal novú požiadavku a dostal novú odpoveď od KDC. Každá odpoveď je šifrovaná súkromným kľúčom užívateľa a preto je nevyhnutné vždy zadávať heslo. To vedie k používaniu jednoduchých hesiel a nadmernému množstvu šifrovanej komunikácie, čo sú neželané efekty. Preto Kerberos rozdeľuje KDC na dve samostatné služby: autentizačnú službu, čiže AS, a TGS. AS je analógiou pôvodného KDC a udržuje databázu kľúčov užívateľov. Namiesto žiadania lístka priamo pre aplikačný server užívateľ najskôr žiada ticket pre TGS, ktorý sa nazýva ticket-granting ticket, skrátene TGT alebo tiež inicializačný ticket. Na základe tohto lístka je možné požiadať TGS o vydanie lístka pre aplikačný server. TGS udržuje databázu kľúčov aplikačného serveru a na požiadanie vygeneruje session kľúč pre reláciu, ktorý zašifruje session kľúčom vydaným spolu s lístkom TGT. Týmto spôsobom sa systém vyhne opakovanému zadávaniu hesla. Životnosť lístka TGT je štandardných 8 až 10 hodín.

Verzia 5 na rozdiel od 4 funguje aj pre viacero realms. KDC nemá možnosť vydávať session-keys platné mimo svoj realm, preto klientovi poskytne TGT platné v cudzom realm. Pre viac zmien viď patričnú časť Kerberos FAQ.


Kerberos a tučniak

V tejto časti opíšem základy konfigurácie implementácie Heimdal. Túto je možné získať buď compilovaním zdrojového kódu, (pozor na dependecies na konkrétnych verziách knižníc,) alebo pre lenivších je možnosť stianuť balíčky priamo pre niektorú z distribúcií.


Konfiguračné súbory

Uvediem niektoré konfiguračné súbory, a príklad nastavenia - to sa však bude líšiť realm od realmu.

Súbor /etc/krb5.conf

[libdefaults]

default_realm = LAB.FI.MUNI.CZ
forwardable = yes
forward = yes
encrypt = yes

[realms]

LAB.MUNI.CZ = {
kdc = doto.lab.fi.muni.cz:88
admin_server = doto.lab.fi.muni.cz:749
}

[domain_realm]

.lab.fi.muni.cz = LAB.FI.MUNI.CZ
lab.fi.muni.cz = LAB.FI.MUNI.cz

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

[appdefaults]
pam = {
debug = false
ticket_lifetime = 24000
renew_lifetime = 24000
forwardable = true
krb4_convert = false
}

Súbor /var/heimdal/kdc.conf

[kdc]

require-preauth = yes
admin_server = doto.lab.fi.muni.cz
logging = 0-8/FILE:/var/heimdal/kdc.log
acl_file = /var/heimdal/kadm5.acl
key-file = /var/heimdal/m-key


Užitočné programy súvisiace s Kerberom

kadmin: textový interface na správu kerbera, umožňuje meniť množstvo nastavení, viď $ man kadmin

kinit: vytvorí a do medzipamäte uloží TGT

kdestroy: umožňuje zrušiť platnosť lístku

klist: vypíše zoznam lístkov v cache

kpasswd: zmení užívateľovi heslo

ksu: kerberizovaný su

kshd: kerberizovaný remote shell server

krdist: kerberizovaný rdist

...užitočné je pozrieť $ man kerberos


PAM

Úvod

PAM je zkratka pre pluggable authentication module, mechanizmus umožňujúci integráciu viacerých nízkoúrovňových spôsobov autentizácie do vysokoúrovňového API, vďaka ktorému sa môžu autentizované programy písať nezávisle na konkrétnom spôsobe autentizácie, a nemusia každý z nich implementovať. V roku 1996 vytvorili Sun Microsystems prvú verziu PAM, a postupne sa okrem Solaris rozšírili aj do AIX, HP-UX, Linux, FreeBSD, Mac OS X, a NetBSD. PAM bol vyhlásený v rámci XOpen UNIX štandardizácie za XSSO.

Keďže sa XSSO štandard líši od pôvodnej Sun API, aj mnohých ďalších aplikácií, nie všetky implementácie PAM fungujú rovnako. Toto bol jedným z dôvodov, prečo OpenBSD miesto PAM používa BSD Authentication, jednu z alternatív pochádzajúcu z BSD/OS.


Konfigurácia

Konfigurácia novších verzií sa zvyčajne ukladá do viacero súborov, ktoré sa nachádzajú v adresári /etc/pam.d/, tiež sa je možné stretnúť so súborom /etc/pam.conf, ktorý má ale nižšiu prioritu.

Konfiguračný súbor /etc/pam.conf obsahuje riadky vo formáte:

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

Syntax súborov v /etc/pam.d/ je rovnaká, až na pole [service]. Toto pole sa neuvádza a namiesto neho sa použije názov konfiguračného súboru.

Každý riadok predstavuje pravidlo, ktoré sa uplatní pri autentizáii v danom programe, pričom pravidlá sa môžu reťaziť. Tým sa môžu kombinovať rôzne autentizačné mechanizmy, ako napriklad heslo + biometrika, a podobne.

Polia v konfiguračnom súbore majú nasledovný význam:

[service]
Väčšinou je to názov aplikácie, ktora využíva služby PAM. Napr. su, či login. Existuje tiež kľúčové slovo 'other', ktoré nastavuje implicitnú konfiguráciu, ktorá sa použije, keď danému programu nevyhovie žiadna iná konfigurácia.

[type]
Jedno z kľúčových slov 'account', 'auth', 'password' a 'session'.

[control]
Môže byť jedno z nasledujúcich:

Je možné tiež presne špecifikovať, aká akcia sa má vykonať v závislosti na návratovom kóde modulu.

[module-path]
Absolútna alebo relatívna cesta k modulu. Relatívna cesta je relatívna vzhľadom k /lib/security.

[module-arguments]
Argumenty modulu oddelené medzerou. Dokumentované sú pre každý modul zvlášť.

Príklad konfiguračného súboru:

$ cat /etc/pam.d/login																
#%PAM-1.0
auth       required     pam_securetty.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth

$ cat /etc/pam.d/system-auth
#%PAM-1.0
auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       required     pam_deny.so
account    required     pam_unix.so
password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   required     pam_deny.so
session    required     pam_limits.so
session    required     pam_unix.so 

Užitočné moduly

Prevzaté z Jara 2006.


Relevantné odkazy


Validita stránky pre XHTML 1.1 bola overená pomocou www.w3.org.