Vyhledávání na webu

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.