PAM - správa autentizačních mechanismů

19. 9. 2000
Doba čtení: 5 minut

Sdílet

Systém PAM (Pluggable Authentication Modules) dává administrátorům počítačových systémů do ruky nástroj, který jim citelně usnadní řešení jejich problémů s přidělováním přístupových práv uživatelům. V tomto článku prozkoumáme základní principy PAM z hlediska správců.

V nedávných dobách žádný univerzální autentizační systém neexistoval. Aplikace, která poskytovala zneužitelné služby, musela provést kontrolu identity sama. Například login prověřil záznam v souboru /etc/passwd a rozhodl, jestli uživateli povolí přihlášení. Slabinou tohoto přístupu je spor s filozofií unixových systémů, aby každý program dělal jednu věc, ale dělal ji dobře. Některé služby totiž své bezpečnostní mechanismy měly velmi slabé, protože programátoři nebyli odborníci na zabezpečení.

Další vada na kráse zabudovaných kontrol identity se jmenuje nemožnost rozšiřování. Při přechodu na systém stíněných hesel, kdy jsou hesla uchována ve zvláštním, běžným uživatelům nepřístupném souboru (/etc/shadow), bylo nutné upravit zdrojové kódy programu login a všech podobných aplikací, které využívaly /etc/passwd. Každého napadne, že taková věc není maličkost. Především musí být zdrojové kódy všech takových programů dostupné, což je sice (alespoň pod Linuxem) běžné, ale výjimky se najdou.

Tím se dostáváme k myšlence PAM: zajistit, aby programy byly nezávislé na konkrétních autentizačních postupech. Aplikace chce obvykle vědět, zda má službu poskytnout nebo ne, ale nezajímá ji, jestli bude kontrola realizovaná heslem, magnetickou kartou nebo scanováním oční sítnice.

Základem systému PAM jsou připojovatelné autentizační moduly. Jedná se o sdílené objektové soubory a podle konvence je najdeme v adresáři /lib/security. Samy od sebe pochopitelně moduly nevykonávají žádnou činnost. Aplikace k nim obvykle přistupuje přes dvě vrstvy. První vrstvou je systémová knihovna připojená k programu; tím aplikace dostává k dispozici autentizační služby. Druhou, nejvýznamnější vrstvou je systémová konfigurace. Zde administrátor určuje, co všechno musí uživatel splnit, aby mu byla služba aplikace poskytnuta.

Způsob konfigurace systému PAM si ukážeme na běžném příkladu, už zmíněném programu login. Podle ukázky pak prozkoumáme důležité vlastnosti celého PAMu.

#%PAM-1.0
# This is /etc/pam.d/login
auth        requisite   pam_securetty.so
auth        required    pam_pwdb.so    shadow nullok
auth        required    pam_nologin.so
account     required    pam_pwdb.so
session     required    pam_pwdb.so
session     optional    pam_console.so
password    required    pam_cracklib.so
password    required    pam_pwdb.so    nullok use_authtok md5 shadow

Vidíme, že každý řádek konfiguračního souboru (pochopitelně kromě komentářů) se skládá alespoň ze tří položek. První z nich je funkční oblast, druhý sloupec nazveme kontrolní příznak, třetí položka je samotné jméno PAM modulu, za kterým mohou následovat parametry.

PAM se angažuje ve čtyřech funkčních oblastech. Jde o autentizaci uživatele, kontrolu účtu, správu relace a změnu hesla. V těchto oblastech pak různé moduly provádí kontrolní nebo výkonné funkce.

Během autentizace (auth) se ověřuje identita uživatele. Může proběhnout kontrola hesla, připojení k serveru Kerberos, nebo jiná kontrolní činnost.

Kontrola účtu (account) provádí další ověřování, které nemá přímou souvislost s identitou uživatele. Příkladem je povolení přístupu jen během určité doby nebo omezení počtu současně přihlášených uživatelů.

Správa relace (session) se aktivuje před a po provedení služby. Obvykle nastavuje proměnné prostředí (environment) a omezuje systémové prostředky. Mezi další možnosti patří „uvěznění“ procesu pomocí chroot, připojení dalších souborových systémů nebo protokolování.

Konečně změna hesla (password) je oblast, jejíž moduly se starají o aktualizaci hesel a podobných uživatelských informací. Obvykle zde najdeme kontrolu délky a kvality hesla (např. pomocí knihovny cracklib), nebo například zápis hesla do databáze.

Zajímavou vlastností je, že v každé oblasti může být zapojen libovolný počet modulů. Administrátor má možnost jednoduše naprogramovat své požadavky na bezpečnost systému v podobě postupného volání modulů. Během autentizace podle ukázkové konfigurace se nejprve zkontroluje, jestli se superuživatel přihlašuje z bezpečného terminálu (netýká se ostatních uživatelů). Pak se provede běžná kontrola hesla podle /etc/shadow. Na závěr se zjistí, zda existuje soubor /etc/nologin; pokud ano, má přístup povolen jedině superuživatel, ostatním je vypsán obsah tohoto souboru a relace je ukončena.

Dalším prvkem ve schématu zabezpečení je kontrolní příznak. Ten určuje, jak s modulem zacházet. Možné hodnoty jsou required (povinný), requisite (bezpodmínečný), sufficient (postačující) a optional (nepovinný).

Modul, který je povinný a při kontrole neuspěje, sice způsobí zamítnutí přístupu, ale až po provedení ostatních modulů ze stejné oblasti. Bezpodmínečný modul se liší okamžitým oznámením neúspěchu. Můžeme si představit, že takový modul zjistí pokus o přihlášení přes nějaké nespolehlivé médium (třeba nezašifrované spojení). Díky včasnému odmítnutí přístupu zabrání, aby uživatel poslal přes toto médium heslo, které by mohl zachytit každý nadanější hacker.

Modul s příznakem postačující může okamžitě ukončit kontroly s výsledkem ‚úspěch‘, ale jedině za předpokladu, že tento modul uspěl a žádný z předchozích modulů nezamítnul přístup. Jinak je modul ignorován a přechází se na další kontrolu. Obvyklým využitím je přeskočení všech zdlouhavých kontrol, pokud aplikaci spouští superuživatel.

Úspěch či neúspěch nepovinných modulů se nezahrnuje do celkového výsledku. Jistě bychom nechtěli, aby byl uživatelům zakázán přístup jen proto, že dočasně není možné připojit souborový systém (např. CDROM).

V distribuci RedHat a jí podobných se konfigurace systému PAM uchovává v adresáři /etc/pam.d. Názvy souborů musí odpovídat jménům služeb, takže najdeme soubory login, su a další. Speciální význam má soubor other. Ten nastavuje zabezpečení pro služby, které nemají vlastní konfigurační soubor. Je dobrým zvykem vše, co není výslovně povoleno, jednoduše zakázat:

ict ve školství 24

#%PAM-1.0
# This is /etc/pam.d/other
auth        required    pam_deny.so
account     required    pam_deny.so
session     required    pam_deny.so
password    required    pam_deny.so

S takovou bezpečnostní politikou, obvykle nazývanou racionální, si můžeme být jistí, že zapomenuté zabezpečení některé služby nikomu neposkytne cestu do systému. Na druhou stranu, pokud bychom v takové situaci omylem smazali nebo poškodili konfiguraci (PAM netoleruje chyby syntaxe) pro login, pak se do systému dostaneme jen v záchranném jednouživatelském režimu po restartu. Je mnohem bezpečnější experimentovat s konfigurací např. programu xscreensaver – následky nějaké chyby se odstraňují přece jen rychleji.

Na závěr je nutné poznamenat, že k tomu, aby systém byl bezpečný a spolehlivý, musí správce systému chápat nejen principy PAM, ale musí znát i funkci všech použitých modulů. Dokumentaci k nim najdeme na obvyklých místech: v manuálových stránkách nebo dokumentaci dodávané s operačním systémem nebo na Internetu. Tam také najdeme i odkazy na další moduly, které se nedodávají v běžných Linuxových distribucích.

Autor článku