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):
C -> AS: IDC + PC + IDV
AS -> C: Ticket
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.
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í.
Uvediem niektoré konfiguračné súbory, a príklad nastavenia - to sa však bude líšiť realm od realmu.
/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
}
/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
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 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 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'.
account
-- ako overiť existenciu a platnosť užívateľského účtu, práva k danej službe a pod.auth
-- ako overiť identitu užívateľa.password
-- zmeny autentizačných mechanizmov (napr. zmeniť heslo a overiť, či je dostatočne silné a pod.)session
-- definuje, čo sa má stať pred udelením oprávnenia a po jeho odobratí. Napr. pripojenie domovského adresára užívateľa, auditing a pod.[control]
Môže byť jedno z nasledujúcich:
requisite
- zlyhanie modulu spôsobí okamžité ukončenie autentizačného procesu.required
- zlyhanie modulu spôsobí zlyhanie autentizácie, ale až po skončení ostatných zreťazených modulov.sufficient
- úspech tohoto modulu postačuje na úspešnú autentizáciu (pokiaľ predtým nezlyhal modul s 'required')optional
- úspech alebo zlyhanie tohoto modulu sa berie do úvahy iba vtedy, ak je to jediný modul daného typu asociovaného s touto službou.include
- nová direktíva, spôsobí vloženie pravidiel zo súboru špecifikovaného v [module-path].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
pam_krb5.so
- autentizácia Kerberom.pam_time.so
- kontrola prístupu podľa času.pam_stack.so
- načítanie konfigurácie zo súboru uvedeného ako argument.pam_securetty.so
- kontrola terminálu podľa /etc/securetty.pam_nologin.so
- kontrola existencie /etc/nologin.pam_unix.so
- štandardný unixový autentizačný modul.pam_limits.so
- nastavenie kvót.pam_deny.so
- autentizácia vždy zlyhá.pam_warn.so
- logovanie.Prevzaté z Jara 2006.
Validita stránky pre XHTML 1.1 bola overená pomocou www.w3.org
.