Kerberos

Kerberos je sieťový autentifikačný systém založený na princípe dôveryhodnej tretej strany. Na zvyšných dvoch stranách sa nachádza používateľ a služba, kvôli ktorej sa chce používateľ autentifikovať. Nie všetky služby a aplikácie môžu použiť Kerberos, ale pre tie, ktoré môžu, Kerberos ponúkne sieťové rozhranie, ktoré je o jeden krok bližšie k tzv. Single Sign On (SSO) - jeden podpis na všetko.

Táto časť hovorí o inštalácii a konfigurácii Kerberos servera a uvádza i niekoľko príkladov konfigurácie klienta.

Prehľad

Ak ešte Kerberos nepoznáme, bude dobré sa najskôr oboznámiť s niektorými dôležitými pojmami skôr, ako začneme nastavovať server Kerberos. Väčšina pojmov je odvodená od vecí, ktoré sú podobné v iných rozhraniach:

  • Principal (splnomocniteľ): všetci používatelia, počítače a služby poskytované servermi musia byť zadefinované ako splnomocnitelia systému Kerberos.
  • Instances (rozhrania): používajú sa na obsluhu splnomocniteľov a pre špeciálnych administratívnych splnomocniteľov.
  • Realms (pôsobiská): jedinečná sféra pôsobenia inštalácie systému Kerberos. Zvyčajne to je DNS doména prevedená na veľké písmená (NIECO.SK).
  • Key Distribution Center (distribučné centrum kľúčov): (KDC) sa skladá z troch častí, databázy všetkých splnomocniteľov, autentifikačného servera a servera poskytujúceho vstupenky. Pre každé pôsobisko musí existovať aspoň jedno KDC.
  • Ticket Granting Ticket (vstupenka poskytujúca vstupenku): je poskytovaný Autentifikačným serverom (AS). Ticket Granting Ticket (TGT) je zašifrované heslo používateľa, ktoré je známe iba používateľovi a KDC.
  • Ticket Granting Server (server poskytujúci vstupenku): (TGS) služba poskytujúca vstupenky klientom, ktorí o ne žiadajú.
  • Tickets (vstupenky): potvrdzujú identitu dvoch splnomocniteľov. Prvým splnomocniteľom - používateľom a druhým splnomocniteľom - službou, ktorú používateľ chce použiť. Vstupenky vytvoria šifrovací kľúč, ktorý bude použitý počas autentifikovaného pripojenia.
  • Keytab Files (súbory tabuliek kľúčov): sú súbory extrahované KDC databázy splnomocniteľov a obsahujú zašifrované kľúče pre služby a stanice.

Aby sme jednotlivé pojmy dali do súvisu, vedzme, že pôsobisko - Realm má najmenej jedno distribučné centrum kľúčov KDC (odporúčajú sa však dve kvôli redundacii), ktoré obsahuje a databázu splnomocniteľov - Principal. Keď sa používateľ - splnomocniteľ prihlasuje k pracovnej stanici, ktorá je nakonfigurovaná na autentifikáciu pomocou systému Kerberos, KDC vydá vstupenku poskytujúcu vstupenku (TGT), ktorá obsahuje zašifrované heslo. Ak sa heslo zhoduje s tým, ktoré zadal používateľ, používateľ je autentifikovaný a môže dostať vstupenky od servera poskytujúceho vstupenky (TGS). Vstupenky tejto služby umožnia používateľovi autentifikovať sa do ostatných služieb bez ďalšieho zadávania používateľského mena a hesla.

Kerberos Server

Inštalácia

Pred tým, ako sa pustíme do inštalácie servera Kerberos, je potrebné mať pre našu doménu správne nakonfigurovaný DNS server. Pretože pôsobisko systému Kerberos by sa podľa zvyklostí malo zhodovať s menom domény, budeme používať doménu nieco.sk, ktorej konfigurácia je popísaná v časti “Primárny hlavný menný server”.

Kerberos je protokol citlivý na čas. Preto, ak je časový rozdiel medzi lokálnym systémom a počítačom klienta väčší ako päť minút (predvolená hodnota), pracovná stanica sa nebude môcť autentifikovať. Aby sme tomuto problému zabránili, je potrebné zosynchronizovať čas použitím protokolu Network Time Protocol (NTP). Viac informácii o NTP sa nachádza v časti “Synchronizácia času pomocou NTP”.

Prvým krokom pri inštalácii Pôsobiska systému Kerberos je nainštalovanie balíkov krb5-kdc a krb5-admin-server. V príkazovom riadku zadáme:

sudo apt-get install krb5-kdc krb5-admin-server

Na konci inštalácie bude potrebné zadať názov servera Kerberos a názov Admin servera, ktoré môžu, ale nemusia byť pre pôsobisko zhodné.

Ako ďalšie vytvoríme nové pôsobisko pomocou nástroja kdb5_newrealm:

sudo krb5_newrealm

Konfigurácia

Parametre, ktoré sme zadali pri inštalácii, sa uložili do konfiguračného súboru /etc/krb5.conf. Ak budeme chcieť zmeniť nastavenia Distribučného centra kľúčov (KDC), jednoducho zmeníme nastavenia v súbore a reštartujeme démon krb5-kdc.

  1. Teraz, keď je KDC spustené, je potrebné vytvoriť používateľa s administrátorskými právami. Odporúčame použiť iné meno, ako bežne používate. Použijeme na to nástroj kadmin.local:
    sudo kadmin.local
    Authenticating as principal root/admin@NIECO.SK with password.
    kadmin.local:
    addprinc stefan/admin

    WARNING: no policy specified for stefan/admin@NIECO.SK; defaulting to no policy
    Enter password for principal "stefan/admin@NIECO.SK":
    Re-enter password for principal "stefan/admin@NIECO.SK":
    Principal "stefan/admin@NIECO.SK" created.
    kadmin.local:
    quit
    V predchádzajúcom príklade je ako Splnomocniteľ - Principal nastavený stefan, /admin je Rozhranie - Instance a @NIECO.SK predstavuje pôsobisko. "Každodenný" splnomocniteľ bude stefan@NIECO.SK a mal by mať iba normálne používateľské práva.
    [Note]

    Nahraďte NIECO.SK a stefan, pôsobiskom a menom používateľa, ktoré chcete použiť.

  2. Teraz novému používateľovi pridelíme práva (ACL). Práva sú nastavené v súbore /etc/krb5kdc/kadm5.acl:
    stefan/admin@NIECO.SK        *
    Tento záznam poskytne používateľovi stefan/admin schopnosť vykonávať ľubovoľnú operácie so všetkými splnomocniteľmi v pôsobisku.
  3. Aby sa nové ACL oprávnenia prejavili, je potrebné reštartovať krb5-admin-server :
    sudo /etc/init.d/krb5-admin-server restart
  4. Novovytvoreného splnomocniteľa môžeme otestovať pomocou nástroja kinit:
    kinit stefan/admin
    stefan/admin@NIECO.SK's Password:
    Po zadaní hesla, použijeme nástroj  klist, ktorý zobrazí informácie o TGT:
    klist
    Credentials cache: FILE:/tmp/krb5cc_1000
    Principal: stefan/admin@NIECO.SK

    Issued Expires Principal
    Jul 13 17:53:34 Jul 14 03:53:34 krbtgt/NIECO.SK@NIECO.SK
    Pre KDC je potrebné pridať záznam aj do súboru /etc/hosts. Napríklad:
    192.168.0.1   kdc01.nieco.sk       kdc01
    Adresu 192.168.0.1 nahradíme IP adresou nášho KDC.
  5. Aby klienti vedeli nájsť KDC v pôsobisku, je potrebné pridať niekoľko DNS SRV záznamov. Pridáme ich do súboru /etc/named/db.nieco.sk:
    _kerberos._udp.NIECO.SK.     IN SRV 1  0 88  kdc01.nieco.sk.
    _kerberos._tcp.NIECO.SK. IN SRV 1 0 88 kdc01.nieco.sk.
    _kerberos._udp.NIECO.SK. IN SRV 10 0 88 kdc02.nieco.sk.
    _kerberos._tcp.NIECO.SK. IN SRV 10 0 88 kdc02.nieco.sk.
    _kerberos-adm._tcp.NIECO.SK. IN SRV 1 0 749 kdc01.nieco.sk.
    _kpasswd._udp.NIECO.SK. IN SRV 1 0 464 kdc01.nieco.sk.
    [Note]

    Nahraďte NIECO.SK, kdc01 a kdc02 názvom domény a názvami primárneho a sekundárneho KDC.

    Podrobné inštrukcie o nastavovaní DNS nájdete v kapitole Služba prekladu doménových mien (DNS).

Nové pôsobisko systému Kerberos je teraz pripravené na autetifikovanie klientov.

Sekundárny KDC

Ak už máme funkčné jedno Distribučné centrum kľúčov (KDC), je dobrým zvykom vytvoriť aj sekundárne KDC pre prípad, že primárne sa stane nedostupným.

  1. Najskôr nainštalujeme balíky. Pri otázke inštalátora na Kerberos server a Admin server zadáme meno primárneho KDC:
    sudo apt-get install krb5-kdc krb5-admin-server
  2. Po nainštalovaní balíkov vytvoríme splnomocniteľa "host" (stanica) pre sekundárny KDC. V príkazovom riadku zadáme:
    kadmin -q "addprinc -randkey host/kdc02.nieco.sk"
    [Note]

    Vždy po zadaní príkazu kadmin bude potrebné zadať heslo pre pouzivatel/admin@NIECO.SK.

  3. Extrahujeme súbor tabuľky kľúčov:
    kadmin -q "ktadd -k keytab.kdc02 host/kdc02.nieco.sk"
  4. Teraz by v priečinku kde sa nachádzame mal pribudnúť súbor keytab.kdc02. Presunieme ho do priečinka /etc/krb5.keytab:
    sudo mv keytab.kdc02 /etc/krb5.keytab
    [Note]

    Ak ste použili inú cestu k súboru keytab.kdc02, použite tú.

    Z tabuľky kľúčov sa pomocou nástroja klist dá vypísať aj zoznam splnomocniteľov, čo môže byť užitočné pri riešení problémov:
    sudo klist -k /etc/krb5.keytab
  5. Ako ďalšie je potrebné vytvoriť súbor kpropd.acl, ktorý bude obsahovať zoznam všetkých KDC v pôsobisku. Na oboch serveroch - primárnom aj sekundárnom, vytvoríme súbor /etc/krb5kdc/kpropd.acl s takýmto obsahom:
    host/kdc01.nieco.sk@NIECO.SK
    host/kdc02.nieco.sk@NIECO.SK
  6. Vytvoríme databázu na sekundárnom KDC:
    sudo kdb5_util -s create
  7. Teraz spustíme démona kpropd, ktorý bude načúvať pripojeniam nástroja kprop. Nástroj kprop sa používa na prenos vyexportovaných súborov:
    sudo kpropd -S
  8. V príkazovom riadku primárneho KDC, vyexportujeme súbor so splnomocniteľmi:
    sudo kdb5_util dump /var/lib/krb5kdc/dump
  9. Vyextrahujeme súbor tabuľky kľúčov primárneho KDC a skopírujeme ho do /etc/krb5.keytab:
    kadmin -q "ktadd -k keytab.kdc01 host/kdc01.nieco.sk"
    sudo mv keytab.kdc01 /etc/kr5b.keytab
    [Note]

    Pred extrahovaním tabuľky kľúčov sa uistite, či existuje host pre kdc01.nieco.sk.

  10. Nástroj kprop vloží databázu do sekundárneho KDC:
    sudo kprop -r NIECO.SK -f /var/lib/krb5kdc/dump kdc02.nieco.sk
    [Note]

    Ak operácia prebehne správne, program vypíše SUCCEEDED. Ak nastane chyba, viac informácii sa dozviete v súbore /var/log/syslog na sekundárnom KDC.

    Môžeme tiež naplánovať úlohu pre cron, ktorá bude periodicky aktualizovať databázu sekundárneho KDC. Napríklad, ak chceme aktualizáciu vykonávať každú hodinu, pridáme do súboru /etc/crontab nasledujúce riadky:
    # m h  dom mon dow   command
    0 * * * * /usr/sbin/kdb5_util dump /var/lib/krb5kdc/dump && /usr/sbin/kprop -r NIECO.SK -f /var/lib/krb5kdc/dump kdc02.nieco.sk
  11. Vrátime sa na sekundárne KDC, kde vytvoríme súbor stash, ktorý bude obsahovať hlavný kľúč systému Kerberos:
    sudo kdb5_util stash
  12. Nakoniec spustíme démon krb5-kdc na sekundárnom KDC:
    sudo /etc/init.d/krb5-kdc start

Sekundárne KDC by teraz malo byť schopné vydávať vstupenky pre pôsobisko. Môžeme to otestovať stopnutím démona krb5-kdc na primárnom KDC a následným požiadaním o vstupenku pomocou nástroja kinit. Ak sme všetko urobili správne, mala by nám byť vstupenka poskytnutá zo sekundárneho KDC.

Linuxový klient systému Kerberos

V tejto časti si povieme, ako nastaviť operačný systém Linux tak, aby bol klientom systému Kerberos. To umožní používateľovi, ktorý sa úspešne do systému prihlási, prístup ku všetkým kerberizovaným službám bez toho, aby musel zakaždým zadať heslo.

Inštalácia

Aby bolo možné prihlásiť sa do pôsobiska systému Kerberos, sú potrebné balíky krb5-user a libpam-krb5 spolu s ďalšími, ktoré síce nie sú nutné, ale uľahčia nám prácu. Ak chceme tieto balíky nainštalovať, do príkazového riadka zadáme:

sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config

Balík auth-client-config umožňuje jednoduchú konfiguráciu PAM pre autentifikáciu z viacerých zdrojov a libpam-ccreds dočasne uchováva údaje o prihlásení, ktoré nám umožnia prihlásiť sa, aj keď je distribučné centrum kľúčov (KDC) nedostupné. Tento balík je tiež užitočný pre notebooky, ktoré sa musia vedieť prihlásiť do firemnej siete pomocou systému Kerberos, ale musia používateľovi umožniť prístup aj vtedy, ak nie sú pripojené do siete.

Konfigurácia

Ak chceme nastaviť klienta, zadáme:

sudo dpkg-reconfigure krb5-config

Pri konfigurácii bude potrebné zadať meno pôsobiska systému Kerberos a ak nemáte nastavené v DNS Kerberos SRV záznamy, bude potrebné zadať i adresu distribučného centra kľúčov (KDC) a adresu Admin servera pôsobiska.

Nástroj dpkg-reconfigure tieto zadané údaje o pôsobisku uloží do súboru /etc/krb5.conf. Záznamy v súbore budú vyzerať asi takto:

[libdefaults]
default_realm = NIECO.SK
...
[realms]
NIECO.SK = }
kdc = 192.168.0.1
admin_server = 192.168.0.1
}

Nastavenie môžeme otestovať požiadaním o vstupenku pomocou nástroja kinit. Napríklad takto:

kinit stefan@NIECO.SK
Password for stefan@NIECO.SK:

Ak nám bude vstupenka poskytnutá, detail môžeme zobraziť pomocou klist:

klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: stefan@NIECO.SK

Valid starting Expires Service principal
07/24/08 05:18:56 07/24/08 15:18:56 krbtgt/NIECO.SK@NIECO.SK
renew until 07/25/08 05:18:57


Kerberos 4 ticket cache: /tmp/tkt1000
klist: You have no tickets cached

Potom použijeme nástroj auth-client-config, ktorým nastavíme modul libpam-krb5, aby žiadal o vstupenku pri prihlasovaní:

sudo auth-client-config -a -p kerberos_example

Teraz by sme po úspešnom prihlásení mali obdržať vstupenku.

Zdroje

  • Viac informácii o systéme Kerberos sa nachádza na stránke MIT Kerberos.
  • Viac podrobností sa nachádza na stránke Ubuntu Wiki Kerberos.
  • Dobrou príručkou o nastavovaní systému Kerberos je O'Reillyho Kerberos: The Definitive Guide.
  • Na niektoré otázky o systéme Kerberos nám určite niekto odpovie aj na IRC kanále #ubuntu-server na Freenode.