Kerberos, PAM

Pavel Radkovič, 98710@mail.muni.cz


Obsah


Kerberos

Úvod

Kerberos je autentizační a autorizační systém, který má zaručit bezpečné využívání síťových zdrojů.
Hlavní myšlenka spočívá v tom, že se předpokládá, že celá síť je nedůvěryhodná. Kerberos pak definuje "jeden" velmi zabezpečený počítač, který zajišťuje autentizační a autorizační služby a je důvěryhodný pro celou síť. Tento počítač obsahuje informace o heslech a přístupových právech pro každého uživatele sítě.
Jestliže chce uživatel využívat nejaké síťové služby nebo prostředku, nejprve se musí autentizovat u tohoto důvěryhodného počítače. Ten mu vydá jakýsi lístek, který ho opravňuje využívat jemu dostupné služby nebo zdroje.

Verze

Systém Kerberos byl původně vyvinutý v počítačových laboratořích MIT (Massachusetts Institute of Technology) v rámci projektu Athena, na kterém práce probíhaly v letech 1983 až 1991.
První veřejná verze byla uvolněna v roce 1987 pod názvem Kerberos v4. Než se odstranily první nedostatky, systém prošel zhruba šestiletým vývojem. Poté byla vydána současná verze Kerberos v5.
Původní Kerberos (z laboratoří MIT) měl bohužel dveře na cestě do Evropy zavřené, protože platily přísné pravidla omezeného exportu šifrovacích algoritmů ze Spojených států. Proto vzniká evropský, volně šiřitelný klon s názvem Heimdal.
I když má Heimdal jiný kód, podporuje API MIT Kerbera. Proto vám programy, které zkompilujete pro verzi MIT budou fungovat pro Heimdal. Nekompatibilní je část týkající se správy KDC
Kerberos Heimdal si můžete stáhnout zde http://www.pdc.kth.se/heimdal/ a Kerberos MIT zde http://web.mit.edu/kerberos/www/dist/index.html

Autentizační proces

V systému Kerberos tedy neprobíhá autentizace přímo, ale využívá se jakési třetí důvěryhodné strany (KDC, Key Distribution Center).
KDC je rozdělen na dva podsystémy.

Autentizační proces potom probíhá takto:

Konfigurace

Pro chod Kerberos na serveru je nutno: Pro chod Kerberos na stanici je nutno: Je dobré také zajistit synchronizaci klientů i serveru (ntp).
Pro provozování aplikace (serveru) využívající Kerberos je nutno přidat počítač do databáze kerbera.
Přidáme ho příkazem v kadmin módu: addprinc -randkey host/doto-alpha.fi.muni.cz.
Dále musíme ještě příkazem ktadd -k /etc/krb5.keytab host/doto-alpha.fi.muni.cz vytvořit soubor /etc/krb5.keytab.



Pokud požadujeme větší odolnost vůči výpadku hlavního serveru Kerberos, můžeme postavit několik sekundárních serverů, které převezmou jeho úlohu v případě havárie. Aplikace se tedy budou dotazovat těchto sekundárních serverů.

Konfigurace probíhá takto:
Přidáme servery do databáze a vytvoříme soubor /etc/krb5.keytab stejným způsobem jako u aplikačních serverů.
Na každém serveru se vytvoří soubor /var/krb5kdc/kpropd.acl , který slouží k šíření databáze kerberos. Do tohoto souboru se umístí všechny KDC servery.

host/speo-alpha.fi.muni.cz@FI.MUNI.CZ #primarni
host/speo-alpha-1.fi.muni.cz@FI.MUNI.CZ # seknudarni

Nyní je nutno na každém sekundárním serveru spustit démona kpropd.
Ještě rozdistribuujeme databázi příkazy:
/usr/kerberos/sbin/kdb5_util dump /var/krb5kdc/slave_datatrans
/usr/kerberos/sbin/kprop -f /var/krb5kdc/slave_datatrans

Výpisy konfiguračních souborů

Výpisy převzaty z předchozích referátů. /etc/krb5.conf
     [logging]
      default = FILE:/var/log/krb5libs.log
      kdc = FILE:/var/log/krb5kdc.log
      admin_server = FILE:/var/log/kadmind.log
     [libdefaults]
      ticket_lifetime = 24000
      default_realm = FI.MUNI.CZ
      dns_lookup_realm = false
      dns_lookup_kdc = false
     [realms]
      FI.MUNI.CZ = {
        kdc = doto-alpha.fi.muni.cz:88
	admin_server = doto-alpha.fi.muni.cz:749
	default_domain = fi.muni.cz
      }
     [domain_realm]
      .fi.muni.cz = FI.MUNI.CZ
      fi.muni.cz = FI.MUNI.CZ
     [kdc]
      profile = /var/kerberos/krb5kdc/kdc.conf
     [appdefaults]
      pam = {
       debug = false
       ticket_lifetime = 36000
       renew_lifetime = 36000
       forwardable = true
       krb4_convert = false
      }
/var/kerberos/krb5kdc/kdc.conf
   [kdcdefaults]
    acl_file = /var/kerberos/krb5kdc/kadm5.acl
    dict_file = /usr/share/dict/words
    admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
    v4_mode = nopreauth
   [realms]
    FI.MUNI.CZ = {
      master_key_type = des-cbc-crc
      supported_enctypes = arcfour-hmac:normal arcfour-hmac:norealm arcfour-hmac:onlyrealm des3-hmac-sha1:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
    }

odkazy

http://ptolemy.eecs.berkeley.edu/~cxh/krb/krb-users.html
http://kb.indiana.edu/data/acjj.html
http://consult.stanford.edu/afsinfo/kerberos.shtml
http://www.fi.muni.cz/~kas/p090/referaty/

PAM

Úvod

Autentizace uživatelů v Unixu byla nejprve prováděna pomocí souboru /etc/passwd. Díky tomu, že /etc/passwd musí byt '644', může si každý uživatel systému zakódovaná hesla přečíst a následně se pokusit hrubou silou rozkódovat. Vznikl tedy další soubor, který již není běžnému uživateli čitelný - /etc/shadow. Tento způsob autentizace je ale v rozporu se zásadami unixu - "... male programy ktere delaji jednu vec a delaji ji dobre ...". Programů, které požadují autentizaci je mnoho. Bylo tedy nutné vytvořit jednotný systém autentizace - PAM.
Díky PAM je možné bez úpravy aplikace užívající PAM měnit autentizační mechanismy, které aplikace používá. Tedy je možné provést upgrade kompletně celého lokálního autentizačního systému bez jakéhokoli zásahu do samotných aplikací.
Programy, které potřebují autentizovat uživatele, mohou zavolat funkci z PAM, která projde s uživatelem autentizační proces a vrátí programu výsledek - uživatel prošel/neprošel. Jako příklady programů, kterým se PAM hodí, můžeme uvést login, su, passwd.
PAM je dostupný snad pro všechny UNIXové systémy - Linux, Solaris, IRIX. Některé BSD PAM nepodporují.

Kongfigurace

PAM používá buď jeden konfigurační soubor /etc/pam.conf -(dřívější implementace) , nebo skupinu konfiguračních souborů v adresáři /etc/pam.d. Ke každému programu zde odpovídá jeden soubor, např /etc/pam.d/sshd

Konfigurační soubory v /etc/pam.d mají následující formát:
[module-type] [control-flag] [module-path] [arguments]

module-type
Můžou zde být uvedeny tyto hodnoty: control-flag
Kontrolní příznak se používá k tomu, aby se PAMu určilo jak má reagovat na úspěch/selhání daného modulu.
Můžou zde být uvedeny tyto hodnoty: module-path
Cesta k dynamicky zaveditelným object souborům; samotný pluggable modul. Pokud je první znak cesty k modulu `/', je brána jako kompletní cesta. Pokud není, modul se hledá implicitně v /usr/lib/security.

arguments
Argumenty tvoří seznam, který je předán modulům při spuštění. Podobně jako argumenty pro typický linuxový příkaz shellu. Obecně jsou argumenty volitelné a jsou specifické pro daný modul.

Výpis konfiguračního souboru

auth       sufficient   /lib/security/pam_rootok.so
auth       required     /lib/security/pam_stack.so service=system-auth
account    required     /lib/security/pam_stack.so service=system-auth
password   required     /lib/security/pam_stack.so service=system-auth
session    required     /lib/security/pam_stack.so service=system-auth
session    optional     /lib/security/pam_xauth.so

odkazy

http://www.us.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html
http://www.fi.muni.cz/~kas/p090/referaty/