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í.
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:
auth – modul zajišťující ověření identity uživatele který se snaží přihlásitaccount – tento modul ověřuje platnost účtu případně dalších podmínek (omezení přihlášení roota na bezpečné terminály, omezení přihlášení uživatelů na určitou část dne…)password – modul se používá pro změnu hesla nebo jiného údaje sloužícího k přihlašování, může při tom např. kontrolovat sílu heslasession – modul připravující prostředí prostředí pro uživatele, může např. nastavovat proměnné prostředí, připojovat domovský adresář, provádět logování přístupuPolož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:
required – při selhání tohoto modulu se provádějí i další, ale celý proces nakonec selže ať už bude jejich výsledek jakýkolivrequisite – při selhání tohoto modulu selže celý proces a řízení je vráceno aplikaci, k vyvolání dalších modulů nedochází, možno použít k zabránění uživateli zadat heslo do nebezpečného kanáluoptional – na výsledek modulu se bere ohled jenom je-li jediným modulem přiřazeným danemů typu a službě, jinak se výsledek ignorujeinclude – zahrne se soubor udaný jako parametrRovněž 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).
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ů:
pam_craklib – kontrola kvality heslapam_unix – tradiční unixové přihlašování (zpravidla přes /etc/passwd a /etc/shadow)pam_time – řízení přístupu podle časupam_env – nastavení proměnných prostředípam_wheel – kontrola na členství ve skupině wheel (RMS má smůlu)pam_limits – nastavení limitů zdrojůpam_stack – starý způsob jak dělat includepam_krb5, pam_ldap umožňují jiný způsob přihlašování (přes kerberos či ldap)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.
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.
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.
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ě).