Dokumentáció/SL9.3/Rendszer/Hitelesítés PAM használatával
Bevezetés
A rendszergazdák és a programozók gyakran kívánják korlátozni a hozzáférést a rendszer egyes részeihez, illetve korlátozni az alkalmazások bizonyos funkcióinak használatát. PAM nélkül az alkalmazásokat minden egyes új hitelesítési mechanizmushoz (például LDAP vagy SAMBA) hozzá kell igazítani. Ez a folyamat azonban meglehetősen időigényes és a hibázás esélyét rejti. E hátrányok elkerülésének egyik módja az alkalmazások és a hitelesítési mechanizmusok szétválasztása, és az utóbbi központilag felügyelt modulokba irányítása. Így minden egyes alkalommal, ha egy új hitelesítési séma kerül bevezetésre, elegendő a megfelelő PAM-modult elkészíteni vagy adaptálni.
A PAM mechanizmusát használó programok mindegyikének van egy saját konfigurációs fájlja az /etc/pam.d/<programnév> könyvtárban. Ezek a fájlok határozzák meg a hitelesítéshez használt PAM-modulokat. Létezik továbbá egy globális konfigurációs fájl a legtöbb PAM-modulhoz az /etc/security könyvtárban, amely meghatározza a modulok pontos viselkedését (ilyen például a pam_env.conf, a pam_pwcheck.conf, a pam_unix2.conf és a time.conf). A PAM-modulokat használó alkalmazások ténylegesen egy sor PAM-funkciót hívnak meg, amelyek azután feldolgozzák a különféle konfigurációs fájlokban található adatokat és az eredményt visszaadják a hívó alkalmazásnak.
PAM konfigurációs fájlok szerkezete
A PAM konfigurációs fájlok minden egyes sora maximum négy oszlopból állhat:
<Modul típusa> <Vezérlő jelző> <Modul elérési út> <Paraméterek>
A PAM-modulok egymásra épülve kerülnek feldolgozásra. A különféle típusú moduloknak különböző feladataik vannak: az egyik modul például ellenőrzi a jelszót, a másik azt a helyet, ahonnan a rendszert elérték, egy harmadik pedig lehet, hogy felhasználóspecifikus beállításokat vizsgál meg. A PAM négyféle modultípust különböztet meg:
- auth
- Az ilyen típusú modulok feladata a felhasználó azonosságának ellenőrzése. Hagyományosan ez jelszóellenőrzéssel történik, de használhatók például intelligens kártyák, vagy különféle biometriai eszközök (ujjlenyomat- vagy szivárványhártya-ellenőrzés) is.
- account
- Az ilyen típusú modulok ellenőrzik, hogy a felhasználó rendelkezik-e általános engedéllyel a kért szolgáltatás használatára. Például ilyen ellenőrzésre van szükség ahhoz, hogy senki ne léphessen be egy lejárt felhasználói fiók azonosítójával.
- password
- Az ilyen típusú modulok feladata, hogy lehetővé tegyék a hitelesítési tokenek cseréjét. A legtöbb esetben ez egy jelszót jelent.
- session
- Az ilyen típusú modulok felelősek a felhasználói munkamenetek kezeléséért és beállításáért. A hitelesítés előtt és után kerülnek elindításra, hogy feljegyezzék a bejelentkezési kísérleteket a rendszernaplókba, valamint beállítsák a felhasználó egyedi környezetét (postafiókok, saját könyvtár, rendszerkorlátok stb).A második oszlop az elindított modulok viselkedését befolyásoló vezérlő jelzőket tartalmaz:
- required
- Az ilyen jelzőjű modulok feldolgozásának sikeresen végbe kell mennie ahhoz, hogy a hitelesítés folytatódjon. Egy required jelzőjű modul sikertelen futása esetén az ilyen jelzőjű összes többi modul feldolgozásra kerül, mielőtt a felhasználó üzenetet kapna a hitelesítési kísérlet sikertelenségéről.
- requisite
- Hasonlóan a required jelzőjű modulokhoz, az ilyen jelzőjű modulok feldolgozásának sikeresen végbe kell mennie. Egy ilyen jelzőjű modul sikertelen futása esetén azonban a felhasználó azonnal üzenetet kap és a rendszer a további modulokat nem dolgozza fel. Sikeres végrehajtás esetén feldolgozásra kerülnek a további modulok, hasonlóan a required jelzőhöz. A requisite jelző alapszintű szűrőként használható, amely a helyes hitelesítés alapvető fontosságú feltételeinek meglétét ellenőrzi.
- sufficient
- Az ilyen jelzőjű modul sikeres feldolgozása esetén a hívó alkalmazás azonnal üzenetet kap a sikerről és a többi modul már nem is kerül feldolgozásra, feltéve, hogy nem volt korábbi required jelzőjű sikertelen modul. A sufficient jelzőjű modul sikertelen feldolgozása nem jár közvetlen következményekkel, hiszen minden további modul a megfelelő sorrendben végrehajtásra kerül.
- optional
- Az ilyen jelzőjű modulok sikertelensége vagy sikere nem jár semmilyen direkt következménnyel. Ez olyan modulok esetén hasznos, amelyeknek csak egy üzenetet kell megjeleníteniük (például jelezni a felhasználónak, hogy levele érkezett), egyéb teendők nélkül.
- include
- Ha ez a jelző meg van adva, akkor a paraméterként megadott fájl beszúrásra kerül ezen a helyen.A modul elérési útját nem kell külön megadni, amennyiben a modul az alapértelmezett könyvtárban /lib/security található (a SUSE LINUX által támogatott 64 bites platformokon a könyvtár neve /lib64/security). A negyedik oszlop az adott modul esetleges paramétereit tartalmazza. Ilyen lehet például a debug (a hibakeresés engedélyezése) vagy a nullok (üres jelszavak használatának engedélyezése).
Az sshd PAM-konfigurációja
A PAM működésének illusztrálására tekintsük át az sshd PAM-konfigurációját gyakorlati példaként:
Példa: Az sshd PAM-konfigurációja
#%PAM-1.0 auth include common-auth auth required pam_nologin.so account include common-account password include common-password session include common-session # Enable the following line to get resmgr support for # ssh sessions (see /usr/share/doc/packages/resmgr/README.SuSE) #session optional pam_resmgr.so fake_ttyname
Egy alkalmazás (a jelen esetben az sshd) tipikus PAM-konfigurációja négy include utasítást tartalmaz, amelyek a négy modultípus konfigurációs fájljaira utalnak: common-auth, common-account, common-password és common-session. Ez a négy fájl tartalmazza az egyes modultípusok alapértelmezett konfigurációját. Ha beágyazva használja őket az egyes modulok PAM-alkalmazásonkénti külön-külön meghívása helyett, akkor automatikusan frissítésre kerül a PAM-konfiguráció, ha a rendszergazda módosítja az alapértelmezett értékeket. Régebben kézzel kellett módosítani minden alkalmazás konfigurációs fájlját, ha a PAM-ban változások történtek, vagy egy új alkalmazás került telepítésre. A PAM-konfiguráció és az összes módosítása öröklődik az alapértelmezett konfigurációs fájlokon keresztül. Az első beágyazott fájl (a common-auth) két auth típusú modult hív meg: a pam_env és pam_unix2 modulokat. Lásd: Az auth szakasz alapértelmezett konfigurációja.
Példa: Az auth szakasz alapértelmezett konfigurációja
auth required pam_env.so auth required pam_unix2.so
Az első, a pam_env az /etc/security/pam_env.conf fájlt tölti be a fájlban megadott környezeti változók beállításához. Így például beállítható a DISPLAY változó a helyes értékre, mivel a pam_env modul tudja, hogy a bejelentkezés honnan történik. A második, a pam_unix2 összeveti a felhasználó bejelentkezési azonosítóját és jelszavát az /etc/passwd és az /etc/shadow fájlban tároltakkal.
A common-auth részben megadott fájlok sikeres meghívása után egy harmadik, pam_nologin nevű modul ellenőrzi, hogy az /etc/nologin fájl létezik-e. Ha igen, akkor csak a root felhasználó jelentkezhet be. Az összes auth modul feldolgozásra kerül, mielőtt az sshd bármilyen visszajelzést kapna arról, hogy a bejelentkezés sikerült-e. Figyelembe véve, hogy az összes modul required vezérlő jelzővel rendelkezik, ahhoz, hogy az sshd pozitív eredményt kapjon vissza, mindegyikük feldolgozásának sikeresen végbe kell mennie. Ha a modulok közül csak egy is sikertelen, az összes modul feldolgozásra kerül, majd ezután kap értesítést az sshd a negatív eredményről.
Miután az összes auth típusú modul sikeresen feldolgozásra került, egy újabb beágyazási (include) utasítás következik, amint azt a Az account szakasz alapértelmezett konfigurációja mutatja. A common-account csak egy modult tartalmaz, ez a pam_unix2. Ha a pam_unix2 azt az eredményt adja vissza, hogy a felhasználó létezik, az sshd kap egy üzenetet a sikerről, és a következő modulköteg (password) kerül feldolgozásra: A password szakasz alapértelmezett konfigurációja.
Példa: Az account szakasz alapértelmezett konfigurációja
account required pam_unix2.so
Példa: A password szakasz alapértelmezett konfigurációja
password required pam_pwcheck.so nullok password required pam_unix2.so nullok use_first_pass use_authtok #password required pam_make.so /var/yp
Az sshd PAM-konfigurációja megint csupán egy include utasítást tartalmaz, amely a password moduloknak a common-password helyen található alapértelmezett konfigurációjára hivatkozik. Ezeknek a moduloknak sikeresen végbe kell menniük (required vezérlő jelző) minden alkalommal, ha az alkalmazás a hitelesítési token módosítását kéri. A jelszó vagy valamilyen más hitelesítési token megváltoztatása biztonsági ellenőrzést igényel. Ezt a pam_pwcheck modul végzi. Az utána használt pam_unix2 modul áthoz minden régi és új jelszót a pam_pwcheck modulból, így a felhasználónak nem kell újra hitelesítenie magát. Ez továbbá lehetetlenné teszi a pam_pwcheck által végzett ellenőrzések megkerülését is. A password típusú modulokat akkor kell használni, ha az előző, account vagy auth típusok be vannak állítva, hogy jelezzék a lejárt jelszavakat.
A session szakasz alapértelmezett konfigurációja
session required pam_limits.so session required pam_unix2.so
Utolsó lépésként a session típusú modulok (ezek a common-session fájlba vannak beágyazva) kerülnek meghívásra a munkamenet beállítására az adott felhasználónak megfelelően. Bár a pam_unix2 modul ismét feldolgozásra kerül, ennek nincs gyakorlati következménye, mivel a modul vonatkozó konfigurációs fájljában (pam_unix2.conf) a none paraméter van megadva. A pam_limits modul betölti a /etc/security/limits.conf fájlt, amely korlátokat szabhat meg bizonyos rendszererőforrások használatával kapcsolatban. A session modulok a felhasználó kijelentkezésekor másodszor is meghívásra kerülnek.
A PAM-modulok beállítása
A PAM-modulok némelyike konfigurálható. A megfelelő konfigurációs fájlok az /etc/security könyvtárban találhatók. Az alábbi szakasz röviden leírja az sshd példával kapcsolatos konfigurációs fájlokat (—pam_unix2.conf, pam_env.conf, pam_pwcheck.conf és limits.conf).
pam_unix2.conf
A hagyományos, jelszó alapú hitelesítési módszert a pam_unix2 PAM-modul szabályozza. Képes kiolvasni a szükséges adatokat az /etc/passwd és /etc/shadow fájlokból, a NIS térképekből, a NIS+ táblázatokból és LDAP-adatbázisokból. A modul viselkedése befolyásolható az egyes alkalmazások PAM-beállításainak módosításával, illetve globálisan, az /etc/security/pam_unix2.conf fájl szerkesztésével. A pam_unix2.conf a modul egy nagyon egyszerű konfigurációs fájlját mutatja be.
auth: nullok account: password: nullok session: none
Auth és password típusú modulok esetén a nullok paraméterek azt határozzák meg, hogy a megfelelő típusú fiók üres jelszavakat is használhat. A felhasználók továbbá módosíthatják a fiókokhoz tartozó jelszavakat. A none paraméter a session modultípus esetében azt adja meg, hogy semmilyen üzenet nem kerül naplózásra (ez az alapértelmezés). A további beállítási lehetőségek a fájlban található megjegyzésekből, valamint a pam_unix2(8) man oldalból ismerhetők meg.
pam_env.conf
Ez a fájl használható a felhasználók számára egy szabványosított környezet kialakítására, amely beállításra kerül a pam_env modul minden egyes meghívásánál. Ebben az esetben az előre beállított környezeti változók a következő szintaxissal adhatók meg:
VÁLTOZÓ_NEVE [DEFAULT=[érték]] [OVERRIDE=[érték]]
- VARIABLE
- A beállítani kívánt környezeti változó neve.
- [DEFAULT=[érték]]
- A rendszergazda által beállítani kívánt alapérték.
- [OVERRIDE=[érték]]
- A pam_env által lekérdezhető és beállítható, az alapértelmezett értéket felülírható értékek.Egy igen hétköznapi példa, ahol az alapértelmezett értéket felül kell írnia a pam_env modulnak, a DISPLAY változó, amelyik minden egyes távoli bejelentkezéskor módosításra kerül. Lásd: pam_env.conf.
REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
Az első sor beállítja a REMOTEHOST változót a localhost értékre, és ez kerül mindig használatra, ha a pam_env nem tud kideríteni más értéket. A DISPLAY változó pedig tartalmazza a REMOTEHOST értékét. A további beállítási lehetőségek az /etc/security/pam_env.conf fájlban található megjegyzésekből ismerhetők meg.
pam_pwcheck.conf
Ez a pam_pwcheck modul konfigurációs fájlja, amelyik a password típusú modulok paramétereit olvassa ki. Az ebben a fájlban tárolt értékek felülbírálják az egyes alkalmazások PAM-beállításait. Ha nincsenek megadva alkalmazásspecifikus beállítások, akkor az alkalmazás a globális beállításokat használja. A pam_pwcheck.conf azt mutatja be, amikor a pam_pwcheck engedi az üres jelszavak használatát és a jelszavak módosítását. A modul további beállítási lehetőségei az /etc/security/pam_pwcheck.conf fájlban vannak megemlítve.
password nullok
limits.conf
Rendszerkorlátok egy felhasználóra vagy felhasználói csoportra a limits.conf fájlban állíthatók be, amelyet a pam_limits modul olvas ki. A fájlban fix korlátok is beállíthatók (ezeket semmilyen körülmények között nem lehet meghaladni), illetve lágy korlátok, amelyek ideiglenesen túlléphetők. A szintaxis és a rendelkezésre álló paraméterek a fájlban található megjegyzésekből ismerhetők meg.
További információ
A telepített rendszer /usr/share/doc/packages/pam könyvtárában az alábbi dokumentációs anyagok találhatók:
- README fájlok
- A könyvtár legfelső szintjén néhány általános README fájl található. A modules alkönyvtárban a rendelkezésre álló PAM-modulok README fájljai találhatók.
- A Linux-PAM rendszergazda kézikönyve
- Ez a dokumentum mindent tartalmaz, amit csak egy rendszergazdának tudnia kellhet a PAM-ról. Témakörök sokaságát öleli fel, a konfigurációs fájlok szintaxisától kezdve egészen a PAM biztonsági aspektusáig. A dokumentum PDF-fájlként, HTML-formátumban és sima szövegként is megtalálható.
- A Linux-PAM-modul írók kézikönyve
- Ez a dokumentum a témakört a fejlesztők szemszögéből tekinti át, részletes információt adva arról, hogyan készíthetők a szabványnak megfelelő PAM-modulok. A dokumentum PDF-fájlként, HTML-formátumban és sima szövegként is megtalálható.
- A Linux-PAM alkalmazásfejlesztő kézikönyve
- Ez a dokumentum mindent tartalmaz a PAM-könyvtárakat használni kívánó alkalmazásfejlesztők számára. A dokumentum PDF-fájlként, HTML-formátumban és sima szövegként is megtalálható.Thorsten Kukuk számos PAM-modult készített SUSE LINUX alá, valamint ezek leírását is. Ennek helye: http://www.suse.de/~kukuk/pam/.