Autenticación con PAM (Pluggable Authenticate Modules)

De Wiki do Ciclo ASIR do IES de Rodeira

Índice

INTRODUCCIÓN

PAM (Pluggable Authentication Modules) é un sistema de autenticación mediante módulos que permite controlar a forma en que as aplicacións realizan a autenticación que precisan dun xeito dinámico. Mediante estos módulos PAM é posible controlar e facer que as aplicacións realicen a autenticación coma nós precisemos sen necesidade de modificala; pra poder facer esto a aplicación en cuestión debe estar preparada pra utilizar estes módulos PAM. Hoxe en día moitas distribucións Linux, como RedHat veñen coas principais aplicacións que precisan autenticación preparadas pra usar PAM (login, ssh, ftp, mail ...etc). O control de acceso realízase mediante un ficheiro de texto que reside en /etc/pam.d (RedHat) e cun nome que normalmente coincide coa aplicación á que xestiona (ainda que por exemplo no caso do wu-ftpd o ficheiro de configuración pam chámase ftp).

TIPOS DE AUTENTICACIÓN

Os módulos PAM realizan 4 tipos de autenticación:

  • auth : Sirve pra autenticar ó usuario, por exemplo solicitando unha password. Tamén poden otorgar certas credenciais como ser membro dun grupo ou un ticket Kerberos.
  • account: Pra asegurarse que o acceso está permitido. Por exemplo un módulo account podería comprobar si a conta do usuario expirou ou si ten permitido o acceso a determiñadas horas ou días.
  • password: Pra poñer ou cambiar passwords.
  • session: Controla a sesión do usuario unha vez autenticado. Este tipo de módulo pode ademáis realizar tarefas adicionais pra permitir o acceso, como montar os /home dos usuarios.

Un módulo PAM pode ser útil pra unha ou varias destas funcións, por exemplo o módulo pam_unix.so sirve para as catro.

FICHEIROS DE CONTROL DE ACCESO

Pra crear os ficheiros de control de acceso utilízanse varias liñas apiladas, sendo moi importante a súa orde. Por exemplo, un ficheiro de control de acceso mediante PAM pra o servicio rlogin podería ser :

  auth    required    /lib/security/pam_nologin.so
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_rhosts_auth.so
auth required /lib/security/pam_stack.so service=system_auth

O significado das liñas é o seguinte:

  1. Verifica que non existe o ficheiro /etc/nologin, si existe falla
  2. Verifica que non está intentando unha conexión como root a través da rede, si é así falla
  3. Carga as variables de entorno
  4. Autentica mediante rhosts
  5. Si falla a autenticación con rhosts fai unha autenticación estándar

E posible programar dun xeito bastante sinxelo novos módulos pra ser utilizados nestes ficheiros de control de acceso.

MODIFICADORES DE CONTROL DE ACCESO

Os módulos cando se executan xeneran como saída "CORRECTO" ou "INCORRECTO". Os indicadores de control lle dicen que facer co resultado, dándolle a posibilidade de fixar a importancia dun módulo respecto ós seguintes. Os modificadores poden ser:

  • required : Ten que devolver "CORRECTO" pra que se permita a autenticación. Se devolve "INCORRECTO" non se lle notifica o fallo ó usuario ata ue se proben tódo-los módulos do mesmo tipo (auth, account, password, session).
  • requisite : Ten que devolver "CORRECTO" pra que se permita a autenticación. Se falla notifícase o fallo ó usuario de inmediato.
  • sufficient : Se devolve "INCORRECTO" se ignora. Se devolve "CORRECTO" e non fallou ningunha liña required de enrriba, o usuario é autenticado con éxito.
  • optional : Se devolve "INCORRECTO" se ignora. Se devolve "CORRECTO" so se usa si non se utilizou outro modelo deste tipo (auth, account, password, session).

ARGUMENTOS DOS MÓDULOS

Algúns módulos PAM aceptan argumentos na forma :

    variable=valor

Estes argumentos son específicos de cada módulo PAM. Os argumentos que non son válidos se ignoran, almacenándose logs sobre os erros en /var/log/messages.

EXEMPLOS

A continuación veremos varios exemplos de archivos de configuración pra autenticación PAM:

login

  #%PAM-1.0
  auth       required	/lib/security/pam_securetty.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session optional /lib/security/pam_console.so

sshd

  #%PAM-1.0
  auth       required     /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_limits.so
session optional /lib/security/pam_console.so

samba

  #%PAM-1.0
  auth       required	pam_nologin.so
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth

ftp

  #%PAM-1.0
  auth       required	/lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_shells.so
account required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth