Název referátu
Petr Skyva
Obsah
Co je kerberos
Síťoví autentizační protokol. Tedy možnost prokázat bezpečně svoji identitu.
Kerberos zaručuje integritu dat a zabraňuje odposlouchávání. Byl vyvvinut na MIT.
Kerberos je postavený na symetrické kryptografii, a proto je potřeba pro autentizaci třetí strana
Možnost asymetrického šifrování je možná pouze v některých částech autentizace.
Z čeho se skládá kerberos?
- KDC(Key Distribution Center), třetí strana která se skladá ze
dvou logicky oddělených částí. Autentizačního serveru (AS) a Ticket Granting Serveru (TGS)
- SS servisní středisko
- Lístek lístkem se ověřuje daný klient. Obsahuje sesion key, principal klienta, principal aplikace,
kdy byl vystaven a jak dlouho bude platný, případně adresy ze kterých se může klient přihlásit
- TGT Ticket granting ticket, ticket pomocí kterého získáme další ticket pro danou službu
- Realm, doména ve které server může přímo autentizovat pouze klienty v daném realmu
- Cross authentication, autentizace mezi různými realmy
- Principal unikátní identita, které Kerberos přiřadí ticket. Má tvar například proto09@KERBEROSREALM.COM
- Single sign-on jedno přihlašení získá přístup ke všem připojeným systémum bez použití dalšího přihlašování.
- Stash, klíč kterým je šifrována databáze principalů, je uložen v souboru stash
- DNS canonizace principal názvů, tzv. lokalizace pro daný realm, jsou podobné MX záznamům
Jak to funguje
KDC obsahuje nějakou databází uživatelů, kterým přižazuje tickety. Autentizace pomoci Kerbera
je navržena tak, že se nemusí neustále přenášet heslo po sítí nýbdrž jen získaný ticket.
AS i TGS jsou většinou provozovány na jednom stroji, i když to jsou dvě samostatné služby. Tickety
přidělené uživatelům maji pouze omezenou platnost, která je pokud je potřeba prodlužovat.
Klient se tedy autentizuje vůčí AS a obdrží ticket. Pomocí tohoto ticketu kontaktuje TGS kde prokáže svoji identitu a požadá o přístup
k určité službě. Pokud klient má právo na danou službu, zašle TGS klientovi další ticket, který je použit při komunikaci s SS (Potvrzení
nároku na službu).
Detailněji:
Login:
1.) uživatel zadá login a heslo na svém počítači.
2.) Klient zahashuje vložené heslo které se stane tajným klíčem pro klienta.
Autentizace klienta:
3.) Klient odešle nešifrovanou zprávu na AS s žadostí o přístup ke službe. Ve zprávě se uvádí principal klienta a služby ke které chce získat přístup.
4.) AS zjistí jestli je klient v jeho databázi, pokud ano odešle zpět klientovi dvě zprávy.
- Klient-TGS klíč zašifrovaný klíčem klienta.
- TGT s údaji o klientovi (klient-TGS klíč), a po jakou dobu může daný ticket používat. Zašifrováno klíčem klient-TGS (tajný klíč na AS, klient ho nezná).
5.) Po obdržení zpráv klient dešifruje zprávu pomocí svého klíče. Rozšifrované informace se nadále využívají pro komunikaci
s TGS. Hesla se musí shodovat (to které uživatel vložil na začátku stim coje v AS).
Přístup ke službě:
6.) Klient odešle dvě zprávy na TGS. A to TGT získané od AS a id služby kterou chce využívat. Druhou (autentifikátor), která je zašifrovaná klient-TGS klíčem, kterou .
7.) TGS po obdržení obou zpráv rozkóduje první zprávu zníž získa zprávu TGT získané od AS kterou dešifruje svým tajným klíčem, tím získá klient-TGS klíč.
pomocí tohoto klíče dešifruje autentifikátor a odešle klientovi, opět dvě zprávy.
8.) První zpráva je ticket klient-server, obsahující údaje o klientovi, a klient-server klíč, to je zašifrované klíčem dané služby.
9.) Druhou zprávu klient-server klíč šifrovaný klientovým klíčem získaným z druhé zprávy při autentizaci.
Konečný přístup ke službě:
10.) Klient po obdržení předchozích dvou zpráv od TGS ma tedy dostatek informací k autentizaci vůči SS. Klient se tedy připojí a zašle dvě zprávy.
11.) První zprávu z předchozího kroku, a zprávu, která slouží jako další autentifikátor obsahujicí údaje o klientovi zašifrované klíčem získaným z předchozí první zprávy.
12.) SS dešifruje první zprávu pomoci svého tajného klíče (Tím kterým byla zašifrovaná předchozí první zpráva) a získá klient-server klíč z druhé předchozí zprávy.
Tímto klíčem dešifruje druhý autentifikátor a pošle zpět klientovi zprávu aby potvrdil svoji identitu. Zpráva obsahuje časovou značku z klientova autentifikátoru
navýšená o jedna, zašifrovaná klíčem klient-server.
13.) Klient dešifruje zprávu daným klient-server klíčem (získaným z přístupu ke službe) a zkontroluje, zda je časová značka navýšena. Pokud ano může klient serveru důvěřovat.
Implementace
- Původní implementace je z MIT (MIT Kerberos), pak existuje i druhá implementace a tou je Heimdal. Heimdal využívá stjene API jako MIT, proto je vpodstatě jedno kterou verzí používáme.
- Další implementace Kerbera najdeme i u Microsoftu, kde se používá jako autentizační mechanizmus v Active Directory. Kerberos se vyskytuje i v Jave.
Client utilities
krb5_newrealm - vytvoření nového realmu
kinit
klist
tedy kinit je nástroj pro získání TGT a klist pro zobrazení ticketů
kdb5_util - nástroj pro údržbu databáze Kerbera
kdb5_util dump /root/dump
Konfigurace je umístěna na v etc/krb5.conf, konfigurace KDC potom v /etc/krb5kdc (na Debianu).
Replikace databáze
Kerberos je designovaný tak aby poskytoval Master-Slave cluster. Pro replikaci databáze je tedy potřeba na dvou serverech vytvořit principal pro vzájemnou autentizaci
a přenést Master klíč, kterým jsou položky v databází šifrovány. Funguje jako u DNS kdyz Master server neni dostupný využívá se sekundární server. Nicméně když nebude
funkční Master server není možné přistupovat k administrátorskym funkcím.
Nastavení:
První nastavíme replikaci ACL pro kpropd. Defaultně v /var/Kerberos/krb5kdc/kpropd.acl
host/kerberos1.gnud.ie@GNUD.IE
host/kerberos2.gnud.ie@GNUD.IE
kpropd.acl by měl existovat pouze na Slave serveru. Dále vytvoříme host klíče pro master i slave server.
bash# kadmin.local
kadmin.local: addprinc -randkey host/kerberos1.gnud.ie
kadmin.local: addprinc -randkey host/kerberos2.gnud.ie
a vytvoříme tzv. keytab file.
kadmin.local: ktadd host/kerberos1.gnud.ie
kadmin.local: ktadd host/kerberos1.gnud.ie
Dále nakopírujeme na náš slave server klíče
slave# scp root@kerberos1.gnud.ie:/etc/krb5.keytab /etc
A sesynchronizujeme master se slave serververem:
#/usr/Kerberos/sbin/kdb5_util dump /var/Kerberos/krb5kdc/slave_datatrans
#/usr/Kerberos/sbin/kprop -d -f /var/Kerberos/krb5kdc/slave_datatrans kerberos2.gnud.ie
3234 bytes sent.
Database propagation to kerberos2.gnud.ie: SUCCEEDED
#
NTP
Network Time Protocol slouží pro synchronizaci vnitřních hodin počítačů po paketové síti s proměnným zpožděním. Tento protokol zajišťuje, aby všechny počítače v síti
měly stejný a přesný čas. Byl obzvláště navržen tak, aby odolával následku proměnlivého zpoždění v doručování paketů. Dosahuje se přesnosti v řádech milisekund.
NTP démon beží na stroji trvale.
NTP udržuje a značkuje čas v UTC ve formě čísla s pevnou desetinnou čárkou: 32 bitů na část sekund + 32 bitů desetinná část sekund. To NTP dává škálu 2^32 sekund s teoretickým
rozlišením 2^32 sekundy. Ačkoliv NTP škála přetéká každých 2^32 sekund, implementace by měla odstranit nejednoznačnost z jiných zdrojů. Protože k tomu stačí čas přesný na několik
desetiletí, pro běžné použití to není problém.
NTP beží na portu 123.
NTP pool
NTP pool je spousta veřejně dostupných NTP serverů, které lze využít pro synchronizaci. Jsou součásti pool.ntp.org domény i jako další subdomény dle geografie (cz.pool.ntp.org).
Konfigurace NTP
/etc/ntp.conf
kde přidáme řádky poolů které chceme využívat.
server 0.cz.pool.ntp.org
Literatura