Com configurar i utilitzar PAM a Linux


Linux-PAM (abreviatura de Pluggable Authentication Modules que va evolucionar a partir de l'arquitectura Unix-PAM) és un potent conjunt de biblioteques compartides que s'utilitza per autenticar dinàmicament un usuari a aplicacions (o serveis) en un sistema Linux.

Integra diversos mòduls d'autenticació de baix nivell en una API d'alt nivell que proporciona suport d'autenticació dinàmica per a les aplicacions. Això permet als desenvolupadors escriure aplicacions que requereixen autenticació, independentment del sistema d'autenticació subjacent.

Moltes distribucions modernes de Linux admeten Linux-PAM (en endavant, \PAM) de manera predeterminada. En aquest article, explicarem com configurar PAM avançat als sistemes Ubuntu i CentOS.

Abans de continuar, tingueu en compte que:

  • Com a administrador del sistema, el més important és dominar com els fitxers de configuració PAM defineixen la connexió entre les aplicacions (serveis) i els mòduls d'autenticació connectables (PAM) que realitzen les tasques d'autenticació reals. No cal que entengueu necessàriament el funcionament intern de PAM.
  • PAM té el potencial d'alterar seriosament la seguretat del vostre sistema Linux. Una configuració errònia pot desactivar l'accés al vostre sistema parcial o completament. Per exemple, l'eliminació accidental d'un fitxer de configuració a /etc/pam.d/* i/o /etc/pam.conf us pot bloquejar fora del vostre propi sistema!

Com comprovar un programa és compatible amb PAM

Per utilitzar PAM, una aplicació/programa ha de ser conscient de PAM; s'ha d'haver escrit i compilat específicament per utilitzar PAM. Per esbrinar si un programa és \PAM-aware o no, comproveu si s'ha compilat amb la biblioteca PAM mitjançant l'ordre ldd.

Per exemple sshd:

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

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

Com configurar PAM a Linux

El fitxer de configuració principal de PAM és /etc/pam.conf i el directori /etc/pam.d/ conté els fitxers de configuració de PAM per a cada aplicació/serveis compatible amb PAM. PAM ignorarà el fitxer si el directori existeix.

La sintaxi del fitxer de configuració principal és la següent. El fitxer està format per una llista de regles escrites en una sola línia (podeu ampliar les regles utilitzant el caràcter d'escapada \\) i els comentaris van precedits de \# marca i s'estén fins al següent final de línia.

El format de cada regla és una col·lecció de fitxes separades per espais (els tres primers no distingeixen entre majúscules i minúscules). Explicarem aquestes fitxes en seccions posteriors.

service type control-flag module module-arguments 

on:

  • servei: nom real de l'aplicació.
  • tipus: tipus de mòdul/context/interfície.
  • indicador de control: indica el comportament de la PAM-API en cas que el mòdul no tingui èxit en la seva tasca d'autenticació.
  • mòdul: el nom de fitxer absolut o el nom de camí relatiu del PAM.
  • module-arguments: llista de fitxes separades per espais per controlar el comportament del mòdul.

La sintaxi de cada fitxer a /etc/pam.d/ és similar a la del fitxer principal i està formada per línies de la forma següent:

type control-flag module module-arguments

Aquest és un exemple de definició de regla (sense arguments de mòdul) que es troba al fitxer /etc/pam.d/sshd, que no permet inicis de sessió no root quan existeix /etc/nologin:

account required pam_nologin.so

Entendre els grups de gestió i els indicadors de control de PAM

Les tasques d'autenticació PAM es separen en quatre grups de gestió independents. Aquests grups gestionen diferents aspectes de la sol·licitud d'un usuari típic d'un servei restringit.

Un mòdul està associat a un d'aquests tipus de grups de gestió:

  • compte: proporcionar serveis per a la verificació del compte: ha caducat la contrasenya de l'usuari?; Aquest usuari té permís per accedir al servei sol·licitat?.
  • autenticació: autenticeu un usuari i configureu les credencials d'usuari.
  • contrasenya: s'encarreguen d'actualitzar les contrasenyes dels usuaris i de treballar conjuntament amb els mòduls d'autenticació.
  • sessió: gestiona les accions realitzades al començament i al final d'una sessió.

Els fitxers d'objectes carregables de PAM (els mòduls) s'han d'ubicar al directori següent: /lib/security/ o /lib64/security depenent de l'arquitectura.

Els indicadors de control admesos són:

  • requisit: la fallada torna el control instantàniament a l'aplicació indicant la naturalesa de la fallada del primer mòdul.
  • necessari: tots aquests mòduls són necessaris per tenir èxit perquè libpam retorni l'èxit a l'aplicació.
  • suficient: donat que tots els mòduls anteriors han tingut èxit, l'èxit d'aquest mòdul comporta un retorn immediat i satisfactori a l'aplicació (s'ignora el fracàs d'aquest mòdul).
  • opcional: generalment no es registra l'èxit o el fracàs d'aquest mòdul.

A més de les paraules clau anteriors, hi ha altres dos senyals de control vàlids:

  • inclou i subpila: inclou totes les línies del tipus donat del fitxer de configuració especificat com a argument d'aquest control.

Com restringir l'accés root al servei SSH mitjançant PAM

Com a exemple, configurarem com utilitzar PAM per desactivar l'accés de l'usuari root a un sistema mitjançant SSH i programes d'inici de sessió. Aquí, volem desactivar l'accés de l'usuari root a un sistema, restringint l'accés als serveis d'inici de sessió i sshd.

Podem utilitzar el mòdul /lib/security/pam_listfile.so que ofereix una gran flexibilitat per limitar els privilegis de comptes específics. Obriu i editeu el fitxer per al servei de destinació al directori /etc/pam.d/ tal com es mostra.

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

Afegiu aquesta regla als dos fitxers.

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

Explicant les fitxes de la regla anterior:

  • auth: és el tipus de mòdul (o context).
  • obligatori: és un indicador de control que significa que si s'utilitza el mòdul, s'ha de superar o el resultat global fallarà, independentment de l'estat dels altres mòduls.
  • pam_listfile.so: és un mòdul que proporciona una manera de denegar o permetre serveis basats en un fitxer arbitrari.
  • onerr=succeed: argument del mòdul.
  • item=usuari: argument del mòdul que especifica què s'indica al fitxer i s'ha de comprovar.
  • sense=deny: argument del mòdul que especifica l'acció a realitzar si es troba al fitxer, si l'element NO es troba al fitxer, es demana l'acció contrària.
  • file=/etc/ssh/deniedusers: argument del mòdul que especifica el fitxer que conté un element per línia.

A continuació, hem de crear el fitxer /etc/ssh/deniedusers i afegir-hi el nom root:

$ sudo vim /etc/ssh/deniedusers

Deseu els canvis i tanqueu el fitxer i, a continuació, establiu-hi els permisos necessaris:

$ sudo chmod 600 /etc/ssh/deniedusers

A partir d'ara, la regla anterior indicarà a PAM que consulti el fitxer /etc/ssh/deniedusers i que negui l'accés als serveis SSH i d'inici de sessió a qualsevol usuari de la llista.

Com configurar PAM avançat a Linux

Per escriure regles PAM més complexes, podeu utilitzar indicadors de control vàlids de la forma següent:

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

On valorN correspon al codi de retorn de la funció invocada al mòdul per al qual es defineix la línia. Podeu trobar els valors admesos a la Guia de l'administrador de PAM en línia. Un valor especial és per defecte, la qual cosa implica que tots els valors N no s'esmenten explícitament.

L'accióN pot adoptar una de les formes següents:

  • ignora: si aquesta acció s'utilitza amb una pila de mòduls, l'estat de retorn del mòdul no contribuirà al codi de retorn que obtingui l'aplicació.
  • mal: indica que el codi de retorn s'ha de considerar com un indicatiu de la fallada del mòdul. Si aquest mòdul és el primer de la pila que falla, el seu valor d'estat s'utilitzarà per al de tota la pila.
  • die: equival a bad, però pot acabar amb la pila de mòduls i PAM tornant immediatament a l'aplicació.
  • ok: això indica a PAM que l'administrador del sistema creu que aquest codi de retorn hauria de contribuir directament al codi de retorn de la pila completa de mòduls.
  • fet: equival a ok, però pot acabar la pila de mòduls i el PAM tornant immediatament a l'aplicació.
  • N (un nombre enter sense signe): equivalent a ok, però pot saltar per sobre dels N mòduls següents de la pila.
  • Restablir: aquesta acció esborra tota la memòria de l'estat de la pila de mòduls i reinicia amb el següent mòdul apilat.

Cadascuna de les quatre paraules clau: obligatori; requisit; suficient; i opcional, tenen una expressió equivalent en termes de la sintaxi [...], que permet escriure regles més complicades i són:

  • obligatori: [success=ok new_authtok_reqd=ok ignore=ignore default=mal]
  • requisit: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
  • suficient: [success=done new_authtok_reqd=done default=ignore]
  • opcional: [success=ok new_authtok_reqd=ok default=ignore]

El següent és un exemple d'un sistema modern CentOS 7. Considerem aquestes regles del fitxer 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

Aquí hi ha un altre exemple de configuració del fitxer 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

Per obtenir més informació, consulteu la pàgina de manual de pam.d:

$ man pam.d 

Finalment, es pot trobar una descripció completa de la sintaxi del fitxer de configuració i tots els mòduls PAM a la documentació de Linux-PAM.

PAM és una potent API d'alt nivell que permet programes que es basen en l'autenticació a usuaris autèntics a aplicacions en un sistema Linux. És potent però molt difícil d'entendre i utilitzar.

En aquest article, hem explicat com configurar les funcions avançades de PAM a Ubuntu i CentOS. Si teniu cap pregunta o comentari per compartir, utilitzeu el formulari de comentaris que trobareu a continuació.