Dokumentáció/SL9.3/Rendszer/Hitelesítés PAM használatával

Icon-pam.png A Linux a PAM (Pluggable Authentication Modules, cserélhető hitelesítési modulok) rendszert használja a hitelesítési folyamatban a felhasználó és az alkalmazás közötti rétegként. A PAM-modulok rendszerszinten állnak rendelkezésre, így akármelyik alkalmazás kérheti őket. Ez a fejezet leírja a moduláris hitelesítési mechanizmus működését és beállításának módját.

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:


Icon-example.png 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.


Icon-example.png 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.


Icon-example.png Példa: Az account szakasz alapértelmezett konfigurációja

account required        pam_unix2.so


Icon-example.png 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.


Icon-example.png 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.


Icon-example.png Példa: pam_unix2.conf

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.


Icon-example.png Példa: 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.


Icon-example.png Példa: pam_pwcheck.conf

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/.