Kerberos je sieťový protokol umožňujúci vzájomnú autentifikáciu klienta a serveru. Vyžaduje tretiu, dôveryhodnú, stranu. Protokol je vhodný na nasadenie na nezabezpečených sietiach, nakoľko zaručuje integritu posielaných dát a bráni sa útokom typu replay. Bol vyvinutý na MIT v druhej polovici osemdesiatych rokov ako vedľajší produkt projektu Athena. Jeho meno pochádza z gréckej mytológie, kde označuje trojhlavého psa strážiaceho východ z podsvetia. Spolu s protokolom bola na MIT vytvorená (takmer) rovnomenná aplikácia využívajúca tento protokol. Vzhľadom na to, že zákony Spojených Štátov neumožňovali "vývvoz" kryptografie(a Kerberos obsahoval DES) vznikla vo Švédsku(KTH) jeho non-US alternatíva nazývaná KTH-KRB. Posledná "Európska" implementácia tohto protokolu(vo verzii 5) sa nazýva Heimdal.
Kerberos je trojstranný protokol, kde vystupuje klient, server a ďalší, dôveryhodný, server. Tento sa nazýva Key Distribution Center(KDC) a logicky sa delí na dve hlavné časti: Authentication Server (AS) a Ticket Granting Server (TGS). KDC pozná heslá všetkých užívateľov a služieb na spravovanej sieti.
Klient sa autentifikuje voči KDC tak, že kontaktuje AC a vyžiada si nový ticket, ktorý ho v budúcnosti bude oprávňovať k získaniu ticketov pre jednotlive služby.
AC si pošle klientovi správy, ktore obsahujú Session Key, ktorý je zašifrovaný hashovaným heslom z databázy KDC a spomínaný Ticket Granting Ticket, ktorý
je zašifrovaný privátym kľúčom TGS. Ticket Granting Ticket sa skladá z id klienta, jeho sieťovej adresy, session key a časovej platnosti tiketu.
Klient si pomocou svojho zahashovaného hesla(zadaného užívateľom) rozšifruje správu obsahujúcu session key.
V prípade, že chce klient pristúpiť k nejakej službe, tak kontaktuje TGS poslaním (stále) zašifrovaného TGT, id služby, ktorej sa dožaduje a svoje id spolu s timestampom zašifrované pomocou Session Key.
TGS si teraz môže prečítať obsah TGT. Pomocou Session Key(ktorý bol obsiahnutý v TGT) si odšifruje druhú správu. Následne odošle klientovi Client-Service Ticket, ktorý obsahuje id klienta,
jeho adresu, dobu platnosti a client-server session key zakryptovanú pomocou tajného kľúča služby. Ďalej mu pošle client-server session key zašifrovaný pomocou pôvodného Session Key.
Teraz sa klient potrebuje autentifikovať voči samotnej službe - Pošle jej tiket, ktorý na autentifikáciu k tejto službe dostal a svoje id spolu s timestampom zašifrované pomocou client-server session key,
ktorý si dokázal prečítať pomocou Session Key.
Služba si pomocou svojho privátneho kľúča prečíta tiket a pomocou informácií v ňom si pozre aj druhú časť správy. Na záver pošle správu obsahujúcu timestamp+1 zašifrovanú pomocou
client-server key. Klient si skontroluje, či je timestamp správne zvýšený a následne zaháji využívanie samotnej služby.
-- celý tento postup sa da v zrozumiteľnejšej forme nájsť na wikipedia.org
[libdefaults] default_realm = FI.MUNI.CZ dns_lookup_realm = false dns_lookup_kdc = false forwardable = true [appdefaults] forwardable = true forward = true pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } [realms] FI.MUNI.CZ = { kdc = krb.fi.muni.cz:88 kdc = krb1.fi.muni.cz:88 admin_server = krb.fi.muni.cz:749 default_domain = fi.muni.cz } [domain_realm] .example.com = FI.MUNI.CZ example.com = FI.MUNI.CZ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.logzdroj: archiv referatov
[kdcdefaults] kdc_ports = 88 [realms] dsdoe.ornl.gov = { profile = /etc/krb5.conf database_name = /krb5/var/krb5kdc/principal admin_database_name = /krb5/var/krb5kdc/kadm5_adb admin_database_lockfile = /krb5/var/krb5kdc/kadm5_adb.lock admin_keytab = FILE:/krb5/var/krb5kdc/kadm5.keytab acl_file = /krb5/var/krb5kdc/kadm5.acl key_stash_file = /krb5/var/krb5kdc/.k5stash kdc_ports = 88 kadmind_port = 749 max_life = 10h 0m 0s max_renewable_life = 7d 0h 0m 0s master_key_type = des-cbc-crc supported_enctypes = des-cbc-crc:normal des:v4 }zdroj: archiv referatov
V databáze sa nachádzajú informácie o jednotlivých nodách v spravovanej sieti. Pre databázu si vytvoríme adresár
#mkdir /var/heimdalĎalej si pomocou programu kstash nastavíme master key, ktorým bude databáza šifrovaná.
# kstash Master key: Verifying password - Master key:Vytvorenú databázu zinicializujeme programom kadmin. Parametrom -l ho spustime na lokálny realm. Novú nodu(principal) pridáme príkazom add. Pomocou delete môžme principal zmazať.
# kadmin -l kadmin> init MY.REALM Realm max ticket life [unlimited]: Realm max renewable ticket life [unlimited]: kadmin> add me Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: Password: Verifying password - Password:Následne môžme spustiť oboch daemonov a vyskúšať si vyžiadanie tiketu pomocou príkazu kinit.
V programe kadmin si príkazom ext vytvoríme tab súbor pre zvolený principal. Ten spolu s konfiguráciu krb5.conf nahráme na požadovaný server, kde majú bežat kerberizované služby.
Klient, ktorý chce tieto služby využívať musí taktiež disponovať konfiguračným súborom.
-Keďže jednou z najväčších slabín kerberosu je jeho single-point-of-failure, tak umožňuje fungovanie na viacerých strojoch súčastne pričom databáza je replikovaná.
PAM (Pluggable Authentication Modules) je sada knižníc, ktorá integruje viaceré nízko-úrovňové autentizačné mechanizmy do jedného API.
Pôvodne bol PAM vyvinutý v Sun Microsystems. V súčasnosti je podporovaný vo vačšine UNIXových systémov, napr. AIX, HP-UX, Solaris, Linux, FreeBSD, MacOS X a NetBSD. Pokiaľ viem, tak nie je podporovaný v Slackware a OpenBSD.
Keďže PAM uplatňuje modulárny princíp, je jednoduché napríklad pridať nový spôsob autentizácie (čítačku odtlačkov prstov) či zmeniť spôsob autentizácie v nejakom programe (chcem overovať heslá pomocou Kerbera namiesto /etc/shadow).
Celý systém sa skladá z troch súčastí:
Knižnica libpam - oproti nej sú linkované programy, ktoré chcú PAM využívať
PAM moduly - poskytujú konkrétne autentizačné mechanizmy. Moduly sa zvyčajne nachádzajú v adresári /lib/security (Solaris a niektoré UNIXy /usr/lib/security) a do pamäte sú zavádzané dynamicky
Stará sa o:
auth -- autentizace
account -- accounting
session -- ...
password -- zmena hesla
Nachádza sa v súbore /etc/pam.conf (prípadne /etc/pam.d/*) format:
service type control module-path module-args