Tabla de Contenidos
210.2 PAM authentication
Pertenece a Topic 210: Network Client Management
- Weight: 3
- Description: The candidate should be able to configure PAM to support authentication using various available methods. This includes basic SSSD functionality.
- Key Knowledge Areas:
- PAM configuration files, terms and utilities
- passwd and shadow passwords
- Use sssd for LDAP authentication
- Terms and Utilities:
/etc/pam.d/pam.confnsswitch.confpam_unix,pam_cracklib,pam_limits,pam_listfile,pam_ssssssd.conf
NSS
Para la consulta de datos de identificación, muchos programas hacen uso de /etc/passwd, /etc/shadow, pero también de otras bases de datos centralizadas como LDAP.
NSS (Name Service Switch) es una primera respuesta a la multiplicidad de bases de datos locales o centralizadas.
El fichero /etc/nsswitch.conf determina para distintos tipos de resoluciones la fuente de información que se debe consultar. Las aplicaciones que necesiten esta información consultarán las fuentes en el orden impuesto por el archivo nsswitch.conf. De este modo, la resolución se apoya en librerías NSS (libnss_X.so donde X representa el servicio de resolución empleado) y las aplicaciones no necesitan conocer directamente el método de resolución empleado.
Estructura del archivo nsswitch.conf:
resolucion: fuente_1 fuente_n
| Parámetro | Descripción |
|---|---|
resolución | El tipo de resolución que se realizará. |
fuente_1 | Obligatorio. La primera fuente de resolución que se usará. |
fuente_n | Opcional. La fuente o las otras fuentes de resolución posibles que se utilizarán después de la primera. |
Ejemplo:
passwd: compat group: compat shadow: compat hosts: files dns
En ese ejemplo se puede ver que las resoluciones de tipo password, group y shadow se
realizarán mediante la librería libnss_compat.so y que la resolución de nombres de host se realizará mediante las librerías libnss_files.so y libnss_dns.so. Esto significa que los
elementos de identificación de los usuarios se encontrarán en los archivos locales de /etc
y que la resolución de nombres de host se realizará en primer lugar mediante el archivo local (/etc/hosts) antes de utilizar el servicio dns.
En la parte de DNS lo utilizábamos para definir quién tiene prioridad a la hora de resolver peticiones DNS, si los ficheros locales (/etc/hosts) o los servidores DNS definidos en /etc/resolv.conf. El orden que se indica en el ejemplo de /etc/nsswitch.conf quiere decir que primero se utilizará el fichero y luego los servidores DNS.
En un sistema Linux moderno, NSS ya solo se usa para operaciones de identificación, es decir, encontrar información de una entidad. Todo lo relativo a la autentificación se realiza en un mecanismo más elaborado: PAM.
PAM
PAM (Pluggable Authentication Module) es un mecanismo complementario de NSS que proporciona una autenticación a medida, mediante la ejecución de módulos a la elección del administrador.
Se posiciona como un intermediario entre las aplicaciones y los métodos de autentificación.
Funcionamiento
Cuando una aplicación solicita a PAM si un usuario se puede conectar, PAM, en función de su configuración, invocará los módulos que utilizarán un método de autenticación.
Si el resultado es positivo (el usuario ha proporcionado los elementos correctos de autenticación), PAM devuelve la autorización de conexión a la aplicación.
Mediante la autenticación PAM, el número de módulos que pueden cargarse no tiene límites y éstos se pueden acumular. Podemos pedir que haya distintos procesos de autenticación para añadir capas de complejidad a la autenticación.
Por lo tanto, se puede solicitar una doble autenticación siguiendo dos métodos de autentificación distintos.
En resumen: cuando se solicita a un usuario que se autentique, los módulos PAM se cargan en función de un archivo de configuración y estos módulos provocan ciertas acciones, que pueden ser la propia autenticación u otras acciones.
Ficheros de configuración
Las primeras versiones de PAM tenían su configuración en el archivo /etc/pam.conf
Casi la totalidad de las implementaciones actuales utilizan un directorio /etc/pam.d que contiene tantos archivos como aplicaciones que usan PAM.
Si existe el directorio /etc/pam.d, el archivo /etc/pam.conf no se consultará.
Cada aplicación que utilice PAM necesita un archivo (en general del mismo nombre que la aplicación) que alberga su configuración PAM.
Afortunadamente, las distribuciones Linux modernas facilitan la tarea concentrando en los archivos common-auth para Debian o system-auth para Red Hat la configuración de todas las aplicaciones que comparten los mismos modos de autentificación. Por tanto, nos bastará con modificar estos archivos para cambiar el modo de autentificación de todas las aplicaciones del sistema
Formato de un archivo de /etc/pam.d
El archivo contendrá tantas líneas como módulos se deseen llamar. Todas las líneas seguirán la siguiente estructura:
<tipo_accion> <control> <módulo> <argumentos>
| Parámetro | Descripción |
|---|---|
tipo_accion | Representa el tipo de acción que necesita recurrir a PAM. Los cuatro valores posibles son auth, account, password y session. |
control | Indica cómo deberá reaccionar el módulo ante el éxito o el error de su ejecución. Los valores comunes son required, requisite, sufficient y optional. |
módulo | El nombre del módulo invocado (que estará encargado de la autenticación). El formato estándar es pam_<servicio>.so, donde servicio representa el nombre actual del módulo. |
argumentos | Parámetros opcionales enviados al módulo para modificar su funcionamiento. |
Tipos de acción de PAM
Cada línea de un archivo de configuración PAM debe comenzar por una de estas cuatro palabras clave que determinan en qué tipo de acción debe actuar el módulo:
auth: la acción de autentificación propiamente dicha. Comprueba la contraseña del usuario contra la base de datos de contraseñas.account: acceso a la información de cuentas, como la expiración de la password, etc.session: acciones que se deben realizar antes o después de la apertura de la sesión. Utilizasyslogpara registrar el usuario y el tipo de sesión abierta.password: gestión de contraseñas, como el cambio de contraseña.
Tipos de control de los módulos
Los módulos se invocan con un “control_flag” (indicador de control) que determina el comportamiento en caso de error o éxito del módulo.
requisite: el módulo debe devolver de forma obligatoria un valor de éxito. Si un módulo de autenticación esrequisite, su error impide la apertura de sesión. Además, el resto de módulos de la pila no se ejecutarán.required: el módulo debe devolver de forma obligatoria un valor de éxito. Si un módulo de autenticación esrequired, su error impide la apertura de sesión. Sin embargo, el resto de módulos de la pila se ejecutarán.sufficient: si el módulo se ejecuta con éxito y ningún módulorequiredorequisiteha dado error anteriormente, se iniciará la sesión.optional: el módulo puede ejecutarse con éxito o error sin influenciar al resto de la pila.
Los módulos PAM
Son invocados cuando se producen operaciones de autenticación, hay múltiples y están enfocados a distintos usos.
Estos módulos están en archivos cuya ubicación estándar es /lib/security (en Debian 10 hay un enlace desde /usr/lib/x86_64-linux-gnu/security).
| Módulo | Descripción |
|---|---|
pam_securetty.so | Prohibe el login para la cuenta root excepto en los terminales listados en /etc/securetty. |
pam_nologin.so | Si el archivo /etc/nologin existe, muestra su contenido ante cualquier intento de apertura de sesión y prohibe el login ante cualquier usuario que no sea root. |
pam_env.so | Declara las variables de entorno que se leen en /etc/environment o en el archivo al que se hace referencia con el parámetro envfile=. |
pam_unix.so | Permite la autenticación mediante el método tradicional de los archivos /etc/passwd y /etc/shadow |
pam_deny.so | Vía muerta. Generalmente se ejecuta si ningún otro módulo se ha ejecutado con éxito |
pam_permit.so | Devuelve un resultado positivo incondicionalmente |
pam_limits.so | Asigna ciertas limitaciones funcionales a usuarios o grupos en función de los datos del archivo /etc/security/limits.conf |
pam_cracklib.so | Se asegura que la contraseña empleada presenta un nivel de seguridad suficiente |
pam_selinux.so | Si selinux está activo en el sistema, este módulo va a asegurar que el shell se ejecuta en el contexto de seguridad adecuado. |
pam_lastlog.so | Muestra la información de la última apertura de sesión con éxito |
Si queremos que nuestro sistema se autentique contra un servidor LDAP, debemos usar el módulo pam_ldap.so
Para que funciones debemos añadir las siguientes líneas al /etc/pam.d/login (el que gestiona el inicio de sesión en el sistema):
auth sufficient pam_ldap.so auth required pam_unix.so try_first_pass account sufficient pam_ldap.so account required pam_unix.so
Primero intentará iniciar sesión en LDAP, si no es posible, se hará la autenticación local.
Autenticación por LDAP
El archivo /etc/nsswitch se debe configurar para hacer referencia a LDAP como fuente de información prioritaria. Sin embargo, debe seguir funcionando con los archivos locales para cuando el directorio no esté disponible.
Las bibliotecas PAM necesarias para la autenticación LDAP están disponibles en Debian a través de los paquetes ldap-auth-client y ldap-auth-config
passwd : ldap files group: ldap files shadow: ldap files
En cuanto a la configuración de archivos PAM, los tipos de acción PAM account y auth deben modificarse para permitir la autentificación LDAP. Si se consulta su contenido inicial, se ve que configuran el módulo pam_unix.so, en general con el control required o sufficient. La primera regla es no tocar estas líneas de la configuración. En efecto, incluso si se desea utilizar un directorio LDAP para las operaciones de autentificación, ante todo se debe conservar el mecanismo tradicional, aunque solo sea para permitir la autentificación local en caso de fallo del directorio. Por tanto, la configuración se realizará añadiendo para las acciones account y auth una línea indicando como sufficient la autenticación por el módulo LDAP (pam_ldap.so):
auth sufficient pam_unix.so nullok auth sufficient pam_ldap.so use_first_pass account sufficient pam_unix.so account sufficient pam_ldap.so
Ejemplos
En este ejemplo se trata la autenticación (auth), la ejecución del módulo es obligatoria (required) y el módulo usa el archivo de contraseñas clásico (pam_unix.so). Por último, se autoriza el uso de una contraseña vacía, tal y como indica el argumento (nullok).
auth required pam_unix.so nullok
Otro ejemplo:
auth required pam_securetty.so auth required pam_unix.so account required pam_unix.so session required pam_env.so readenv=1 envfile=/etc/default/locale password required pam_cracklib.so retry=3 minlen=6
Hay dos módulos invocados para la autentificación: pam_securetty aprovecha la autenticación para verificar que la cuenta no es la del superusuario y pam_unix es quien realmente realiza la autentificación a partir del archivo /etc/passwd.
El mismo módulo pam_unix también se declara con el tipo account, si las aplicaciones que son compatibles con PAM necesitan información sobre las cuentas de los usuarios.
El módulo pam_env se invoca con el tipo session, lo que asegura su ejecución (y por tanto la declaración de variables) en la sesión del usuario.
El módulo pam_cracklib se invoca con el tipo password. Si una aplicación de gestión de contraseñas compatible con PAM desea modificar una contraseña debe pasar el control de complejidad realizado por el módulo cracklib.
