El PAM (Pluggable Authentication Modules) es una herramienta fundamental en sistemas Linux y UNIX para gestionar la autenticación y el control de acceso a los servicios. Actúa como un "portero digital" que garantiza que solo los usuarios autorizados puedan acceder a ciertos servicios, estableciendo además controles para evitar que el sistema se vea sobrecargado. En este artículo, exploraremos la estructura y funcionamiento de PAM, sus archivos de configuración, y los conceptos claves como los reinos de gestión y los controles de módulo.
PAM es un sistema modular que permite verificar la identidad de los usuarios que intentan acceder a un servicio específico. Mediante una serie de módulos y configuraciones, PAM no solo valida la identidad de los usuarios, sino que también define bajo qué condiciones y en qué momentos pueden acceder al sistema.
Cada módulo de PAM realiza una tarea específica y puede agregarse o modificarse sin necesidad de cambiar la aplicación que solicita la autenticación, lo que proporciona gran flexibilidad en la administración de la seguridad.
La configuración de PAM varía según el sistema operativo:
/etc/pam.conf
.
/etc/pam.d
. Por ejemplo, la configuración para el servicio de login se encuentra en /etc/pam.d/login
.
Cada archivo de configuración en /etc/pam.d
especifica los módulos que PAM debe utilizar para el servicio correspondiente y el orden en el que deben aplicarse.
Un archivo de configuración típico para el servicio de login puede verse de la siguiente manera:
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_unix_auth.so try_first_pass
account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix_acct.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_ldap.so
password required /lib/security/pam_pwdb.so use_first_pass
session required /lib/security/pam_unix_session.so
En este ejemplo:
pam_securetty
y pam_nologin
son requeridos para autenticar el acceso a través de terminales específicos y restringir el acceso cuando el sistema está en mantenimiento.
pam_ldap
permite autenticación a través de LDAP, mientras que pam_unix_auth
usa el sistema de autenticación local.
pam_cracklib
impone requisitos de complejidad para las contraseñas, mientras que pam_unix_session
gestiona la sesión.
PAM organiza sus módulos en diferentes reinos de gestión, cada uno de los cuales controla un aspecto específico del proceso de autenticación y gestión de sesiones. Estos reinos son:
1. Auth (Autenticación): Valida la identidad del usuario, generalmente solicitando una contraseña o algún otro medio de identificación.
2. Account (Cuenta): Verifica condiciones específicas de la cuenta, como la membresía de grupo o restricciones de horario.
3. Password (Contraseña): Gestiona las actualizaciones de la contraseña, incluyendo la validación de su complejidad para prevenir ataques de diccionario.
4. Session (Sesión): Controla acciones que deben ejecutarse al inicio y al final de una sesión de servicio, como montar directorios o establecer límites de recursos.
Estos reinos permiten dividir la administración de la seguridad en secciones bien definidas, facilitando la configuración y el ajuste de políticas de autenticación y acceso.
Los módulos en PAM no solo tienen funciones específicas, sino que también se pueden configurar con controles que determinan su respuesta en caso de éxito o fallo. Estos controles influyen en el flujo del proceso de autenticación y son esenciales para definir cómo reaccionará el sistema en distintas situaciones. Los principales controles de módulo son:
required
falla, el proceso de autenticación también fallará al final, pero todos los módulos en la lista seguirán ejecutándose. Este control es útil para recopilar toda la información posible antes de tomar una decisión final.
sufficient
tiene éxito, el sistema pasa por alto los módulos restantes del mismo tipo, salvo que otro módulo posterior falle. Esto permite agilizar el proceso si se cumple un criterio de autenticación en particular.
optional
no afectan el resultado del proceso de autenticación a menos que sean los únicos en su categoría.
En una configuración con varios módulos auth
, el proceso sigue un orden estricto:
1. pam_securetty: Este módulo verifica si la terminal desde la que se intenta acceder está autorizada. Si falla, los accesos de root son bloqueados, aunque los demás módulos se siguen procesando porque está marcado como required
.
2. pam_env: Configura variables de entorno que pueden mejorar la experiencia del usuario.
3. pam_ldap y pam_unix: Ambos trabajan para autenticar al usuario, y pam_unix
intenta usar una contraseña previamente ingresada (try_first_pass), lo que optimiza el proceso.
PAM permite establecer una política de seguridad flexible y adaptable para los servicios de un sistema Linux o UNIX. Al combinar diferentes módulos y controles, los administradores pueden definir políticas personalizadas para distintos usuarios y servicios. Además, PAM facilita la integración de métodos de autenticación avanzados, como LDAP o MFA, mejorando la seguridad sin afectar la usabilidad.
Por ejemplo, una configuración avanzada de PAM puede requerir autenticación multifactorial para accesos remotos, verificar condiciones específicas de la cuenta antes de permitir el acceso o exigir contraseñas complejas para evitar ataques de fuerza bruta.
El uso de PAM en Linux y UNIX es fundamental para implementar un sistema de seguridad robusto y adaptable. Gracias a su diseño modular, PAM permite personalizar la autenticación y el control de acceso en función de las necesidades específicas de cada sistema y servicio. Con una comprensión clara de sus archivos de configuración, reinos de gestión y controles de módulo, es posible configurar políticas de seguridad que protejan de manera eficaz los sistemas frente a accesos no autorizados y potenciales vulnerabilidades.
Jorge García
Fullstack developer