Jak nakonfigurovat a používat PAM v Linuxu
Linux-PAM (zkratka pro Pluggable Authentication Modules, který se vyvinul z architektury Unix-PAM) je výkonná sada sdílených knihoven používaných k dynamické autentizaci uživatele k aplikacím (nebo službám). ) v systému Linux.
Integruje více modulů nízkoúrovňové autentizace do vysokoúrovňového API, které poskytuje dynamickou podporu autentizace pro aplikace. To umožňuje vývojářům psát aplikace, které vyžadují autentizaci, nezávisle na základním ověřovacím systému.
Mnoho moderních distribucí Linuxu ve výchozím nastavení podporuje Linux-PAM (dále jen „PAM “). V tomto článku vysvětlíme, jak nakonfigurovat pokročilé PAM v systémech Ubuntu a CentOS.
Než budeme pokračovat, uvědomte si, že:
- Jako správce systému je nejdůležitější zvládnout, jak konfigurační soubory PAM definují spojení mezi aplikacemi (službami) a zásuvnými ověřovacími moduly (PAM), které provádějí skutečné úkoly ověřování. Nemusíte nutně rozumět vnitřnímu fungování PAM.
- PAM má potenciál vážně změnit zabezpečení vašeho systému Linux. Chybná konfigurace může částečně nebo úplně znemožnit přístup k vašemu systému. Například náhodné smazání konfiguračního souboru (souborů) pod /etc/pam.d/* a/nebo /etc/pam.conf vás může zablokovat vlastní systém!
Jak zkontrolovat, zda program podporuje PAM
Chcete-li použít PAM, aplikace/program musí být „PAM vědomý“; musí být napsán a zkompilován speciálně pro použití PAM. Chcete-li zjistit, zda program „podporuje PAM“ nebo ne, zkontrolujte, zda byl zkompilován pomocí knihovny PAM pomocí příkazu ldd.
Například sshd:
sudo ldd /usr/sbin/sshd | grep libpam.so
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)
Jak nakonfigurovat PAM v Linuxu
Hlavní konfigurační soubor pro PAM je /etc/pam.conf a adresář /etc/pam.d/ obsahuje konfigurační soubory PAM pro každá aplikace/služba podporující PAM. Pokud adresář existuje, PAM bude soubor ignorovat.
Syntaxe hlavního konfiguračního souboru je následující. Soubor se skládá ze seznamu pravidel napsaných na jednom řádku (pravidla můžete rozšířit pomocí znaku escape “\ ”
) a komentáře jsou označeny “# ”
značky a prodlužte na další konec řádku.
Formát každého pravidla je mezerou oddělená kolekce tokenů (první tři nerozlišují malá a velká písmena). Tyto tokeny vysvětlíme v následujících částech.
service type control-flag module module-arguments
kde:
- služba: skutečný název aplikace.
- type: typ modulu/kontext/rozhraní.
- control-flag: označuje chování PAM-API v případě, že modul neuspěje ve své autentizační úloze.
- modul: absolutní název souboru nebo relativní cesta k PAM.
- module-arguments: mezerami oddělený seznam tokenů pro řízení chování modulu.
Syntaxe každého souboru v /etc/pam.d/ je podobná syntaxi hlavního souboru a skládá se z řádků následujícího tvaru:
type control-flag module module-arguments
Toto je příklad definice pravidla (bez argumentů modulu) nalezené v souboru /etc/pam.d/sshd, která zakazuje přihlášení uživatele bez oprávnění root, když /etc/nologin existuje:
account required pam_nologin.so
Porozumění skupinám správy PAM a příznakům kontroly
Úlohy ověřování PAM jsou rozděleny do čtyř nezávislých skupin správy. Tyto skupiny spravují různé aspekty požadavku typického uživatele na omezenou službu.
Modul je přidružen k jednomu z těchto typů skupin správy:
- účet: poskytování služeb pro ověření účtu: vypršela platnost hesla uživatele?; má tento uživatel povolený přístup k požadované službě?.
- ověření: ověření uživatele a nastavení přihlašovacích údajů uživatele.
- heslo: zodpovídají za aktualizaci uživatelských hesel a spolupracují s ověřovacími moduly.
- relace: správa akcí prováděných na začátku a na konci relace.
PAM načítatelné soubory objektů (moduly) musí být umístěny v následujícím adresáři: /lib/security/ nebo /lib64/security v závislosti na architektura.
Podporované ovládací příznaky jsou:
- Požadavek: Selhání okamžitě vrátí řízení do aplikace, což indikuje povahu selhání prvního modulu.
- povinné: všechny tyto moduly jsou nutné k úspěchu, aby libpam vrátil úspěšné aplikaci.
- dostatečné: vzhledem k tomu, že všechny předchozí moduly uspěly, vede úspěch tohoto modulu k okamžitému a úspěšnému návratu do aplikace (selhání tohoto modulu je ignorováno).
- volitelné: úspěch nebo neúspěch tohoto modulu se obecně nezaznamenává.
Kromě výše uvedených klíčových slov existují dva další platné kontrolní příznaky:
- include and substack: zahrnuje všechny řádky daného typu z konfiguračního souboru zadaného jako argument tohoto ovládacího prvku.
Jak omezit přístup root ke službě SSH prostřednictvím PAM
Jako příklad nakonfigurujeme, jak používat PAM k zakázání přístupu uživatele root do systému prostřednictvím SSH a přihlašovacích programů. Zde chceme zakázat přístup uživatele root k systému omezením přístupu ke službám přihlášení a sshd.
Můžeme použít modul /lib/security/pam_listfile.so, který nabízí velkou flexibilitu při omezování oprávnění konkrétních účtů. Otevřete a upravte soubor pro cílovou službu v adresáři /etc/pam.d/ podle obrázku.
sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login
Přidejte toto pravidlo do obou souborů.
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
Vysvětlení tokenů ve výše uvedeném pravidle:
- auth: je typ modulu (nebo kontext).
- povinné: je kontrolní příznak, který znamená, že pokud je modul použit, musí projít, jinak bude celkový výsledek neúspěšný, bez ohledu na stav ostatních modulů.
- pam_listfile.so: je modul, který poskytuje způsob, jak zakázat nebo povolit služby založené na libovolném souboru.
- onerr=succeed: argument modulu.
- item=user: argument modulu, který určuje, co je v souboru uvedeno a co by se mělo kontrolovat.
- sense=deny: argument modulu, který určuje akci, která se má provést, pokud je nalezena v souboru, pokud položka NENÍ v souboru nalezena, je požadována opačná akce.
- file=/etc/ssh/deniedusers: argument modulu, který určuje soubor obsahující jednu položku na řádek.
Dále musíme vytvořit soubor /etc/ssh/deniedusers a přidat do něj název root:
sudo vim /etc/ssh/deniedusers
Uložte změny a zavřete soubor, poté pro něj nastavte požadovaná oprávnění:
sudo chmod 600 /etc/ssh/deniedusers
Od nynějška bude výše uvedené pravidlo říkat PAM, aby nahlédl do souboru /etc/ssh/deniedusers a odepřel přístup ke službám SSH a přihlášení všem uvedeným uživatelům.
Jak nakonfigurovat pokročilý PAM v Linuxu
Chcete-li napsat složitější pravidla PAM, můžete použít platné control-flags v následujícím tvaru:
type [value1=action1 value2=action2 …] module module-arguments
Kde hodnotaN odpovídá návratovému kódu z funkce vyvolané v modulu, pro který je řádek definován. Podporované hodnoty naleznete v online příručce správce PAM. Speciální hodnota je výchozí, což znamená, že všechny hodnoty N nejsou explicitně uvedeny.
AkceN může mít jednu z následujících podob:
- ignorovat: pokud je tato akce použita se zásobníkem modulů, návratový stav modulu nepřispěje k návratovému kódu, který aplikace získá.
- špatný: znamená, že návratový kód by měl být považován za indikátor selhání modulu. Pokud je tento modul prvním v zásobníku, který selže, jeho hodnota stavu bude použita pro hodnotu celého zásobníku.
- zemře: ekvivalentní špatnému, ale může ukončit zásobník modulů a PAM se okamžitě vrátí do aplikace.
- ok: toto instruuje PAM, že si správce systému myslí, že tento návratový kód by měl přispět přímo k návratovému kódu celé sady modulů.
- hotovo: ekvivalentní ok, ale může ukončit zásobník modulů a PAM se okamžitě vrátí do aplikace.
- N (celé číslo bez znaménka): ekvivalentní ok, ale může přeskočit dalších N modulů v zásobníku.
- Resetovat: tato akce vymaže veškerou paměť o stavu sady modulů a restartuje se s dalším naskládaným modulem.
Každé ze čtyř klíčových slov: povinné; požadovaný; dostatečný; a nepovinné, mají ekvivalentní výraz ve smyslu syntaxe [...]
, což vám umožňuje psát složitější pravidla a jsou to:
- povinné: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- požadavek: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
- dostatečné: [success=done new_authtok_reqd=hotovo default=ignore]
- volitelné: [success=ok new_authtok_reqd=ok default=ignore]
Následuje příklad z moderního systému CentOS 7. Podívejme se na tato pravidla ze souboru PAM /etc/pam.d/postlogin:
#%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
Zde je další příklad konfigurace ze souboru PAM /etc/pam.d/smartcard-auth:
#%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
Další informace naleznete na manuálové stránce pam.d:
man pam.d
A konečně, úplný popis syntaxe konfiguračního souboru a všech modulů PAM lze nalézt v dokumentaci pro Linux-PAM.
souhrn
PAM je výkonné rozhraní API na vysoké úrovni, které umožňuje programům, které se spoléhají na ověřování, k autentickým uživatelům aplikací v systému Linux. Je to mocné, ale velmi náročné na pochopení a použití.
V tomto článku jsme vysvětlili, jak nakonfigurovat pokročilé funkce PAM v Ubuntu a CentOS. Pokud máte nějaké dotazy nebo komentáře, které chcete sdílet, použijte níže uvedený formulář pro zpětnou vazbu.