A PAM konfigurálása és használata Linuxban
A Linux-PAM (a Pluggable Authentication Modules rövidítése, amely a Unix-PAM architektúrából fejlődött ki) a megosztott könyvtárak hatékony csomagja, amellyel dinamikusan hitelesíthetők a felhasználók az alkalmazásokhoz (vagy szolgáltatásokhoz). ) Linux rendszerben.
Több alacsony szintű hitelesítési modult integrál egy magas szintű API-ba, amely dinamikus hitelesítési támogatást biztosít az alkalmazások számára. Ez lehetővé teszi a fejlesztők számára, hogy hitelesítést igénylő alkalmazásokat írjanak, függetlenül az alapul szolgáló hitelesítési rendszertől.
Sok modern Linux disztribúció alapértelmezés szerint támogatja a Linux-PAM (a továbbiakban: „PAM”) technológiát. Ebben a cikkben elmagyarázzuk, hogyan konfigurálható a speciális PAM Ubuntu és CentOS rendszerekben.
Mielőtt továbblépnénk, vegye figyelembe, hogy:
- Rendszergazdaként a legfontosabb annak elsajátítása, hogy a PAM konfigurációs fájl(ok) hogyan határozzák meg a kapcsolatot az alkalmazások (szolgáltatások) és a csatlakoztatható hitelesítési modulok (PAM) között, amelyek a tényleges hitelesítési feladatokat végzik. Nem feltétlenül kell megértenie a PAM belső működését.
- A PAM komolyan megváltoztathatja Linux rendszerének biztonságát. A hibás konfiguráció részben vagy teljesen letilthatja a hozzáférést a rendszerhez. Például egy konfigurációs fájl(ok) véletlen törlése az /etc/pam.d/* és/vagy az /etc/pam.conf alatt kizárhatja saját rendszer!
A program ellenőrzése a PAM-tudatos
A PAM használatához az alkalmazásnak/programnak „PAM-tudatosnak” kell lennie; kifejezetten a PAM használatához kell megírni és lefordítani. Ha meg szeretné tudni, hogy egy program „PAM-tudatos”-e vagy sem, ellenőrizze, hogy az ldd paranccsal a PAM-könyvtárral lett-e lefordítva.
Például sshd:
sudo ldd /usr/sbin/sshd | grep libpam.so
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)
A PAM konfigurálása Linux alatt
A PAM fő konfigurációs fájlja az /etc/pam.conf, az /etc/pam.d/ könyvtár pedig a PAM konfigurációs fájljait tartalmazza minden PAM-tudatos alkalmazás/szolgáltatás. A PAM figyelmen kívül hagyja a fájlt, ha a könyvtár létezik.
A fő konfigurációs fájl szintaxisa a következő. A fájl egyetlen sorba írt szabályok listájából áll (a szabályokat a „\ ”
escape karakterrel bővítheti), és a megjegyzések előtt a „# ”
jeleket, és nyúljon a sor következő végéig.
Az egyes szabályok formátuma a tokenek szóközzel elválasztott gyűjteménye (az első három nem különbözteti meg a kis- és nagybetűket). Ezeket a tokeneket a következő szakaszokban ismertetjük.
service type control-flag module module-arguments
ahol :
- szolgáltatás: az alkalmazás tényleges neve.
- típus: modultípus/kontextus/interfész.
- control-flag: a PAM-API viselkedését jelzi, ha a modul sikertelenül hajtja végre a hitelesítési feladatát.
- modul: a PAM abszolút fájlneve vagy relatív elérési útja.
- modul-argumentumok: a modul viselkedését vezérlő tokenek szóközzel elválasztott listája.
Az /etc/pam.d/ fájl szintaxisa hasonló a fő fájléhoz, és a következő formátumú sorokból áll:
type control-flag module module-arguments
Ez egy példa egy szabálydefinícióra (modul-argumentumok nélkül), amely az /etc/pam.d/sshd fájlban található, és nem engedélyezi a nem root bejelentkezést, amikor /etc/nologin létezik:
account required pam_nologin.so
A PAM-kezelési csoportok és a vezérlőjelzők megértése
A PAM hitelesítési feladatok négy független felügyeleti csoportra vannak osztva. Ezek a csoportok egy tipikus felhasználó korlátozott szolgáltatás iránti kérelmének különböző aspektusait kezelik.
Egy modul az alábbi felügyeleti csoporttípusokhoz van társítva:
- fiók: fiókellenőrzési szolgáltatások biztosítása: lejárt a felhasználó jelszava? ez a felhasználó hozzáférhet a kért szolgáltatáshoz?
- hitelesítés: felhasználó hitelesítése és felhasználói hitelesítő adatok beállítása.
- jelszó: felelősek a felhasználói jelszavak frissítéséért, és együttműködnek a hitelesítési modulokkal.
- munkamenet: a munkamenet elején és végén végrehajtott műveletek kezelése.
A PAM betölthető objektumfájloknak (a moduloknak) a következő könyvtárban kell lenniük: /lib/security/ vagy /lib64/security attól függően az építészet.
A támogatott vezérlőjelzők a következők:
- szükséges: a hiba azonnal visszaadja a vezérlést az alkalmazásnak, jelezve az első modulhiba természetét.
- szükséges: mindezen modulok szükségesek ahhoz, hogy a libpam sikeres legyen az alkalmazásban.
- elegendő: mivel az összes előző modul sikeres volt, ennek a modulnak a sikere azonnali és sikeres visszatéréshez vezet az alkalmazáshoz (a modul sikertelenségét figyelmen kívül hagyja).
- nem kötelező: a modul sikerét vagy kudarcát általában nem rögzítik.
A fentieken kívül a kulcsszavakon kívül van még két érvényes vezérlőjelző:
- Include and substack: tartalmazza a vezérlő argumentumaként megadott konfigurációs fájl összes sorát.
Hogyan lehet korlátozni a root hozzáférést az SSH szolgáltatáshoz PAM-on keresztül
Példaként beállítjuk, hogyan lehet a PAM használatával letiltani a root felhasználói hozzáférést a rendszerhez SSH-n és bejelentkezési programokon keresztül. Itt szeretnénk letiltani a root felhasználói hozzáférést a rendszerhez a bejelentkezési és az sshd szolgáltatásokhoz való hozzáférés korlátozásával.
Használhatjuk a /lib/security/pam_listfile.so modult, amely nagy rugalmasságot kínál az egyes fiókok jogosultságának korlátozásában. Nyissa meg és szerkessze a célszolgáltatás fájlját az /etc/pam.d/ könyvtárban az ábra szerint.
sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login
Adja hozzá ezt a szabályt mindkét fájlhoz.
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
A fenti szabály tokenek magyarázata:
- auth: a modul típusa (vagy kontextus).
- kötelező: egy vezérlőjelző, amely azt jelenti, hogy ha a modult használják, annak át kell mennie, különben az eredmény sikertelen lesz, függetlenül a többi modul állapotától.
- pam_listfile.so: egy olyan modul, amely lehetőséget biztosít a szolgáltatások letiltására vagy engedélyezésére tetszőleges fájl alapján.
- onerr=succeed: modul argumentum.
- item=user: modul-argumentum, amely meghatározza, hogy mi szerepel a fájlban, és hogy mi van benne, és ellenőrizni kell.
- sense=deny: modulargumentum, amely meghatározza a végrehajtandó műveletet, ha megtalálható a fájlban, ha az elem NEM található a fájlban, akkor az ellenkező műveletet kéri.
- file=/etc/ssh/deniedusers: modul argumentum, amely soronként egy elemet tartalmazó fájlt határoz meg.
Ezután létre kell hoznunk az /etc/ssh/deniedusers fájlt, és hozzá kell adnunk a root nevet:
sudo vim /etc/ssh/deniedusers
Mentse el a változtatásokat, zárja be a fájlt, majd állítsa be a szükséges engedélyeket:
sudo chmod 600 /etc/ssh/deniedusers
Mostantól a fenti szabály azt fogja utasítani a PAM-re, hogy nézze meg az /etc/ssh/deniedusers fájlt, és tiltsa le az SSH-hoz való hozzáférést és a bejelentkezési szolgáltatásokhoz való hozzáférést minden listán szereplő felhasználó számára.
Az Advanced PAM konfigurálása Linuxban
Összetettebb PAM-szabályok írásához használhat érvényes vezérlőjeleket a következő formában:
type [value1=action1 value2=action2 …] module module-arguments
Ahol az értékN az abban a modulban meghívott függvény visszatérési kódjának felel meg, amelyhez a sor definiálva van. A támogatott értékeket az online PAM rendszergazdai útmutatóban találja. Egy speciális érték az alapértelmezett, ami azt jelenti, hogy az összes valueN nincs kifejezetten megemlítve.
Az műveletN a következő formák egyikét öltheti:
- figyelmen kívül hagyás: ha ezt a műveletet egy köteg modullal használják, a modul visszatérési állapota nem járul hozzá az alkalmazás által megszerzett visszatérési kódhoz.
- rossz: azt jelzi, hogy a visszatérési kódot a modul meghibásodásának jelzésének kell tekinteni. Ha ez a modul az első a veremben, amely meghibásodik, akkor a rendszer az állapotértékét fogja használni a teljes verem értékéhez.
- die: egyenértékű a hibával, de leállíthatja a modul veremét és a PAM azonnali visszatérését az alkalmazáshoz.
- ok: ez arra utasítja a PAM-ot, hogy a rendszergazda szerint ennek a visszatérési kódnak közvetlenül hozzá kell járulnia a modulok teljes kötegének visszatérési kódjához.
- kész: egyenértékű az ok-val, de leállíthatja a modulvermet és a PAM azonnali visszatérését az alkalmazáshoz.
- N (előjel nélküli egész szám): egyenértékű az ok szóval, de átugorhat a következő N modulon a veremben.
- Visszaállítás: ez a művelet törli az összes memóriát a modulverem állapotáról, és újraindul a következő halmozott modullal.
Mind a négy kulcsszó: kötelező; szükséges; elegendő; és opcionális, egyenértékű kifejezéssel rendelkeznek a [...]
szintaxis szempontjából, amely lehetővé teszi bonyolultabb szabályok írását, és ezek a következők:
- kötelező: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- követelmény: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
- elegendő: [success=done new_authtok_reqd=done default=ignore]
- nem kötelező: [success=ok new_authtok_reqd=ok default=ignore]
A következő egy példa egy modern CentOS 7 rendszerből. Tekintsük ezeket a szabályokat az /etc/pam.d/postlogin PAM-fájlból:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session [default=1] pam_lastlog.so nowtmp showfailed
session optional pam_lastlog.so silent noupdate showfailed
Íme egy másik példa konfigurációs példa a /etc/pam.d/smartcard-auth PAM-fájlból:
#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password required pam_pkcs11.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
További információkért tekintse meg a pam.d kézikönyvoldalt:
man pam.d
Végül a konfigurációs fájl szintaxisának és az összes PAM modulnak átfogó leírása megtalálható a Linux-PAM dokumentációjában.
Összegzés
A PAM egy hatékony, magas szintű API, amely lehetővé teszi a hitelesítésre támaszkodó programok számára a hiteles felhasználókat a Linux rendszerben lévő alkalmazásokhoz. Erőteljes, de nagyon nehéz megérteni és használni.
Ebben a cikkben elmagyaráztuk, hogyan konfigurálhatja a PAM speciális funkcióit az Ubuntu és a CentOS rendszerben. Ha bármilyen kérdése vagy megjegyzése van, használja az alábbi visszajelzési űrlapot.