Herramientas de usuario

Herramientas del sitio


informatica:certificaciones:lpic:lpic-2:210_network_client_management:210.2_pam_authentication

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.conf
    • nsswitch.conf
    • pam_unix, pam_cracklib, pam_limits, pam_listfile, pam_sss
    • sssd.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. Utiliza syslog para 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 es requisite, 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 es required, 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ódulo required o requisite ha 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.

informatica/certificaciones/lpic/lpic-2/210_network_client_management/210.2_pam_authentication.txt · Última modificación: por tempwin