Kako konfigurirati i koristiti PAM u Linuxu


Linux-PAM (skraćenica za Pluggable Authentication Modules koji se razvio iz Unix-PAM arhitekture) moćan je paket dijeljenih biblioteka koji se koristi za dinamičku autentifikaciju korisnika aplikacijama (ili uslugama) ) u Linux sustavu.

Integrira višestruke module provjere autentičnosti niske razine u API visoke razine koji pruža podršku dinamičke provjere autentičnosti za aplikacije. To programerima omogućuje pisanje aplikacija koje zahtijevaju autentifikaciju, neovisno o temeljnom sustavu autentifikacije.

Mnoge moderne distribucije Linuxa podržavaju Linux-PAM (u daljnjem tekstu “PAM”) prema zadanim postavkama. U ovom ćemo članku objasniti kako konfigurirati napredni PAM u sustavima Ubuntu i CentOS.

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

  • Kao administratoru sustava, najvažnije je ovladati načinom na koji konfiguracijske datoteke PAM-a definiraju vezu između aplikacija (usluga) i priključnih autentifikacijskih modula (PAM-ova) koji obavljaju stvarne zadatke provjere autentičnosti. Ne morate nužno razumjeti interni rad PAM-a.
  • PAM ima potencijal ozbiljno promijeniti sigurnost vašeg Linux sustava. Pogrešna konfiguracija može djelomično ili potpuno onemogućiti pristup vašem sustavu. Na primjer, slučajno brisanje konfiguracijske datoteke(a) pod /etc/pam.d/* i/ili /etc/pam.conf može vas zaključati iz vlastiti sustav!

Kako provjeriti je li program svjestan PAM-a

Za korištenje PAM-a, aplikacija/program mora biti “svjestan PAM-a“; mora biti napisan i kompajliran posebno za korištenje PAM-a. Da biste saznali je li program “PAM-svjestan” ili ne, provjerite je li kompiliran s PAM bibliotekom pomoću ldd naredbe.

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

Glavna konfiguracijska datoteka za PAM je /etc/pam.conf, a direktorij /etc/pam.d/ sadrži PAM konfiguracijske datoteke za svaku PAM-svjesnu aplikaciju/uslugu. PAM će zanemariti datoteku ako direktorij postoji.

Sintaksa glavne konfiguracijske datoteke je sljedeća. Datoteka se sastoji od popisa pravila napisanih u jednom retku (možete proširiti pravila pomoću znaka za izlaz “\ ”), a komentarima prethodi “# ” oznake i produžite do sljedećeg kraja retka.

Format svakog pravila je skup tokena odvojenih razmakom (prva tri ne razlikuju 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/sučelje.
  • control-flag: označava ponašanje PAM-API-ja ako modul ne uspije u svom zadatku provjere autentičnosti.
  • modul: apsolutni naziv datoteke ili relativni naziv putanje PAM-a.
  • argumenti-modula: razmakom odvojen popis tokena za kontrolu ponašanja modula.

Sintaksa svake datoteke u /etc/pam.d/ slična je sintaksi glavne datoteke i sastoji se od redaka sljedećeg oblika:

type control-flag module module-arguments

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

account required pam_nologin.so

Razumijevanje PAM grupa za upravljanje i kontrolnih zastavica

PAM zadaci provjere autentičnosti podijeljeni su u četiri neovisne grupe za upravljanje. Ove grupe upravljaju različitim aspektima tipičnog korisničkog zahtjeva za ograničenu uslugu.

Modul je pridružen jednoj od ovih vrsta grupa za upravljanje:

  • račun: pružiti usluge za provjeru računa: je li korisnička lozinka istekla?; je li ovom korisniku dopušten pristup traženoj usluzi?.
  • Autentifikacija: autentificirajte korisnika i postavite korisničke vjerodajnice.
  • lozinka: odgovorni su za ažuriranje korisničkih zaporki i rade zajedno s modulima za provjeru autentičnosti.
  • sesija: upravlja radnjama koje se izvode na početku i na kraju sesije.

PAM objektne datoteke (moduli) koje se mogu učitavati moraju se nalaziti u sljedećem direktoriju: /lib/security/ ili /lib64/security ovisno o arhitektura.

Podržane kontrolne zastavice su:

  • potrebno: kvar trenutno vraća kontrolu aplikaciji ukazujući na prirodu kvara prvog modula.
  • obavezno: svi ovi moduli su potrebni za uspjeh kako 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).
  • izborno: uspjeh ili neuspjeh ovog modula općenito se ne bilježi.

Uz gore navedene ključne riječi, postoje još dvije važeće kontrolne zastavice:

  • uključi i podskup: uključi sve retke zadane vrste iz konfiguracijske datoteke navedene kao argument ove kontrole.

Kako ograničiti root pristup SSH usluzi putem PAM-a

Kao primjer, konfigurirat ćemo kako koristiti PAM za onemogućavanje root korisničkog pristupa sustavu putem SSH-a i programa za prijavu. Ovdje želimo onemogućiti root korisnički pristup sustavu ograničavanjem pristupa uslugama prijave i sshd.

Možemo koristiti modul /lib/security/pam_listfile.so koji nudi veliku fleksibilnost u ograničavanju privilegija određenih računa. 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 obje datoteke.

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 oznaka 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 dopuštanje usluga na temelju proizvoljne datoteke.
  • onerr=succeed: argument modula.
  • item=user: argument modula koji navodi što je navedeno u datoteci i što treba provjeriti.
  • sense=deny: argument modula koji navodi akciju koju treba poduzeti ako se pronađe u datoteci, ako stavka NIJE pronađena u datoteci, tada se traži suprotna radnja.
  • file=/etc/ssh/deniedusers: argument modula koji specificira datoteku koja sadrži jednu stavku po retku.

Zatim moramo kreirati datoteku /etc/ssh/deniedusers i dodati joj naziv root:

sudo vim /etc/ssh/deniedusers

Spremite promjene i zatvorite datoteku, a zatim postavite potrebna dopuštenja za nju:

sudo chmod 600 /etc/ssh/deniedusers

Od sada će gore navedeno pravilo reći PAM-u da pregleda datoteku /etc/ssh/deniedusers i zabrani pristup SSH-u i uslugama prijave za sve navedene korisnike.

Kako konfigurirati napredni PAM u Linuxu

Za pisanje složenijih PAM pravila, možete koristiti važeće kontrolne zastavice 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 linija definirana. Podržane vrijednosti možete pronaći u on-line PAM administratorskom vodiču. Posebna vrijednost je zadana, što podrazumijeva sve vrijednostiN koje nisu eksplicitno navedene.

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

  • ignoriraj: ako se ova radnja koristi sa hrpom modula, status povrata modula neće pridonijeti povratnom kodu koji aplikacija dobiva.
  • loše: označava da povratni kod treba smatrati pokazateljem kvara modula. Ako je ovaj modul prvi u nizu koji je pokvario, njegova vrijednost statusa koristit će se za vrijednost cijelog niza.
  • die: ekvivalent lošem, ali može prekinuti hrpu modula i PAM se odmah vraća u aplikaciju.
  • ok: ovo upućuje PAM da administrator sustava misli da bi ovaj povratni kod trebao izravno doprinijeti povratnom kodu cijelog niza modula.
  • gotovo: ekvivalentno u redu, ali može prekinuti hrpu modula i PAM se odmah vraća u aplikaciju.
  • N (cijeli broj bez predznaka): ekvivalentno ok, ali može preskočiti sljedećih N modula u nizu.
  • Poništi: ova radnja briše svu memoriju stanja hrpe modula i ponovno pokreće sa sljedećim naslaganim modulom.

Svaka od četiri ključne riječi: obavezno; potreban; dovoljan; i izborno, imaju ekvivalentni izraz u terminima [...] sintakse, koji vam omogućuju pisanje kompliciranijih pravila, a to su:

  • obavezno: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • zahtjev: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • dovoljno: [success=done new_authtok_reqd=done default=ignore]
  • izborno: [success=ok new_authtok_reqd=ok default=ignore]

Slijedi primjer iz modernog sustava CentOS 7. 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 man stranicu pam.d:

man pam.d 

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

Sažetak

PAM je moćan API visoke razine koji programima koji se oslanjaju na autentifikaciju autentičnih korisnika omogućuje aplikacijama u sustavu Linux. Moćan je, ali vrlo zahtjevan za razumijevanje i korištenje.

U ovom smo članku objasnili kako konfigurirati napredne značajke PAM-a u Ubuntuu i CentOS-u. Ako imate pitanja ili komentara koje želite podijeliti, upotrijebite obrazac za povratne informacije u nastavku.