PAM Pluggable Authentication Modules

El sistema de módulos encastrados para autenticación (Pluggable Authentication Modules (PAM)) es el método por el cual los sistemas Linux implementan mecanismos de autenticación y permiten que las aplicaciones no tengan necesidad de armar mecanismos propios, sino que invocan a PAM para tal fin.

La autenticación en PAM se basa en bibliotecas dinámicas llamadas módulos PAM que se vinculan o encastran unos con otros, formando una “pila” que completa el proceso de validación que requiere la aplicación.

Esta pila se arma tomando en cuenta cuatro procesos se combinan para armar la autenticación y que pueden variar según la aplicación, el entorno, las necesidades de seguridad, los dispositivos disponibles, el tipo de usuario, etc, y son:

Métodos de autenticación y base usuario/clave como ser password, PIN, scanner biométricos, sensores, lectores de tarjeta; y conexiones con bases SQL, LDAP, Active Directory, Kerberos, etc.

Manejo de password  los sistemas de cifrado, los métodos de validación o resolución de password y todo lo vinculado a la administración de la password, como ser su vigencia, advertencia, control de diccionario, histórico de cambios, etc.

Gestión de cuenta que verifica si la cuenta está activa, si el usuario tiene permisos para la validación, si está dentro de los parámetros de horario de acceso, si ha pago la mensualidad, y cualquier otra comprobación de cuenta que sea necesaria.

Definición y configuración de la sesión que tendrá el usuario de acuerdo a lo que define su cuenta o entorno que van desde configuración de variables de ambiente, hasta notificación a sistemas de billing o accounting.

No debemos olvidar que mediante PAM se gestiona la validación del común login, pero también puede ser utilizado para acceso a una puerta de una caja fuerte o controlar el pasaje en una barrera de peaje carretero.

PAM

Configuración de PAM

PAM se configura en el directorio /etc/pam.d y allí se encuentra un archivo por cada aplicación. En versiones antiguas se utilizaba el archivo /etc/pam.conf que aún es manejado por PAM por compatibilidad, pero que ya no aparece en sistemas modernos.

Archivos de configuración de PAM

En /etc/pam.d se encuentran archivos que corresponden con el nombre de la aplicación, por ejemplo sshd y cada línea de este archivo es un módulo de PAM que se configura así:

 tipo_de_módulo   control_entre_módulos   archivo_módulo   argumentos_módulo

Dependiendo de cómo esté configurado PAM, también existen algunos archivos que son comunes a otros y que se vinculan mediante directivas include:

 @include common-auth

Tipo de módulos PAM

PAM utiliza cuatro tipos o grupos de módulos:

  • auth
  • password
  • account
  • session

y coinciden con las funciones principales de PAM que se describen previamente.

El tipo de módulo PAM es el rol que el módulo (biblioteca dinámica) tendrá en el proceso de validación (pila) y un mismo módulo puede, perfectamente, cumplir más de un rol.

Los módulos son colocados unos detrás de otros armando la “pila” de validación, por lo cual el orden en que un módulo precede a otro es muy importante y permite que se puedan armar las combinaciones necesarias para el éxito o fracaso de la validación.

Es posible editar un archivo de pila y agregar nuevos módulos en cualquier momento, por ejemplo si se quiere validar mediante Google Authenticator

Control entre módulos PAM

Cada módulo cuando es revisado genera un resultado de éxito o fracaso.  Los controles permiten que PAM pueda saber qué hacer con el resultado.  Cómo los módulos serán evaluados en orden, el control habilita a asignarle importancia a un módulo respecto al siguiente.

Las opciones de control son, en principio, cuatro:

  • módulos required deben retornar éxito para que se permita autenticar. Si el módulo required falla, el usuario no será notificado hasta que los otros módulos del mismo tipo sean revisados,
  • módulos requisite deben retornar éxito para que ser permita autenticar. Si el modulo requisite falla, el usuario es notificado inmediatamente del fallo de autenticación con un mensaje,
  • módulos sufficient serán ignorados si fallan. Pero si un suficiente devuelve éxito y no se tiene pendiente ningún módulo required con falla, ningun otro módulo de este tipo es verificado y se considerará éxito en la autenticación global,
  • módulos optional no son cruciales para el éxito o fracaso de la autenticación global. Juegan un rol cuando ningún otro módulo ha tenido éxito o fracaso; en ese caso los módulos optional determinan el resultado de la autenticación.

Se puede resumir que los módulos required no son críticos, mientras que los sufficient y requisite tienen efecto inmediato.

Existe además un sistema de control extendido que permite una configuración más fina del la interacción entre los módulos. Cuando se utilizan estos controles extendidos las variables de control están encerradas entre paréntesis rectos, por ejemplo:

 session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close

Archivos de módulos PAM

Los archivos de módulos PAM son, como se dijo, bibliotecas dinámicas (.so) que se encuentran en el directorio /lib/security (RedHat) o en /lib/x86_64-linux-gnu/security (Debian), aunque también se pueden incluir con el path completo en forma explícita.

Argumentos de módulos

PAM utiliza argumentos para pasar información a los módulos durante su ejecución, lo que permite otorgar mayor flexibilidad al sistema PAM.

Por ejemplo, es posible hacer que el módulo de validación de clave estándar de Linux requiera claves de un mínimo de 8 caracteres, evite cambiar la clave por cosas obvias (cambio mayúsculas minúsculas, rotación simple de caracteres, palíndromos) y utiliza algoritmo sha512 para el cifrado de la misma.

 password [success=2 default=ignore] pam_unix.so obscure sha512 min=8

Documentos sobre PAM

Parte de este artículo está basada en los siguientes documentos:

También recomiendo las páginas de manual de cada módulo, como ser man pam_unix que tiene toda la información del módulo, incluyendo sus argumentos.

Leave a Reply

  

  

  

Anti-Spam by WP-SpamShield