PAM
V dřívějších dobách si autentifikaci uživatelů přistupujících k dané aplikaci musela obstarat aplikace sama. Tento přístup má několik nevýhod: nejen že to je zcela proti filozofii unixových systému (kde každý program děla jednu věc, ale dělá ji dobře), ale hlavně nedovoluje jednoduchou změnu autentizačních mechanizmů. Linux-PAM (Pluggable Authentication Modules for Linux) je systém modulů dovolující aplikacím nezávislost na autentizačních mechanizmech, které jsou plně pod správou systému PAM. Aplikace pak samotný proces autentizace (realizovaný heslem, biometrikami, čipovými kartami, ...) přenechává na knihovně libpam. Důležitou součástí systému PAM jsou autentizační moduly (dynamické objektové soubory) umístěné v adresáři /lib/security/ nebo /usr/lib/security/.
Konfigurace
Konfigurační soubory Ve starších verzích byl konfigurační soubor /etc/pam.conf, novější verze má pro každou aplikaci (schopnou pracovat s PAM) zvláštní konfigurační soubor nacházející se v adresáři /etc/pam.d/ (např. /etc/pam.d/reboot). Soubor /etc/pam.conf se pak bere na vědomí jen v případě, že adresář /etc/pam.d/ neexistuje.
Struktura /etc/pam.conf je:
service-name module-type control-flag module-path args
Struktura /etc/pam.d/<service-name> je:
module-type control-flag module-path args
Kde: service-name
Jméno služby/aplikace. Speciální service-name OTHER je rezervovaný pro defaultní autentifikační mechanismus. Zde je dobrým zvykem zakázat vše, co není vysloveně povoleno: #%PAM-1.0 # This is /etc/pam.d/other auth required pam_deny.so auth required pam_warn.so account required pam_deny.so account required pam_warn.so password required pam_deny.so password required pam_warn.so session required pam_deny.so session required pam_warn.so
module-type
Jeden ze čtyř možných typů modulu: auth autentizace uživatele (heslem, biometrikami, ...); account provádí se další ověřování přístupu k službě, které však nemá nic společného s ověřováním identity uživatele (např. přístup jen v určitou dobu,...); session provádí se před a po skončení služby. Stará se o správu sezení. Může např. nastavovat proměnné prostředí, omezovat systémové prostředky, chroot, logovaní, ... password provádí aktualizaci uživatelských autentizačních tokenů (heslo, otisk prstu, ...). Obvykle také umožňuje kontrolu "kvality" hesla (délka, odolnost proti slovníkovému útoku).
control-flag
používá se k definici reakce na (ne)úspěšné ukončení modulu. Moduly stejného typu se spouštějí v sérii (jeden po druhém). Kontrolní příznaky pak určují reakci při skončení modulu. Aplikace se ale nedozví jak skončil který modul, místo toho obdrží jen celkovou odpověď success/fail. Od Linux-PAM v0.60 lze kontrolní příznak definovat jedním ze dvou způsobů:
pomocí jednoho z klíčových slov: required jeho neúspěch způsobí zamítnutí, ale až po provedení ostatních modulů ze stejné oblasti. requisite liší se od required okamžitým oznámením neúspěchu. Např. při přihlašování přes nespolehlivý kanál nám nedovolí zadávat heslo. sufficient modul s tímto příznakem může okamžitě ukončit kontroly s výsledkem success, pokud tento modul uspěl a žádný z předchozích modulů nezamítl přístup. Jinak je modul ignorován a pokračuje se dál v kontrole. Využívá se převážně pro přeskočeni zdlouhavých kontrol, pokud službu požaduje superuživatel. optional (ne)úspěch těchto modulů se nezahrnuje do celkového výsledku.
Nebo pomocí propracovanější syntaxe, ve které je kontrolní příznak tvaru: [value1=action1 value2=action2, ...]
module-path
cesta k modulům. Implicitně (pokud není zadána cesta absolutní) se hledá v /usr/lib/security/ (/lib/security/).
args
argumenty předávané modulu při jeho spuštění.
Příklad modulu
pam_localuser
- vyžaduje uživatele uvedeného v /etc/passwd
pam_krb5
- autentizace přes Kerberos 5
pam_succeed_if
- úspěch tohoto modulu závisí na širší charakteristice uživatelova účtu (LOGIN,UID,GID,SHELL,HOME).
pam_cracklib
- kontrola odolnosti hesla.
pam_limits
- nastavování limitu (/etc/security/limits.conf).
pam_time
- přístup jen v určitou dobu (/etc/security/time.conf).
pam_warn
- slouží pro zápis do syslogu.
Příklad konfiguračního souboru /etc/pam.d/login
#%PAM-1.0 auth required pam_securetty.so #kontrola, zda pristupujeme pres bezpecny kanal auth required pam_stack.so service=system-auth #vyhodnoce se ulozi na zasobnik auth required pam_nologin.so #kontrola zda neexistuje soubor /etc/nologin account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth session optional pam_console.so