Kerberiseeritud süsteemi kirjeldus

Allikas: Kuutõrvaja
Redaktsioon seisuga 26. jaanuar 2007, kell 11:39 kasutajalt Triinu (arutelu | kaastöö) (Printserveri teenuse pilet)

Kerberos

Kerberos on avalikus võrgus toimiv teenuste ja kasutajate autentimissüsteem.

Skeem kujutab arvutivõrku: klient, teenus, piletiserver ja pahalane

Kerberose piletiserver    Teenus, printserver
     ___                  ___                ___
    |   |                |   |              |   |
    |   | ______________ |   | ____________ |   |
     ---        _|_       ---                ---
               |   |                  Priit, klient
               |___|
                     Mart, pahalane
          

Klientprogramm esindab kasutajat ja saab kasutada teenust ainult sel juhul, kui tal on selleks volitus (ingl. k. credential). Piletiserveri ülesanne on nende volituste laialijagamine.

Järgnevates osades kirjeldame, kuidas Kerberosel põhinev autentimissüsteem sisuliselt töötab. Et lugejal oleks materjali hõlpsam jälgida, kõneleme konkreetsest olukorrast, kus kasutaja priit tarvitab tööjaamas klientprogrammi ja soovib printida printserverile. Lisaks vaatleme paralleelselt, kuidas samale võrgule füüsilist ligipääsu omav pahalane Mart ei saa tarvitada Priidu nimel teenuseid.

Materjal vastab MITi viiendale Kerberose versioonile.

Teenus autendib kasutaja

Tööjaama taga istuv kasutaja priit soovib printida. Jälgime kuidas teenus autendib kasutaja.

Süsteem on korraldatud nii, et kui kasutaja soovib tarvitada printserveri teenust, peab ta kõigepealt veenma printserverit, et tal on õigus seda teha. Selleks peab tal olema teenusele esitada:

   * teenuse pilet (ingl. k. ticket) ja
   * autentikaator (ingl. k. authenticator). 

Printserveri teenuse pilet

Teenuse pilet sisaldab järgmist infot ja, et kasutajad ei saaks pileteid võltsida, on see krüptitud teenuse parooliga

{ teenuse nimi : teenuse seansivõti : kasutajanimi : kasutaja IP-aadress : loomisaeg : kehtivusaeg } teenuse parool

Toodud tähistus märgib seda, et 6 piletis sisalduvat elementi on krüptitud teenuse parooliga.

Teenuse parool on teenuse ja piletiserveri vaheline saladus.

Kuna teenus ise teab oma parooli, siis saab ta lahti krüptida talle esitatud õigeid piletid. Pilet kehtib, kui:

   * Pileti lahtikrüptimine õnnestub. Siit järeldub, et pileti on väljastanud piletiserver.
   * Pileti loomis- ja kehtivusajast järeldub, et pilet on veel kasutatav. Tavaliselt on pileti kehtivusaeg kaheksa tundi.
   * Piletis sisalduv teenuse nimi on selle teenuse oma, kes piletiga parasjagu tegeleb. 

Lisaks saab teenus piletist teada, millisel IP-aadressil asuvale kasutajale on piletiserver selle pileti väljastanud. Piletis olev teenuse seansivõti on vajalik kasutaja autentikaatori lahtikrüptimiseks.

Teenuse piletid on krüptitud teenuse parooliga ja sellisena võib neid võrgus liigutada eeldusel, et parooli teab vaid piletiserver ja vastav teenus. Kui pahalane Mart võrku pealt kuulab ja pileti endale kopeerib ning püüab seda kasutada, siis ta ei saa seda teha, kuna piletis on kirjas, kellele on pilet väljastatud.

Autentikaator

Peab olema välistatud võimalus pileteid näpata ja neid kellegi teise nimel kasutada. Selleks esitab kasutaja printserverile autentikaatori

{ kasutaja nimi : kasutaja IP aadress : loomisaeg : kehtivusaeg } teenuse seansivõti

Kasutatava autentikaatori saab luua vaid õige kasutaja, kuna eeldatavasti puudub teistel kasutajatel vastav printserveri teenuse seansivõti.

Peale seda, kui printserver on lahti krüptinud teenuse pileti ja saanud sealt teada tema ja kasutaja vahelise saladuse, teenuse seansivõtme, asub ta lahti krüptima kasutaja autentikaatorit. Juhul, kui autentikaatori lahtikrüptimine õnnestub ja selles sisalduv kasutajanimi ning masina IP langevad kokku piletis sisalduvatega ning kehtivusaeg pole möödas, on kasutaja ehtsus kindlaks tehtud. Autentikaator on vaid üks kord kasutatav ja kehtivusaeg on mõni minut. Teenuse pilet kehtib tavaliselt kaheksa tundi.

Soovides hiljem veel trükkida, kasutab Priit sama printserveri piletit, kuid genereerib uue autentikaatori.

Kui pahalane Mart kuulab võrku pealt ja olles kinni püüdnud Priidu printserveri pileti ning seejärel oma tööjaama veennud, et ta on priit ja muutnud ka IP numbri vastavaks, siis ei saa ta ikkagi end usutavalt printserverile priiduna esitada. Põhjusel, et tal puudub printserveri ja tõelise priidu vaheline saladus - teenuse seansivõti. Ta ei saa luua sobivat autentikaatorit.

Mart võiks võrku kuulates kinni püüda printserverisse liikuvad priidu autentikaatori ja printserveri pileti ning esitada need teenusele hiljem korraga, peale selle, kui ta on oma tööjaama vastavalt ümberhäälestanud. See ei lähe läbi, kuna autentikaator on vaid kord tarvitatav ja tõenäoliselt jõuab Priidu saadetis teenuseni enne kui võlts.

Kasutaja autendib teenuse

Kasutaja soovib, et teda teenindav teenus oleks ehtne. Näiteks Priit, saates printi iskliku sisuga materjale soovib, et need väljuksid tema printerist ja mitte Mardi printerist koridori lõpus.

Selleks lisandub ülalkirjeldatud skeemile teine pool. Peale seda, kui printserver lubab end kasutada ja enne seda, kui prinditav töö talle saadetakse, tahab klient saada teenuselt vastust. Vastus peab sisaldama seansivõtmega krüptitud kasutajanime. Kui kasutajat teenidab võlts-server, mis ei tea õige serveri parooli, siis ei saa ta ka piletit lahti krüptida ning sealt teada teenuse seansivõtit. Niisiis, ta ei saa saata kliendile rahuldavat vastust.

Piletiserver autendib esmakordselt kasutaja

Selleks, et Kerberos kasutaja eest piletite õiendamisega tegeleks, peab kasutaja kõige alguses lunastama piletiserveri volituse. Selle hankimine toimub tavaliselt käsitsi ja see on ainus kord, kus kasutaja peab oma parooli sisestama ja seda kasutatakse.

Praktiliselt käivitab kasutaja peale tööjaama sisselogimist programmi kinit ja saadab piletiserverile oma kasutajanime. Piletiserver teeb kindlaks, kas selline kasutaja tema andmebaasis eksisteerib ja kui, siis saab kasutajale vastu piletiserveri volituse. See jõuab kohale kahes osas:

   * piletiserveri pilet
   * piletiserveri seansivõti krüptituna kasutaja parooliga
     { piletiserveri seansivõti } kasutaja parool

Kasutaja teab oma parooli ja suudab seansivõtme lahti krüptida ning saab hakata suhtlema piletiserveriga. Vastasel korral mitte.

Tõepoolest, pahalane Mart saab küll võrku kuulates napsata Priidule mõeldud piletiserveri pileti ja krüptitud seansivõtme, kuid ta ei saa nendega suurt midagi teha, niikaua kui ta ei tea Priidu parooli.

Üldiselt koosneb teenuse volitus:

   * teenuse piletist
   * teenuse seansivõtmest 


Kasutaja suhtleb piletiserveriga

Jälgime, kuidas kasutaja omandab piletiserverilt printserveri kasutamise volituse, so printserveri pileti ja seansivõtme.

Esmalt pöördub Priit printserveri poole, kuid kliendi tarkvara näeb, et pole printserveri volitust. Ta moodustab piletiserveri seansivõtmega autentikaatori ning saadab piletiserverile oma piletiserveri pileti, selle autentikaatori ja soovi, et tahab saada printserveri kasutamise volitust.

Piletiserver autendib kasutaja ning kui see õnnestub, siis saadab vastu nõutud volituse

   * printserveri pileti
   * piletiserveri seansivõtmega krüptitud printserveri seansivõtme
     { printserveri seansivõti } piletiserveri seansivõti 

Kasutaja ja teenuse vahelise saladuse - seansivõtme genereerib piletiserver.

Illustreerime öeldut skeemiga

Kerb4.jpg

Klient teab piletiserveri seansivõtit ja kasutab seda printserveri seansivõtme lahtikrüptimiseks. Seejärel moodustab ta printserveri jaoks autentikaatori. Omades lõpuks nii printserveri piletit kui ka autentikaatorit, saab ta printida.

Sama teenusega korduval suhtlemisel kasutatakse olemasolevat teenuse volitust: teenuse seansivõtmega moodustab kasutaja iga kord uue autentikaatori ja saadab selle koos teenuse piletiga teenusele.

Kui kasutaja on omandanud mitmete teenuste pileteid, siis on tal olemas ka vastavad seansivõtmed; ühesõnaga, mitmete teenuste volitused. Kasutaja hoiab neid volituste laos (ingl. k. credential cache), mis võib asuda nii failis, kui arvuti mälus.

Piletiserver

Vaatleme töötavat süsteemi piletiserveri seisukohast. Ilmselt peab ta saama hakkama korraga mitmete kasutajate ja teenustega.

Iga kasutaja käivitab programmi kinit ja autendib end oma parooliga Kerberosele ainult üks kord. Tulemusena saab ta endale piletiserveri pileti ja piletiserveri seansivõtme, so piletiserveri volituse. Edasine kasutaja autentimine toimub kasutajale nähtamatult. Piletitel on tavaliselt kehtivusaeg kaheksa tundi, kuivõrd teoreetiliselt on neid võimalik jõuga lahti murda. Järgmine kord peab kasutaja lunastama omale uue piletiserveri volituse kui ta on selle hävitanud või kehtivusaeg on möödunud.

Et töötava Kerberose piletiserver saaks end Kerberosele autentinud kasutajaid teenindada, peab ta teadma iga kasutaja piletiserveri seansivõtit. Kõik muu saladuste hoidmine ja suhtlemine toimub juba teenuse ja kasutaja vahel, väljaarvatud uute teenuste volituste lunastamine piletiserverilt.

Tekstis me ütlesime, et piletiserveri volituse saab kasutaja peale programmi kinit kasutamist. Tegelikult võib olla süsteem seatud nii, et kui kasutaja end tööjaama oma kasutajanime ja parooliga sisse logib, suhtlebki ta juba Kerberosega. Peale õnnestunud sisselogimist on tal sel moel automaatselt piletiserveri volituse omanik ja edaspidi temalt parooli ei küsita.

Kerberiseeritud tarkvara

Soovides lisada võrku uue teenuse ja korraldada nii, et teenus autendiks kasutajaid Kerberose abil, peab olema teenus ja teda tarvitavad kasutajate klientprogrammid kerberiseeritud.

Klient peab volituse puudumisel oskama selle endale nõuda. Koostama seejärel autentikaatori ja selle koos teenuse piletiga teenusele ära saatma. Teenus peab saabunud pileti ja autentikaatori abil tuvastama, kas kasutaja on ehtne.

Praktiliselt tuleb kerberiseeritud tarkvara saamiseks kompileerimisel näidata, kas soovitakse saada kerberiseeritud versioone või mitte.

Lihtsam on nende teenustega, millele saab 'õpetada' kerberost PAMi moodulite abil.

© EENet 2000