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ě).