Autentizační systémy

Martin Bukatovič, xbukatov@fi.muni.cz

Obsah

Kerberos

Kerberos je síťový autentizační protokol pracující na principu jednotného přihlašování mezi několika různými systémy. Jméno pochází z řecké mytologie, kde označuje bájného trojhlavého psa, jehož úkol bylo střežit vchod do podsvětí.

Protokol byl vyvinut v rámci projektu Athena na MIT a první veřejně dostupná verze 4 pochází z roku 1987. V roce 1993 byla definována v RFC1510 5. verze protokolu. Dnes se používá aktualizovaná protokolu v5, která je popsána v RFC4120 z roku 2005.

Princip fungování protokolu

Kerberos řeší problém centrální autentizace v síťovém prostředí, kde uživatelé ze svých strojů přistupují k mnoha dalším službám dostupných přes síť. Cílem bylo vytvořit systém zajišťující:

Úlohu důvěryhodného prostředníka plní centrální autentizační server, tzv. KDC (Key Distribution Center), které spravuje databázi všech hesel jak uživatelů tak služeb (jde o sdílené tajemství mezi uživatelem/službou a KDC). Realm pak označuje oblast spravovanou jedním KDC. Uživatele i služby identifikuje tzv. principal, který má tvar:

primary/instance@REALM
Kde primary je buď jméno uživatele nebo služby, instance je doplňující informace (např. adresa stroje, na kterém služba běží nebo nepovinná uživatelská role) a realm je jméno realmu, které se volí dle DNS domény.

KDC je rozděleno na dva servery:

Průběh autentizace

Při autentizaci se využívá tzv. lístek (ticket), který obsahuje session-key služby (pro kterou byl lístek vydán), principal uživatele a služby, časové razítko a dobu platnosti. Nakonec jsou všechny tyto informace zašifrovány pomocí hesla služby. Lístek je v rámci své životnosti znovupoužitelný.

Naopak autentikátor (authenticator) je použitelný pouze jednou, šifrovaný je pomocí session-key dané služby a obsahuje principal uživatele a časovou známku.

Autentizace probíhá přibližně následujícím způsobem:

Dostupné imlementace

Mezi nejvýznamnější implementace protokolu Kebreros v5 patří:

Některé další projekty implementující Kerberos:

Instalace a konfigurace

V distribuci Debian je třeba nainstalovat balíčky krb5-admin-server a krb5-kdc, které obsahují MIT implementaci Kerbera.

Důležité konfigurační souboru jsou krb5.conf, který je hlavním konfiguračním souborem - ovlivňuje chování klientů i serveru, a kdc.conf, v kterém se nastavuje KDC server.

krb5.conf

Běžně se nachází v /etc, pokud neurčíme v proměnné prostředí KRB5_CONFIG jinak. Jednoduchý příklad:

# nastavení Kerberos knihovny
[libdefaults]
  # výchozí nastavení realmu pro klienty
  default_realm = ATHENA.MIT.EDU
  # použít DNS SRV záznam při hledání KDC serveru
  dns_lookup_kdc = false
  # použít DNS TXT záznam při určovaní realmu hostitele
  dns_lookup_realm = false

# nastavení pro jednotlivé realmy
[realms]
  ATHENA.MIT.EDU = {
    kdc = kerberos.athena.mit.edu
    admin_server = kerberos.athena.mit.edu
}

# mapování DNS na realmy
[domain_realm]
  .athena.mit.edu = ATHENA.MIT.EDU # cela domena
  athena.mit.edu = ATHENA.MIT.EDU  # hostname

[kdc]
  profile = /var/kerberos/krb5kdc/kdc.conf

[logging]
  kdc = SYSLOG:INFO:DAEMON
  admin_server = FILE:/var/log/kadmin.log
  default = SYSLOG

Sekci [domain_realm] lze vynechat, pokud se DNS doména shoduje s realmem (což je doporučeno). Dále je možné vynechat i [realms], pokud nastavíme odpovídající DNS SRV pro servery v realmu, nicméně útokem na DNS je pak možné dosáhnout např. odepření služby.

Poznámky

Kvůli použití časových známek je nutné zajistit synchronizaci času v celém realmu např. pomocí NTP.

Služba může autentizace s pomocí Kerbera využít, pouze pokud je na to připravená. V praxi je třeba použít tzv. kerberizovanou verzi. Na Debianu mají takové balíčky prefix kbr-, např. krb-ftpd, krb5-telnetd a pod. Dále je pro každou takovou službu vytvořit principal a přenést k ní její klíč (soubor keytab) a konfigurační soubor krb5.conf.

PAM

S autentizačním systémem PAM (Pluggable Authentication Modules) přišla firma Sun a dnes je přítomen na většině systémů unixového typu. Základní myšlenkou je oddělení konkrétní autentizační části programů do jedné společné knihovny. Ta poskytuje obecné rozhraní a odděluje tak programy od implementačních detailů autentizačních metod. To pak umožňuje programům jako XDM používat autentizaci pomocí hesla, otisku prstu nebo čipové karty. Existují implementace pod GPL - Linux-PAM, i BSD licencí - OpenPAM.

Principy

V praxi je každý program, který potřebuje autentizovat uživatele, slinkovaný s knihovnou libpam obalující pluginy (na Linuxu umístěné v /lib/security/), které implementují konkrétní autentizační mechanismy.

Autentizační moduly jsou rozděleny dle činnosti do těchto skupin:

Vybrané zajímavé moduly:

Konfigurace

Konfigurace je umístěna buď v jednom souboru /etc/pam.conf, nebo rozdělena dle programů v adresáři /etc/pam.d, který pokud existuje, je pam.conf vždy ignorován.

Konfigurační soubor je procházen sekvenčně, na každém řádku je popsán jeden autentizační modul ve tvaru: skupina řídící-hodnota modul [argumenty-modulu]. Řídící hodnoty mohou být:

Příklad

Následující soubor /etc/pam.d/passwd zajistí, že se při změně hesla nejprve otestuje dle zadaných kritérií jeho kvalita - pokud tento test selže, dál se nepokračuje, jinak se nové heslo se uloží do /etc/shadow s sha512 hashem:

password        required        pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password        required        pam_unix.so sha512 shadow nullok

Nebo /etc/pam.s/sshd:

#auth           required        pam_securetty.so        #Disable remote root
auth            required        pam_unix.so
auth            required        pam_nologin.so
auth            required        pam_env.so
account         required        pam_unix.so
account         required        pam_time.so
password        required        pam_unix.so
session         required        pam_unix_session.so
session         required        pam_limits.so

Literatura