Kerberos & PAM

Honza Bartoš <207656@mail.muni.cz>

Obsah

PAM

PAM [pluggable authentication modules] je systém pro přihlašování a ověřování uživatelů. Jde o sadu knihoven, kterou používají programy přihlašující uživatele do systému (login, [xkg]dm) případně jinak pracující s hesly a databází uživatelů (passwd). PAM poskytuje jednotné moduly a způsob konfigurace služeb pro přihlašování. Zahrnutím odpovídající modulu je například možno použít přihlašování pomocí otisku prstu bez nutnosti změn programu login a dalších, které používáme.

PAM byl navržen Sunem a prvně použit v Solarisu. Později byl standardizován jako standard XSSO. PAM je nyní používán v AIXu, HP-UX, Solarisu, většině Linuxových distribucí (krom např. Slackware), FreeBSD, NetBSD, Mac OS-X. OpenBSD používá jiný systém. Různé implementace se od sebe odlišují.

Konfigurace

Jednotlivé moduly PAMu najdeme v adresáři /lib/security, konfiguraci pak v souboru /etc/pam.conf případně v adresáři /etc/pam.d/. Do adresáře pam.d ukládáme jednotlivé soubory, jejichž jméno odpovídá jménu služby pro kterou je konfigurace určena, v souboru pam.d přidáváme na každý řádek jako první položku jméno služby jíž se řádek týká.

Jednotlivé řádky mají tvar:

type control module-path [module-args]

Položka type udává typ modulu, platné možnosti jsou:

Položka control udává chování ověřovacího procesu v závislosti na výsledku modulu. Obsahem pole může být jedno z následujících slov:

Rovněž je možné použít detailnější nastavení chování v případě různých výsledků (místo klíčového slova by se použil seznam hodnota=akce).

module-path je cesta k modulu, buďto relativní od /lib/security (/lib64/security), nebo absolutní.

module-args mezerou oddělený seznam parametrů modulu. Jednotlivé argumenty obsahující mezeru uzavřete do [].

Ukázkový konfigurační soubor:

#%PAM-1.0
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_succeed_if.so uid <  500 quiet
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

(jde o soubor system-auth z FC6, includovaný z většiny služeb).

Moduly

K jednotlivým modulům se nachází dodatečná konfigurace v adresáři /etc/security. Každý modul může implementovat jeden až všechny typy. Krátký popis některých modulů:

Kerberos


Kerberos je síťový protokol pro komunikaci na potenciálně nebezpečné síti. Poskytuje služby autorizace a autentizace. Pochází z MITu kde byl vyvíjen v rámci projektu Athena. První veřejnou verzí byla v4, později ji následovala verze 5, která protokol vylepšuje. Implementace je volně dostupná pod BSD licencí, ovšem kvůli omezení exportu šifrovacích technologií v USA byla vytvořena jiná implementace (Heimdal), původem z KTH ve Švédsku.

Popis činnosti

Kerberos je navržen jako klient-server protokol. Klient který chce použít kerberos si nejprve vyžádá tzv. lístek (ticket), který je mu vydán na určitou omezenou dobu a který ověřuje jeho identitu. Lístek je mu vydán KDC (Key distribution center), který se skládá z TGS (ticket granting server) a AS (authentication sever). AS ověřuje identitu a oprávnění uživatele, TGS pak vydává lístky.

Protokol je založen na Needham-Schroederově protokolu se symetrickým šifrováním. Pro komunikaci se službou si klient vyžádá klíč od třetí strany – AS. Nejprve si vyžádá TGT (ticket granting ticket) a session key od AS. TGT je zašifrován heslem známým TGS a AS (nikoliv klientovi), session key je šifrován heslem klienta. TGT obsahuje údaje o klientovi (jeho adresu, platnost lístku, session key klienta). Pomocí svého hesla dokáže klient rozšifrovat session key.

Když nyní chce klient použít službu, vytvoří si autentifikátor, který zašifruje svým session key a odešle ho s TGT TGS. TGS je schopno rozšifrovat TGT z něhož získá session key, kterým rozšifruje a ověří autentifikátor (jeho username, adresu a čas). Pokud je autentifikátor platný, TGS vytvoří lístek pro použití služby zašifrovaný tajným klíčem služby. Tento lístek obsahuje identifikaci klienta a klíč pro použití služby, který server zašle klientovi.

Klient nyní přímo službě pošle lístek pro použití služby a další autentifikátor šifrovaný klíčem pro použití služby. Služba rozšifruje lístek svým tajným klíčem ze kterého získá klíč pro použití služby, který jí umožní rozšifrovat autentifikátor a ověřit ho. V případě že je tento v pořádku nyní může povolit přístup a zahájit komunikaci.

Konfigurace

Popis se týká MIT implementace (FC6).

Významné jsou soubory /etc/krb5.conf a /var/kerberos/krb5kdc/kdc.conf (může být jinde).

krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = LAB.FI.MUNI.CZ
 dns_lookup_realm = true
 ticket_lifetime = 24h
 forwardable = yes

[domain_realm]
.lab.fi.muni.cz = LAB.FI.MUNI.CZ
lab.fi.muni.cz = LAB.FI.MUNI.cz

[realms]
 LAB.FI.MUNI.CZ = {
  kdc = agaue.lab.fi.muni.cz
  admin_server = agaue.lab.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
 }

Konfigurační soubor zejména nastavuje výchozí realm a definuje pro něj jedno KDC a řídící server. Mapuje pak realm na doménová jména. Je možnost používat DNSTXT záznamy pro mapování realmů, ale je třeba dávat pozor na podvržení DNS záznamů.

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]
 LAB.FI.MUNI.CZ = {
  #master_key_type = des3-hmac-sha1
  supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
 }

Tento soubor definuje vlastnosti realmů a soubory s uživateli.

Dále vytvoříme záznamy pro služby, administrátora, spustíme služby kadmin a krb5kdc.

Použití

Chceme-li použít kerberos, použijeme příkaz kinit, který nám získá TGT a cachuje ho. Toto je též možné při přihlašování pomocí PAM. TGT lístek mŮžete zrušit pomocí kdestroy. Vaše platné lístky si vypíšete příkazem klist. Heslo změníte příkazem kpasswd.

Správu kerberosu provádíte příkazem kadmin (možno interaktivně).

Literatura