Cum să configurați și să utilizați PAM în Linux


Linux-PAM (prescurtare de la Pluggable Authentication Modules care a evoluat din arhitectura Unix-PAM) este o suită puternică de biblioteci partajate folosită pentru a autentifica dinamic un utilizator la aplicații (sau servicii). ) într-un sistem Linux.

Acesta integrează mai multe module de autentificare de nivel scăzut într-un API de nivel înalt care oferă suport pentru autentificare dinamică pentru aplicații. Acest lucru permite dezvoltatorilor să scrie aplicații care necesită autentificare, independent de sistemul de autentificare de bază.

Multe distribuții Linux moderne acceptă Linux-PAM (denumit în continuare „PAM ”) în mod implicit. În acest articol, vom explica cum să configurați PAM avansat în sistemele Ubuntu și CentOS.

Înainte de a continua, rețineți că:

  • Ca administrator de sistem, cel mai important lucru este să stăpânești modul în care fișierele de configurare PAM definesc conexiunea dintre aplicații (servicii) și modulele de autentificare conectabile (PAM) care realizează sarcinile de autentificare efective. Nu trebuie neapărat să înțelegeți funcționarea internă a PAM.
  • PAM are potențialul de a modifica serios securitatea sistemului dumneavoastră Linux. Configurarea eronată poate dezactiva accesul la sistem parțial sau complet. De exemplu, ștergerea accidentală a unui (fișier) de configurare sub /etc/pam.d/* și/sau /etc/pam.conf vă poate bloca accesul propriul sistem!

Cum să verificați un program este conștient de PAM

Pentru a utiliza PAM, o aplicație/program trebuie să fie „PAM aware”; trebuie să fi fost scris și compilat special pentru a utiliza PAM. Pentru a afla dacă un program este „PAM-aware ” sau nu, verificați dacă a fost compilat cu biblioteca PAM utilizând comanda ldd.

De exemplu sshd:

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

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

Cum se configurează PAM în Linux

Fișierul principal de configurare pentru PAM este /etc/pam.conf, iar directorul /etc/pam.d/ conține fișierele de configurare PAM pentru fiecare aplicație/servicii compatibile cu PAM. PAM va ignora fișierul dacă directorul există.

Sintaxa pentru fișierul de configurare principal este următoarea. Fișierul este alcătuit dintr-o listă de reguli scrise pe o singură linie (puteți extinde regulile folosind caracterul de escape „\ ”), iar comentariile sunt precedate de „# ” marchează și se extinde până la următorul capăt de linie.

Formatul fiecărei reguli este o colecție de jetoane separate prin spațiu (primele trei nu fac distincție între majuscule și minuscule). Vom explica aceste jetoane în secțiunile ulterioare.

service type control-flag module module-arguments 

Unde :

  • serviciu: numele actual al aplicației.
  • tip: tipul/contextul/interfața modulului.
  • control-flag: indică comportamentul PAM-API în cazul în care modulul nu reușește în sarcina de autentificare.
  • modul: numele absolut de fișier sau calea relativă a PAM.
  • argumente-module: listă de simboluri separate prin spațiu pentru controlul comportamentului modulului.

Sintaxa fiecărui fișier din /etc/pam.d/ este similară cu cea a fișierului principal și este alcătuită din linii de următoarea formă:

type control-flag module module-arguments

Acesta este un exemplu de definiție a regulii (fără argumente de modul) găsită în fișierul /etc/pam.d/sshd, care nu permite autentificarea non-root când /etc/nologin puternic> există:

account required pam_nologin.so

Înțelegerea grupurilor de management PAM și a indicatorilor de control

Sarcinile de autentificare PAM sunt separate în patru grupuri de management independente. Aceste grupuri gestionează diferite aspecte ale solicitării unui utilizator tipic pentru un serviciu restricționat.

Un modul este asociat unuia dintre aceste tipuri de grup de management:

  • cont: furnizați servicii pentru verificarea contului: a expirat parola utilizatorului?; Acest utilizator are permisiunea de a accesa serviciul solicitat?.
  • autentificare: autentificați un utilizator și configurați acreditările utilizatorului.
  • parolă: sunt responsabili pentru actualizarea parolelor utilizatorilor și lucrează împreună cu modulele de autentificare.
  • sesiune: gestionați acțiunile efectuate la începutul și sfârșitul unei sesiuni.

Fișierele obiect încărcabile PAM (modulele) trebuie să fie localizate în următorul director: /lib/security/ sau /lib64/security, în funcție de arhitectura.

indicatoarele de control acceptate sunt:

  • condiție: eșecul readuce instantaneu controlul aplicației, indicând natura primei defecțiuni a modulului.
  • obligatoriu: toate aceste module sunt necesare pentru a avea succes pentru ca libpam să returneze succesul aplicației.
  • suficient: dat fiind că toate modulele precedente au reușit, succesul acestui modul duce la o revenire imediată și cu succes la aplicație (eșecul acestui modul este ignorat).
  • opțional: succesul sau eșecul acestui modul nu este în general înregistrat.

În plus față de cele de mai sus sunt cuvintele cheie, există alte două steaguri de control valide:

  • include și substiva: include toate liniile de tip dat din fișierul de configurare specificat ca argument pentru acest control.

Cum să restricționați accesul root la serviciul SSH prin PAM

De exemplu, vom configura modul de utilizare a PAM pentru a dezactiva accesul utilizatorului root la un sistem prin SSH și programe de conectare. Aici, dorim să dezactivăm accesul utilizatorului root la un sistem, prin restricționarea accesului la serviciile de conectare și sshd.

Putem folosi modulul /lib/security/pam_listfile.so care oferă o mare flexibilitate în limitarea privilegiilor anumitor conturi. Deschideți și editați fișierul pentru serviciul țintă în directorul /etc/pam.d/, așa cum se arată.

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

Adăugați această regulă în ambele fișiere.

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

Explicarea jetoanelor din regula de mai sus:

  • auth: este tipul de modul (sau contextul).
  • necesar: este un indicator de control care înseamnă că dacă modulul este utilizat, trebuie să treacă sau rezultatul general va fi eșuat, indiferent de starea altor module.
  • pam_listfile.so: este un modul care oferă o modalitate de a refuza sau permite servicii bazate pe un fișier arbitrar.
  • onerr=succeed: argument modul.
  • item=user: argument modul care specifică ce este listat în fișier și ar trebui verificat.
  • sense=deny: argument modul care specifică acțiunea de luat dacă se găsește în fișier, dacă elementul NU este găsit în fișier, atunci este solicitată acțiunea opusă.
  • file=/etc/ssh/deniedusers: argument modul care specifică fișierul care conține un articol pe linie.

Apoi, trebuie să creăm fișierul /etc/ssh/deniedusers și să adăugăm numele rădăcină în el:

sudo vim /etc/ssh/deniedusers

Salvați modificările și închideți fișierul, apoi setați permisiunile necesare pentru el:

sudo chmod 600 /etc/ssh/deniedusers

De acum înainte, regula de mai sus îi va spune PAM să consulte fișierul /etc/ssh/deniedusers și să refuze accesul la serviciile SSH și de conectare oricărui utilizator listat.

Cum se configurează PAM avansat în Linux

Pentru a scrie reguli PAM mai complexe, puteți utiliza marcatoare de control valide în următoarea formă:

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

Unde valueN corespunde codului de retur de la funcția invocată în modulul pentru care este definită linia. Puteți găsi valorile acceptate din Ghidul administratorului PAM on-line. O valoare specială este implicită, ceea ce implică că toate valorile N nu sunt menționate în mod explicit.

acțiuneaN poate lua una dintre următoarele forme:

  • ignora: dacă această acțiune este utilizată cu un teanc de module, starea de returnare a modulului nu va contribui la codul de returnare pe care îl obține aplicația.
  • prost: indică faptul că codul de returnare ar trebui considerat ca un indicator al eșecului modulului. Dacă acest modul este primul din stivă care eșuează, valoarea lui de stare va fi utilizată pentru cea a întregului stivă.
  • die: echivalent cu bad, dar poate termina stiva de module și PAM revenind imediat la aplicație.
  • ok: aceasta indică PAM că administratorul de sistem consideră că acest cod de returnare ar trebui să contribuie direct la codul de returnare al întregului teanc de module.
  • terminat: echivalent cu ok, dar poate termina stiva de module și PAM revenind imediat la aplicație.
  • N (un număr întreg nesemnat): echivalent cu ok, dar poate sări peste următoarele N module din stivă.
  • Resetați: această acțiune șterge toată memoria din starea stivei de module și repornește cu următorul modul stivuit.

Fiecare dintre cele patru cuvinte cheie: obligatoriu; necesar; suficient; și opțional, au o expresie echivalentă în ceea ce privește sintaxa [...], care vă permit să scrieți reguli mai complicate și sunt:

  • obligatoriu: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
  • condiție: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • suficient: [success=done new_authtok_reqd=done default=ignore]
  • opțional: [success=ok new_authtok_reqd=ok default=ignore]

Următorul este un exemplu dintr-un sistem modern CentOS 7. Să luăm în considerare aceste reguli din fișierul /etc/pam.d/postlogin PAM:

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

Iată un alt exemplu de configurație din fișierul 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

Pentru mai multe informații, consultați pagina de manual pam.d:

man pam.d 

În cele din urmă, o descriere cuprinzătoare a sintaxei fișierului de configurare și a tuturor modulelor PAM poate fi găsită în documentația pentru Linux-PAM.

rezumat

PAM este un API puternic de nivel înalt care permite utilizatorilor autentici programele care se bazează pe autentificare la aplicații dintr-un sistem Linux. Este puternic, dar foarte dificil de înțeles și utilizat.

În acest articol, am explicat cum să configurați funcțiile avansate ale PAM în Ubuntu și CentOS. Dacă aveți întrebări sau comentarii de transmis, utilizați formularul de feedback de mai jos.