Kerberos a PAM
Ondrej Kocian <kocian dot on at gmail dot
com>
Obsah
PAM
Pluggable Authentication Modules najdeme dnes
jiz na spuste Unix-like systemech. Vznikl na myslence umoznit programum
nezavislost na konkretnich authentizacnich postupech. Pri potrebe
autentizace dana aplikace zavola funkci z PAM, ta s uzivatem
autentizaci uskutecni a aplikaci akorat vrati, jak to vsechno dopadlo.
To dava prostor moznostem v autentizaci - otisk pristu, sitnice..
Puvodne vyvinut firmou Sun Microsystem priblizne v roce 1995, nyni je
pod licencu GPL (Linux-PAM) nebo BSD (OpenPAM), o hlavni vyvoj se stara
Red Hat. Nasel vyuziti ve spouste UNIX-like systemu, kde je povetsinou
jiz defaultne k najiti.
PAM se stara o ctyri oblasti:
- auth -- vlastni autentizace - overeni identity zadatele
- account -- kontrola existence uctu, prava sluzbu pouzivat
- session -- spousti se pred zpristupnenim sluzby a po,
obvykle nastavuje promenne prostredi,
- password -- zmeny autentizacnich mechanismu (zmena hesla)
Zakladem tohoto systemu jsou pripojitelne autentizacni moduly - sdilene
objektove soubory (/lib/security):
- pam_krb5.so -- autentizace Kerberem
- pam_time.so -- kontrola pristupu podle casu
- pam_stack.so -- nacitani konfigurace ze souboru uvedeneho
jako argument
- pam_securetty.so -- kontrola terminalu podle /etc/securetty
- pam_nologin.so -- kontrola existence /etc/nologin
- pam_unix.so -- standartni autentizacni modul
- pam_limits.so -- kvoty
- pam_deny.so -- autentizase zakazana vzdy (napr u other pro
vetsi bezpecnost)
- pam_warn.so -- logy.
Pristup aplikace probiha pres 2 vrstvy: systemova knihovna libpam - tim
aplikace dostava k dispozici autentizacni sluzby, druha je systemova
konfigurace - zde se urcuje co vsechno musi uzivatel splnit. Tu najdeme
najdeme povetsinou v adresari /etc/pam.d/, kde jsou konfiguracni
soubory pojmenovane nazvem programu. Napriklad authentizace pres
program login vypada zhruba takto:
-
# cat /etc/pam.d/login #%PAM-1.0
#type control module-path [module-args]
auth required pam_securetty.so
auth requisite pam_nologin.so
auth required pam_unix.so nullok
auth required pam_tally.so onerr=succeed file=/var/log/faillog
# use this to lockout accounts for 10 minutes after 3 failed attempts
#auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog
account required pam_access.so
account required pam_time.so
account required pam_unix.so
#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password required pam_unix.so md5 shadow use_authtok
session required pam_unix.so
session required pam_env.so
session required pam_motd.so
session required pam_limits.so
session optional pam_mail.so dir=/var/spool/mail standard
session optional pam_lastlog.so
Kerberos
Kerberos je sitovy protokol, snazi se zajistit bezpecnost
(pocita s "vetrelcem" uvnitr site schopneho provoz kdekoli na siti
odposlechnout, vysilat zpet do site nebo se vydavat se za nekoho
jineho). Vyvinula ho MIT (Massachusetts Institute of Technology) pro
ochranu sitovych sluzeb poskytovanych projektem Athena (1984-1991, X
window System). Jmeno nese po velkem 3 hlavem psovi z recke mytologie,
strazci Hades - buh podsveti.
Puvodne Kerberos stoji na symetricke kryptografii, duverihodne
treti strane, tajne sdilene informaci (client - treti strana) a
casovych znamkach. Rozsireni Kerberos pak umoznuje pouziti public-key
kryptografie pri autentizaci. Pouziva na spouste Unix-like systemech
ale taky ho napriklad pouziva Win 2000, XP, Vista, Server 2003 a 2008
jako standartni autentizacni metodu.
Komunikace na siti
Jako jeho zaklad je pouzit Needham-Schroeder protokol a nezbytna je tu
prave treti strana KDC (key distribution center), ta se sklada ze dvou
casti:
- Authentification Server (AS) - overuje identitu
- Ticket Granting Server TGS - vydava listky
KDC obsahuje databazi tajnych klicu kazdeho na siti a taky generuje
session key ktery se pak pouziva pro sifrovanou komunikaci dvou entit.
A - klient
B - sluzba, druha strana
TGT - {A address,Timestamp - expirace do, Ask (session key A)}^Kkdc
TGS - Ticket Granting Server
Ask - A session key
AS - Authentification Server
Ka - symetricky klic A
Kb - symetricky klic B
Kab - symetricky klic pro komunikaci mezi AB
Kkdc - symetricky klic KDC
Zadost o TGT a session
key pro dalsi komunikaci s TGS:
A -> AS : A
AS -> A : TGT, {Ask}^Ka
Zadost o prideleni listku
pro pozadovanou sluzbu:
A -> TGS : {TGT, ID sluzby},{A Timestamp, ID sluzby}^Ask
TGS -> A : {ID sluzby, A address, validity period,Kab}^Kb,
{Kab}^Ask
Identifikace sluzby a
klienta:
A -> B : {ID sluzby, A address, validity period,Kab}^Kb,{A,A
Timestamp}^Kab
B -> A : {A TimeStamp + 1}^Kab
Instalace
Momentalni verze: Kerberos 5 Realise 1.6.3 [home], BSD
licence
Heimdal je
implementace Kerberos 5, momentalni verze 1.1 [home], BSD licence.
Vyvorena Royal Institutem of Technology ve Svedsku. Implementuje
programy jako je rsh, telnel, popper atd.
Bud z package manageru (napr emerge Heimdal), nebo primo ze zdrojovych
kodu.
Konfigurace
Dva asi nejdulezitejsi soubory jsou krb5.conf (mel by byt umisten v
/etc) a kdc.conf (jeho umisteni v krb5.conf).
Oba pouzivaji stejny system:
[section1]
a-subsection = {
var = value1
other-var = value with {}
sub-sub-section = {
var = 123
}
}
var = some other value
[section2]
var = yet another value
krb5.conf:
[libdefaults]
ticket_lifetime = 600
default_realm = EXAMPLE.COM
default_etypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5
default_etypes_des = des3-hmac-sha1 des-cbc-crc des-cbc-md5
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com:88
admin_server = kerberos.example.com:749
}
[kdc]
profile = /krb5/var/krb5kdc/kdc.conf
[logging]
kdc = CONSOLE
kdc = SYSLOG:INFO:DAEMON
Uplny priklad na http://www.ornl.gov/~jar/krb5conf.txt.
libdefaults
- zivotnost listku, sifrovaci algoritmy
login
- promenne vyuzivany login programem -
jesli pouzivat ci nepouzivat heslo pro ziskani V5/V4 ticket, program,
cesta k nemu
appdefaults
- promenne pro aplikace
realms
- informace o jednotlivych oblastech
(realm), cesty k jejich KDC
domain_realm
- seznam pro prevod z hostname ci domain
(uvozeny ".") jmena na Kerberos realm name
.mit.edu = ATHENA.MIT.EDU
mit.edu =
ATHENA.MIT.EDU
logging
- popisuju jak jednotlive programy
vyporadaji s logy
kdc =
FILE:/krb5/lib/krb5kdc/kdc.log
admin_server =
FILE:/krb5/lib/krb5kdc/adm.log
default =
FILE:/krb5/lib/krb5kdc/log.log
capaths
- nehierarchicke seznamy oblasti
mezioblasti ktere se pouziji pri cross-realm autentizaci - tedy
autentizaci pres oblasti. Taky ho pouziva koncova sluzba kdyz hleda
duverihodne oblasti.
kdc.conf:
[kdcdefaults]
kdc_ports = 88
[realms]
dsdoe.ornl.gov = {
profile = /etc/krb5.conf
database_name = /krb5/var/krb5kdc/principal
admin_database_name = /krb5/var/krb5kdc/kadm5_adb
admin_database_lockfile = /krb5/var/krb5kdc/kadm5_adb.lock
admin_keytab = FILE:/krb5/var/krb5kdc/kadm5.keytab
acl_file = /krb5/var/krb5kdc/kadm5.acl
key_stash_file = /krb5/var/krb5kdc/.k5stash
kdc_ports = 88
kadmind_port = 749
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des-cbc-crc
supported_enctypes = des-cbc-crc:normal des:v4
}
kdcdefaults
- seznam portu
realms
- poseznamy oblasti, specificke nastaveni (napr kde najit Kerberos
server pro danou oblast)
logging
Databaze:
v databazi si kerberos udrzuje klice, defaultne v /var/heimdal.
Databaze jde zasifrovat:
$ kstash --random-key
Sprava databaze:
$ kadmin -l
kadmin> init LAB.FI.MUNI.CZ
Realm max ticket life [unlimited]:
Realm max renewable ticket life [unlimited]:
kadmin> add janko_mrkvicka
Max ticket life [1 day]:
Max renewable life [1 week]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
janko_mrkvicka@LAB.FI.MUNI.CZ's Password:
Verifying - janko_mrkvicka@LAB.FI.MUNI.CZ's Password:
Dalsi zajimave programy:
kadmin(8) - administrace databaze
kinit(1) - ziskani TGT
klogin(1) - overeni totoznosti
klist(1) - aktualne pridelene listy
kpasswd(1) - zmena hesla
kdestroy(1) - odstraneni prideleneho listku
ktutil(1) - sprava keytabu
ksu - su v Kerberu
hprop(8), hpropd(8) - replikace databaze
Literatura