Ir al contenidoIr a la navegación de la página: página anterior [tecla de acceso p]/página siguiente [tecla de acceso n]
documentation.suse.com / Autenticación con PAM

Autenticación con PAM

Fecha de publicación: 12 Dic 2024
DESCRIPCIÓN

El artículo describe el concepto de PAM, la estructura de la configuración de PAM y el uso de herramientas para configurar PAM.

INTENCIÓN

Desea saber cómo configurar un módulo PAM y configurar el sistema para utilizar llaves U2F.

ESFUERZO

Se tardan aproximadamente 20 minutos en leer el artículo.

REQUISITOS
  • Para configurar la autenticación mediante llaves U2F, debe tener YubiKeys o llaves de seguridad.

1 Introducción a PAM

Los administradores de sistemas y los programadores suelen restringir el acceso a ciertas partes del sistema o limitar el uso de ciertas funciones de una aplicación. Sin PAM, sería necesario adaptar las aplicaciones cada vez que se introdujera un nuevo mecanismo de autenticación, como LDAP, Samba o Kerberos. Sin embargo, ese proceso llevaría mucho tiempo y es propenso a errores. Una manera de evitar estos inconvenientes es separar las aplicaciones del mecanismo de autenticación y delegarlas en módulos gestionados centralmente. Cuando sea necesario utilizar un nuevo esquema de autenticación, bastará con adaptar o escribir un módulo PAM adecuado para que el programa en cuestión pueda utilizarlo.

El concepto de PAM está formado por:

  • Módulos PAM, que son un conjunto de bibliotecas compartidas para un mecanismo de autenticación específico.

  • Una pila de módulos con uno o más módulos PAM.

  • Un servicio compatible con PAM que necesita autenticación mediante una pila de módulos o módulos PAM. Normalmente, un servicio es un nombre familiar de la aplicación correspondiente, como login o su. El nombre del servicio other es una palabra reservada para las reglas por defecto.

  • Argumentos de módulo, con los que se puede influir en la ejecución de un único módulo PAM.

  • Un mecanismo que evalúe cada resultado de la ejecución de un único módulo PAM. Un valor positivo ejecuta el siguiente módulo PAM. La forma en que se trata un valor negativo depende de la configuración: desde sin influencia, continuar hasta terminar inmediatamente, con cualquier otra opción intermedia válida.

2 Estructura de la configuración de PAM

PAM en SLE Micro incluye una configuración basada en directorios. El conjunto de archivos de configuración se almacena en /etc/pam.d. Cada servicio (o programa) que se basa en el mecanismo PAM tiene su propio archivo de configuración en ese directorio. Por ejemplo, el servicio de sshd se puede encontrar en el archivo /etc/pam.d/sshd.

Nota
Nota: la configuración basada en archivos (/etc/pam.conf) no se utiliza en SLE Micro

La configuración de cada servicio también se puede almacenar en /etc/pam.conf. Sin embargo, por motivos de mantenimiento y facilidad de uso, este esquema de configuración no se utiliza en SLE Micro.

Estos archivos presentes en /etc/pam.d/ definen los módulos PAM empleados en el proceso de autenticación. Cada archivo consta de líneas, que definen un servicio, y cada línea consta de un máximo de cuatro componentes:

      TYPE
      CONTROL
      MODULE_PATH
      MODULE_ARGS

Los componentes tienen el siguiente significado:

TYPE

Declara el tipo de servicio. Los módulos PAM se procesan en stacks. Los distintos tipos de módulos tienen distintas finalidades. Por ejemplo, un módulo comprueba la contraseña, otro verifica la ubicación desde la que se accede al sistema y otro lee los ajustes específicos del usuario. PAM reconoce cuatro tipos de módulos diferentes:

auth

Comprueba la autenticidad del usuario, habitualmente se hace con una contraseña. Pero también se puede lograr con una tarjeta con chip o mediante datos biométricos (por ejemplo, huellas dactilares o exploración del iris).

account

Los módulos de este tipo comprueban si el usuario tiene permiso general para utilizar el servicio solicitado. Por ejemplo, deberá realizarse esta comprobación para garantizar que nadie inicie sesión con el nombre de usuario de una cuenta caducada.

password

El propósito de este tipo de módulo es permitir modificar un testigo de autenticación. Normalmente, se trata de una contraseña.

session

Los módulos de este tipo son responsables de gestionar y configurar sesiones de usuario. Se inician antes y después de la autenticación para registrar los intentos de inicio de sesión y configurar el entorno específico del usuario.

CONTROL

Indica el comportamiento de un módulo PAM. Cada módulo puede tener los siguientes indicadores de control:

required

Los módulos con este indicador se deben procesar correctamente antes de proceder con la autenticación. Si falla un módulo con el indicador required, se procesarán el resto de módulos de este tipo antes de que el usuario reciba un aviso de que se ha producido un fallo durante el intento de autenticación.

requisite

Los módulos con este indicador tienen que ser procesados correctamente, igual que los módulos con el indicador required. No obstante, si se produce un fallo en un módulo con este indicador, el usuario recibirá una notificación inmediata y no se procesarán más módulos. En caso de que no haya errores, se seguirá procesando el resto de los módulos, al igual que en el caso de los módulos con el indicador required. El indicador requisite se puede utilizar como un filtro simple con el objeto de comprobar el cumplimiento de determinadas condiciones necesarias para una correcta autenticación.

sufficient

Si se procesa correctamente un modulo con este indicador, la aplicación que lo ha solicitado recibe inmediatamente una notificación de proceso correcto y no se procesa ningún otro módulo, siempre y cuando anteriormente no haya fallado la ejecución de ningún módulo con el indicador required. El fallo de un módulo con el indicador sufficient no tiene consecuencias directas y los módulos siguientes se seguirán procesando según el orden correspondiente.

optional

Que el proceso de un módulo con este indicador se lleve a cabo correctamente o haya errores no tiene consecuencias directas. Esta opción puede ser útil, por ejemplo, para módulos cuyo único cometido es mostrar un mensaje (por ejemplo informando al usuario acerca de la recepción de un mensaje de correo electrónico), sin realizar ninguna otra acción.

include

Si se da este indicador, el archivo especificado como argumento se inserta en este lugar.

MODULE_PATH

Contiene un nombre de archivo completo de un módulo PAM. No es necesario especificarlo explícitamente si el módulo se encuentra en el directorio por defecto /lib/security (para todas las plataformas de 64 bits compatibles con SLE Micro, el directorio es /lib64/security).

MODULE_ARGS

Contiene una lista de opciones separadas por espacios para influir en el comportamiento de un módulo PAM, como debug (habilita la depuración) o nullok (permite el uso de contraseñas vacías).

Además, hay archivos de configuración globales para los módulos PAM en /etc/security, que definen el comportamiento exacto de estos módulos (por ejemplo pam_env.conf y time.conf). Todas las aplicaciones que utilizan un módulo PAM llaman a un conjunto de funciones PAM, las cuales procesan la información de los archivos de configuración y devuelven el resultado a la aplicación que ha realizado la petición.

Para simplificar la creación y el mantenimiento de módulos PAM, se han introducido archivos de configuración por defecto comunes para los tipos auth, account y password y los módulos session. Se recuperan de la configuración de PAM de cada aplicación. Las actualizaciones de los módulos de configuración de PAM globales de common-* se propagan por todos los archivos de configuración de PAM sin necesidad de que el administrador actualice todos los archivos de configuración de PAM.

Los archivos de configuración de PAM globales se mantienen mediante la herramienta pam-config. Esta herramienta añade automáticamente nuevos módulos a la configuración, cambia la configuración de los existentes o suprime módulos (u opciones) de las configuraciones. La intervención manual en el mantenimiento de las configuraciones de PAM se reduce al mínimo o incuso es innecesaria.

2.1 Ejemplo de configuración de PAM

Para demostrar un ejemplo de caso de uso real de la configuración de PAM, en esta sección se ha utilizado la configuración de sshd:

Ejemplo 1: Configuración de PAM para sshd (/etc/pam.d/sshd)
#%PAM-1.0 1
auth     requisite      pam_nologin.so                              2
auth     include        common-auth                                 3
account  requisite      pam_nologin.so                              2
account  include        common-account                              3
password include        common-password                             3
session  required       pam_loginuid.so                             4
session  include        common-session                              3
session  optional       pam_lastlog.so   silent noupdate showfailed 5

1

Declara la versión de este archivo de configuración para PAM 1.0. Esto es simplemente una convención, pero podría utilizarse en el futuro para comprobar la versión.

2

Comprueba, si existe /etc/nologin. Si es así, ningún otro usuario que no sea root puede iniciar sesión.

3

Se refiere a los archivos de configuración de cuatro tipos de módulos: common-auth, common-account, common-password y common-session. Estos cuatro archivos contienen la configuración predeterminada para cada tipo de módulo.

4

Define el atributo del proceso UID de entrada para el proceso que se ha autenticado.

5

Muestra información sobre el último inicio de sesión de un usuario.

Al incluir los archivos de configuración en lugar de añadir cada módulo por separado a la configuración de PAM respectiva, se obtiene automáticamente una configuración de PAM actualizada cuando un administrador cambia los valores por defecto.

El primer archivo include (common-auth) llama a los módulos de tipo auth: pam_env.so, pam_gnome_keyring.so y pam_unix.so. Consulte el Ejemplo 2, “Configuración por defecto de la sección auth (common-auth)”. Tenga en cuenta que los módulos pueden variar según la instalación.

Ejemplo 2: Configuración por defecto de la sección auth (common-auth)
auth  required  pam_env.so                   1
auth  optional  pam_gnome_keyring.so         2
auth  required  pam_unix.so  try_first_pass 3

1

pam_env.so carga /etc/security/pam_env.conf para definir las variables de entorno como se especifica en este archivo. Se puede utilizar para definir la variable DISPLAY con el valor adecuado, ya que el módulo pam_env conoce la ubicación desde la cual se está iniciando sesión.

2

pam_gnome_keyring.so comprueba los datos de inicio de sesión y la contraseña del usuario con el anillo de llaves de GNOME.

3

pam_unix comprueba el nombre de usuario y la contraseña de inicio de sesión con /etc/passwd y /etc/shadow.

La pila completa de módulos auth se procesa antes de que sshd reciba información sobre si el inicio de sesión se ha realizado correctamente. Todos los módulos de la pila que tienen el indicador de control required deben procesarse correctamente antes de que sshd reciba un mensaje sobre el resultado positivo. Aunque alguno de los módulos no llegase a procesarse correctamente, el resto de la pila de módulos sí continuaría procesándose y, solo entonces, sshd recibiría una notificación acerca del resultado incorrecto.

Cuando todos los módulos del tipo auth se han procesado correctamente, se procesa otra instrucción include, en este caso, la del Ejemplo 3, “Configuración por defecto de la sección account (common-account)”. common-account contiene solo un módulo, pam_unix. Si pam_unix indica como resultado que el usuario existe, sshd recibe un mensaje de notificación al respecto y se pasa a procesar la siguiente pila de módulos (password), los cuales se describen en:

Ejemplo 3: Configuración por defecto de la sección account (common-account)
account  required  pam_unix.so  try_first_pass

De nuevo, la configuración de PAM de sshd implica solo una instrucción include que hace referencia a la configuración por defecto de los módulos password del archivo common-password. Estos módulos deben completarse correctamente (indicador de control requisite y required) siempre que la aplicación solicite que se cambie un testigo de autenticación.

Cambiar una contraseña u otro testigo de autenticación exige realizar una comprobación de seguridad. Esto se consigue con el módulo pam_cracklib. El módulo pam_unix utilizado posteriormente transfiere las contraseñas antiguas y nuevas desde pam_cracklib, por lo que el usuario no necesita autenticarse de nuevo después de cambiar la contraseña. Esto también evita que se puedan saltar las comprobaciones que lleva a cabo pam_cracklib. Siempre que el tipo account o el tipo auth se configuren para quejarse de contraseñas caducadas, también se deben utilizar los módulos password.

En el último paso, se llama a los módulos de tipo session (incluidos en el archivo common-session) para que configuren la sesión según los ajustes del usuario en cuestión. El módulo pam_limits carga el archivo /etc/security/limits.conf, que puede definir límites en el uso de ciertos recursos del sistema. El módulo pam_unix se procesa de nuevo. El módulo pam_umask se puede utilizar para definir la máscara de creación del modo de archivo. Dado que este módulo lleva el indicador optional, un fallo de este módulo no afectaría a la finalización correcta de toda la pila de módulos de sesión. Cuando el usuario cierra la sesión, se vuelve a llamar a los módulos de session.

3 Configuración de módulos PAM

Algunos módulos PAM son configurables. Los archivos de configuración se encuentran en /etc/security. Esta sección describe brevemente los archivos de configuración relevantes para el ejemplo de sshd: pam_env.conf y limits.conf.

3.1 pam_env.conf

pam_env.conf se puede utilizar para definir un entorno estandarizado para usuarios, el cual se establecerá cada vez que se llame al módulo pam_env. Si se utiliza este archivo, las variables de entorno deberán predefinirse con la sintaxis siguiente:

VARIABLE  [DEFAULT=VALUE]  [OVERRIDE=VALUE]
VARIABLE

Nombre de la variable de entorno que definir.

[DEFAULT=<value>]

VALUE es el valor por defecto que el administrador desea establecer.

[OVERRIDE=<value>]

Los valores se pueden consultar y definir mediante pam_env, sustituyendo al valor por defecto.

Un ejemplo típico de cómo se podría utilizar pam_env sería para adaptar la variable DISPLAY, que se cambia cada vez que se inicia sesión de forma remota. Este ejemplo se muestra en Ejemplo 4, “pam_env.conf”.

Ejemplo 4: pam_env.conf
REMOTEHOST  DEFAULT=localhost          OVERRIDE=@{PAM_RHOST}
DISPLAY     DEFAULT=${REMOTEHOST}:0.0  OVERRIDE=${DISPLAY}

La primera línea define el valor de la variable REMOTEHOST en localhost, la cual se utilizará cada vez que pam_env no pueda determinar ningún otro valor. La variable DISPLAY, a su vez, contiene el valor de REMOTEHOST. Encontrará más información en los comentarios de /etc/security/pam_env.conf.

3.2 limits.conf

Se pueden definir límites del sistema para usuarios o para grupos en el archivo limits.conf, que lee el módulo pam_limits. Este archivo permite definir límites rígidos, que no se podrán sobrepasar, y límites flexibles, que sí se pueden sobrepasar temporalmente. Para obtener más información acerca de la sintaxis y las opciones, consulte los comentarios en /etc/security/limits.conf.

4 Configuración de PAM mediante pam-config

La herramienta pam-config ayuda a configurar los archivos de configuración globales de PAM (/etc/pam.d/common-*) y varias configuraciones de aplicaciones seleccionadas. Para obtener una lista de los módulos compatibles, utilice el comando pam-config --list-modules. Utilice el comando pam-config para mantener los archivos de configuración de PAM. Añada nuevos módulos a las configuraciones de PAM, suprima otros módulos o modifique las opciones de esos módulos. Al cambiar los archivos de configuración de PAM globales, no es necesario realizar ajustes manuales en la configuración de PAM para aplicaciones individuales.

Un caso de uso sencillo de pam-config implica lo siguiente:

  1. Generar automáticamente una nueva configuración de PAM de estilo Unix. Deje que pam-config cree la configuración más sencilla posible que se pueda ampliar más adelante. El comando pam-config --create crea una configuración de autenticación Unix simple. Los archivos de configuración preexistentes no mantenidos por pam-config se sobrescriben, pero las copias de seguridad se conservan como *.pam-config-backup.

  2. Añadir un nuevo método de autenticación. Para añadir un nuevo método de autenticación (por ejemplo, LDAP) a la pila de módulos PAM solo hace falta un simple comando pam-config --add --ldap. LDAP se añade siempre que sea necesario en todos los archivos de configuración de PAM common-*-pc.

  3. Añadir depuración con fines de prueba. Para asegurarse de que el nuevo procedimiento de autenticación funciona según lo previsto, active la depuración para todas las operaciones relacionadas con PAM. pam-config --add --ldap-debug activa la depuración de las operaciones de PAM relacionadas con LDAP.

  4. Consultar su configuración. Antes de aplicar finalmente la nueva configuración de PAM, compruebe si contiene todas las opciones que desea añadir. El comando pam-config --query --MODULE muestra tanto el tipo como las opciones del módulo PAM consultado.

  5. Eliminar las opciones de depuración. Por último, elimine la opción de depuración de la configuración cuando esté completamente satisfecho con el rendimiento de la misma. El comando pam-config --delete --ldap-debug desactiva la depuración para la autenticación LDAP. En caso de que haya añadido opciones de depuración para otros módulos, utilice comandos similares para desactivarlas.

Para obtener más información sobre el comando pam-config y las opciones disponibles, consulte la página del manual de pam-config(8).

5 Configuración manual de PAM

Si prefiere crear o mantener manualmente los archivos de configuración de PAM, asegúrese de inhabilitar pam-config para ellos.

Cuando se crean los archivos de configuración de PAM desde cero mediante el comando pam-config --create, se crean enlaces simbólicos desde los archivos common-* a archivos common-*-pc. pam-config solo modifica los archivos de configuración common-*-pc. La eliminación de estos enlaces simbólicos inhabilita pam-config de forma efectiva, ya que pam-config solo funciona en los archivos common-*-pc y estos archivos no entran en vigor sin los enlaces simbólicos.

Aviso
Aviso: inclusión de pam_systemd.so en la configuración

Si va a crear su propia configuración de PAM, asegúrese de incluir pam_systemd.so con el valor session optional configurado. No incluir pam_systemd.so puede causar problemas con los límites de tareas de systemd. Para obtener más información, consulte la página de manual de pam_systemd.so.

6 Configuración de SLE Micro para requerir claves U2F para el inicio de sesión local

Para proporcionar más seguridad durante el inicio de sesión local a SLE Micro, puede configurar la autenticación de dos factores mediante el marco pam-u2f y la función U2F en YubiKeys y llaves de seguridad.

Para configurar U2F en el sistema SLE Micro, debe asociar la llave a su cuenta en SLE Micro. A continuación, configure el sistema para utilizar la llave. El proceso se describe en las secciones siguientes.

6.1 Asociación de la llave U2F a su cuenta

Para asociar su llave U2F a su cuenta, haga lo siguiente:

  1. Inicie sesión en su equipo.

  2. Inserte la llave U2F.

  3. Cree un directorio para la configuración de la llave U2F:

    > sudo mkdir -p ~/.config/Yubico
  4. Ejecute el comando pamu2fcfg, que genera líneas de configuración:

    > sudo pamu2fcfg > ~/.config/Yubico/u2f_keys
  5. Cuando el dispositivo comience a parpadear, toque el contacto de metal para confirmar la asociación.

Se recomienda utilizar un dispositivo U2F de copia de seguridad, que se puede configurar ejecutando los siguientes comandos:

  1. Ejecutar:

    > sudo pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
  2. Cuando el dispositivo comience a parpadear, toque el contacto de metal para confirmar la asociación.

A fin de aumentar la seguridad, puede mover el archivo de salida de la ubicación por defecto a un directorio que requiera permiso de sudo para modificar el archivo. Por ejemplo, muévalo al directorio /etc. Para ello, siga los pasos siguientes:

  1. Cree un directorio en /etc.

    > sudo mkdir /etc/Yubico
  2. Mueva el archivo creado:

    > sudo mv ~/.config/Yubico/u2f_keys /etc/Yubico/u2f_keys
Nota
Nota: colocación de u2f_keys en una ubicación que no sea la ubicación por defecto

Si mueve el archivo de salida a un directorio que no sea el directorio por defecto ($HOME/.config/Yubico/u2f_keys), deberá añadir la vía al archivo /etc/pam.d/login como se describe en la Sección 6.2, “Actualización de la configuración de PAM”.

6.2 Actualización de la configuración de PAM

Después de crear la configuración de las llaves U2F, debe ajustar la configuración de PAM en el sistema.

  1. Abra el archivo /etc/pam.d/login.

  2. Añada la línea auth required pam_u2f.so al archivo de la siguiente manera:

    #%PAM-1.0
    auth      include    common-auth
    auth      required   pam_u2f.so
    account   include    common-account
    password  include    common-password
    session   optional   pam_keyinit.so revoke
    session   include    common-session
    #session  optional   pam_xauth.so
  3. Si ha colocado el archivo u2f_keys en una ubicación que no sea $HOME/.config/Yubico/u2f_keys, debe utilizar la opción authfile en el archivo PAM /etc/pam.d/login de la siguiente manera:

    #%PAM-1.0 
    auth     requisite pam_nologin.so 
    auth     include   common-auth
    auth  required pam_u2f.so authfile=<PATH_TO_u2f_keys>
    ...

    Donde <PATH_TO_u2f_keys> es la vía absoluta al archivo u2f_keys.