Kako konfigurirati i koristiti PAM u Linuxu


Linux-PAM (skraćenica od Pluggable Authentication Modules koji je evoluirao iz Unix-PAM arhitekture) je moćan paket dijeljenih biblioteka koje se koriste za dinamičku autentifikaciju korisnika za aplikacije (ili usluge ) u Linux sistemu.

Integrira više modula za autentifikaciju niske razine u API visokog nivoa koji pruža podršku za dinamičku autentifikaciju za aplikacije. Ovo omogućava programerima da pišu aplikacije koje zahtijevaju autentifikaciju, neovisno o osnovnom sistemu provjere autentičnosti.

Mnoge moderne Linux distribucije podrazumevano podržavaju Linux-PAM (u daljem tekstu “PAM ”). U ovom članku ćemo objasniti kako konfigurirati napredni PAM u Ubuntu i CentOS sistemima.

Prije nego što nastavimo dalje, imajte na umu sljedeće:

  • Kao sistem administratoru, najvažnije je da savladate kako PAM konfiguracioni fajl(e) definišu vezu između aplikacija (usluga) i modula za proveru autentičnosti koji se mogu priključiti (PAM) koji obavljaju stvarne zadatke autentifikacije. Ne morate nužno razumjeti interni rad PAM-a.
  • PAM ima potencijal da ozbiljno promijeni sigurnost vašeg Linux sistema. Pogrešna konfiguracija može onemogućiti pristup vašem sistemu djelomično ili potpuno. Na primjer, slučajno brisanje konfiguracijskih datoteka pod /etc/pam.d/* i/ili /etc/pam.conf može vas zaključati sopstveni sistem!

Kako provjeriti je li program svjestan PAM-a

Za korištenje PAM-a, aplikacija/program mora biti “PAM svjesna“; mora biti napisan i kompajliran posebno za korištenje PAM-a. Da biste saznali da li je program “PAM-svjestan ” ili ne, provjerite da li je kompajliran sa PAM bibliotekom koristeći ldd komandu.

Na primjer sshd:

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Kako konfigurirati PAM u Linuxu

Glavni konfiguracijski fajl za PAM je /etc/pam.conf, a /etc/pam.d/ direktorij sadrži PAM konfiguracijske datoteke za svaka PAM aplikacija/usluga. PAM će zanemariti datoteku ako direktorij postoji.

Sintaksa za glavnu konfiguracionu datoteku je sljedeća. Datoteka se sastoji od liste pravila napisanih u jednom redu (pravila možete proširiti koristeći “\ ” escape karakter) a komentarima prethodi “# ” oznake i produžiti do sljedećeg kraja reda.

Format svakog pravila je kolekcija tokena odvojena razmakom (prva tri su neosjetljiva na velika i mala slova). Objasnit ćemo ove tokene u sljedećim odjeljcima.

service type control-flag module module-arguments 

gdje:

  • usluga: stvarni naziv aplikacije.
  • tip: tip modula/kontekst/interfejs.
  • control-flag: označava ponašanje PAM-API-a u slučaju da modul ne uspije u svom zadatku provjere autentičnosti.
  • modul: apsolutno ime datoteke ili relativna putanja PAM-a.
  • argumenti modula: razmakom odvojena lista tokena za kontrolu ponašanja modula.

Sintaksa svake datoteke u /etc/pam.d/ je slična onoj glavnog fajla i sastoji se od redova sljedećeg oblika:

type control-flag module module-arguments

Ovo je primjer definicije pravila (bez argumenata modula) pronađene u datoteci /etc/pam.d/sshd, koja onemogućuje ne-root prijave kada je /etc/nologin postoji:

account required pam_nologin.so

Razumijevanje PAM upravljačkih grupa i kontrolnih zastavica

Zadaci provjere autentičnosti PAM podijeljeni su u četiri nezavisne grupe upravljanja. Ove grupe upravljaju različitim aspektima zahtjeva tipičnog korisnika za ograničenom uslugom.

Modul je pridružen jednom od ovih tipova upravljačke grupe:

  • račun: pružanje usluga za provjeru računa: je li korisnička lozinka istekla?; da li je ovom korisniku dozvoljen pristup traženoj usluzi?.
  • autentifikacija: autentifikujte korisnika i postavite korisničke vjerodajnice.
  • lozinka: odgovorni su za ažuriranje korisničkih lozinki i rade zajedno s modulima za autentifikaciju.
  • session: upravljajte radnjama koje se izvode na početku sesije i na kraju sesije.

PAM objektne datoteke (moduli) koje se mogu učitati trebaju se nalaziti u sljedećem direktoriju: /lib/security/ ili /lib64/security u zavisnosti od arhitektura.

Podržane kontrolne zastavice su:

  • potreban: kvar trenutno vraća kontrolu aplikaciji ukazujući na prirodu prvog kvara modula.
  • obavezno: svi ovi moduli su potrebni da bi uspjeli da bi libpam vratio uspjeh aplikaciji.
  • dovoljno: s obzirom na to da su svi prethodni moduli uspjeli, uspjeh ovog modula dovodi do trenutnog i uspješnog povratka u aplikaciju (neuspjeh ovog modula se zanemaruje).
  • opciono: uspjeh ili neuspjeh ovog modula se općenito ne bilježi.

Pored gore navedenih ključnih riječi, postoje još dvije važeće kontrolne zastavice:

  • uključi i podstack: uključi sve linije datog tipa iz konfiguracijske datoteke navedene kao argument za ovu kontrolu.

Kako ograničiti root pristup SSH servisu preko PAM-a

Kao primjer, konfigurirat ćemo kako koristiti PAM za onemogućavanje pristupa root korisnika sistemu preko SSH i programa za prijavu. Ovdje želimo onemogućiti pristup root korisnika sistemu, ograničavajući pristup login i sshd uslugama.

Možemo koristiti /lib/security/pam_listfile.so modul koji nudi veliku fleksibilnost u ograničavanju privilegija određenih naloga. Otvorite i uredite datoteku za ciljnu uslugu u direktoriju /etc/pam.d/ kao što je prikazano.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

Dodajte ovo pravilo u oba fajla.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Objašnjavanje tokena u gornjem pravilu:

  • auth: je tip modula (ili kontekst).
  • obavezno: je kontrolna zastavica koja znači da ako se modul koristi, mora proći ili će ukupni rezultat biti neuspješan, bez obzira na status drugih modula.
  • pam_listfile.so: je modul koji pruža način za odbijanje ili dozvoljavanje usluga na osnovu proizvoljnog fajla.
  • onerr=uspjeh: argument modula.
  • item=user: argument modula koji specificira šta je navedeno u datoteci i što treba provjeriti.
  • sense=deny: argument modula koji specificira radnju koju treba poduzeti ako se pronađe u datoteci, ako stavka NIJE pronađena u datoteci, tada se traži suprotna akcija.
  • file=/etc/ssh/deniedusers: argument modula koji specificira datoteku koja sadrži jednu stavku po redu.

Zatim moramo kreirati datoteku /etc/ssh/deniedusers i dodati ime root u nju:

sudo vim /etc/ssh/deniedusers

Sačuvajte promjene i zatvorite datoteku, a zatim postavite potrebne dozvole za nju:

sudo chmod 600 /etc/ssh/deniedusers

Od sada, gore navedeno pravilo će reći PAM-u da konsultuje datoteku /etc/ssh/deniedusers i odbije pristup SSH-u i uslugama prijavljivanja za svakog navedenog korisnika.

Kako konfigurirati napredni PAM u Linuxu

Za pisanje složenijih PAM pravila, možete koristiti važeće control-flags u sljedećem obliku:

type [value1=action1 value2=action2 …] module module-arguments

Gdje valueN odgovara povratnom kodu iz funkcije pozvane u modulu za koji je definirana linija. Podržane vrijednosti možete pronaći u on-line PAM Administratorskom vodiču. Posebna vrijednost je zadana, što podrazumijeva da sve vrijednostiN nisu eksplicitno spomenute.

radnjaN može imati jedan od sljedećih oblika:

  • ignoriraj: ako se ova radnja koristi sa hrpom modula, status povratka modula neće doprinijeti povratnom kodu koji aplikacija dobije.
  • loše: označava da se povratni kod treba smatrati pokazateljem neispravnosti modula. Ako je ovaj modul prvi u steku koji nije uspio, njegova statusna vrijednost će se koristiti za onu cijelog steka.
  • die: ekvivalentno lošem, ali može prekinuti stek modula i PAM odmah vraćajući se aplikaciji.
  • ok: ovo upućuje PAM-u da administrator sistema misli da bi ovaj povratni kod trebao direktno doprinijeti povratnom kodu punog hrpa modula.
  • gotovo: ekvivalentno ok, ali može prekinuti stek modula i PAM se odmah vratiti u aplikaciju.
  • N (neoznačeni cijeli broj): ekvivalentno ok, ali može preskočiti sljedećih N modula u stogu.
  • Reset: ova radnja briše svu memoriju o stanju steka modula i ponovo pokreće sa sljedećim naslaganim modulom.

Svaka od četiri ključne riječi: obavezno; requisite; dovoljan; i opciono, imaju ekvivalentan izraz u smislu [...] sintakse, koja vam omogućava da pišete komplikovanija pravila, a ona su:

  • obavezno: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • uvjet: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • dovoljno: [success=done new_authtok_reqd=done default=ignore]
  • opcionalno: [success=ok new_authtok_reqd=ok default=ignore]

Slijedi primjer iz modernog CentOS 7 sistema. Razmotrimo ova pravila iz /etc/pam.d/postlogin PAM datoteke:

#%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

Evo još jednog primjera konfiguracije iz /etc/pam.d/smartcard-auth PAM datoteke:

#%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

Za više informacija pogledajte pam.d man stranicu:

man pam.d 

Na kraju, sveobuhvatan opis sintakse konfiguracijske datoteke i svih PAM modula može se naći u dokumentaciji za Linux-PAM.

Sažetak

PAM je moćan API visokog nivoa koji omogućava programima koji se oslanjaju na autentifikaciju autentičnih korisnika do aplikacija u Linux sistemu. Snažan je, ali vrlo izazovan za razumijevanje i korištenje.

U ovom članku smo objasnili kako konfigurirati napredne funkcije PAM-a u Ubuntu i CentOS-u. Ako imate bilo kakvih pitanja ili komentara koje želite podijeliti, koristite obrazac za povratne informacije u nastavku.