Búsqueda de sitios web

Cómo configurar y utilizar PAM en Linux


Linux-PAM (abreviatura de Módulos de autenticación conectables que evolucionaron a partir de la arquitectura Unix-PAM) es un potente conjunto de bibliotecas compartidas que se utilizan para autenticar dinámicamente a un usuario en aplicaciones (o servicios). ) en un sistema Linux.

Integra múltiples módulos de autenticación de bajo nivel en una API de alto nivel que proporciona soporte de autenticación dinámica para aplicaciones. Esto permite a los desarrolladores escribir aplicaciones que requieran autenticación, independientemente del sistema de autenticación subyacente.

Muchas distribuciones modernas de Linux admiten Linux-PAM (en adelante, "PAM") de forma predeterminada. En este artículo, explicaremos cómo configurar PAM avanzado en sistemas Ubuntu y CentOS.

Antes de continuar, tenga en cuenta que:

  • Como administrador del sistema, lo más importante es dominar cómo los archivos de configuración PAM definen la conexión entre las aplicaciones (servicios) y los módulos de autenticación conectables (PAM) que realizan las tareas de autenticación reales. No es necesario que comprenda el funcionamiento interno de PAM.
  • PAM tiene el potencial de alterar seriamente la seguridad de su sistema Linux. Una configuración errónea puede desactivar el acceso a su sistema parcial o completamente. Por ejemplo, una eliminación accidental de un archivo de configuración en /etc/pam.d/* y/o /etc/pam.conf puede bloquearle el acceso a su propio sistema!

Cómo comprobar que un programa es compatible con PAM

Para emplear PAM, una aplicación/programa debe ser “consciente de PAM”; debe haber sido escrito y compilado específicamente para usar PAM. Para saber si un programa es “compatible con PAM” o no, compruebe si se ha compilado con la biblioteca PAM utilizando el comando ldd.

Por ejemplo sshd:

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Cómo configurar PAM en Linux

El archivo de configuración principal para PAM es /etc/pam.conf y el directorio /etc/pam.d/ contiene los archivos de configuración de PAM para cada aplicación/servicio compatible con PAM. PAM ignorará el archivo si el directorio existe.

La sintaxis del archivo de configuración principal es la siguiente. El archivo se compone de una lista de reglas escritas en una sola línea (puede ampliar las reglas usando el carácter de escape “\ ”) y los comentarios están precedidos por “# ” marcas y extender hasta el siguiente final de la línea.

El formato de cada regla es una colección de tokens separados por espacios (los primeros tres no distinguen entre mayúsculas y minúsculas). Explicaremos estos tokens en secciones posteriores.

service type control-flag module module-arguments 

dónde :

  • servicio: nombre real de la aplicación.
  • tipo: tipo de módulo/contexto/interfaz.
  • control-flag: indica el comportamiento de PAM-API en caso de que el módulo no tenga éxito en su tarea de autenticación.
  • módulo: el nombre de archivo absoluto o la ruta relativa del PAM.
  • argumentos del módulo: lista de tokens separados por espacios para controlar el comportamiento del módulo.

La sintaxis de cada archivo en /etc/pam.d/ es similar a la del archivo principal y se compone de líneas de la siguiente forma:

type control-flag module module-arguments

Este es un ejemplo de una definición de regla (sin argumentos de módulo) que se encuentra en el archivo /etc/pam.d/sshd, que no permite inicios de sesión no root cuando /etc/nologin fuerte> existe:

account required pam_nologin.so

Comprensión de los grupos de gestión de PAM y las banderas de control

Las tareas de autenticación PAM se dividen en cuatro grupos de administración independientes. Estos grupos gestionan diferentes aspectos de la solicitud de un usuario típico de un servicio restringido.

Un módulo está asociado a uno de estos tipos de grupo de administración:

  • cuenta: proporciona servicios para la verificación de la cuenta: ¿ha caducado la contraseña del usuario?; ¿Este usuario tiene permitido el acceso al servicio solicitado?
  • autenticación: autentica a un usuario y configura sus credenciales.
  • contraseña: se encargan de actualizar las contraseñas de los usuarios y trabajan en conjunto con los módulos de autenticación.
  • sesión: gestiona las acciones realizadas al inicio y al final de una sesión.

Los archivos de objetos cargables PAM (los módulos) deben ubicarse en el siguiente directorio: /lib/security/ o /lib64/security dependiendo de la arquitectura.

Las banderas de control admitidas son:

  • requisito: la falla devuelve instantáneamente el control a la aplicación indicando la naturaleza de la falla del primer módulo.
  • requerido: todos estos módulos son necesarios para que libpam devuelva el éxito a la aplicación.
  • suficiente: dado que todos los módulos anteriores han tenido éxito, el éxito de este módulo conduce a un regreso inmediato y exitoso a la aplicación (se ignora el fracaso de este módulo).
  • opcional: el éxito o el fracaso de este módulo generalmente no se registra.

Además de las palabras clave anteriores, existen otras dos banderas de control válidas:

  • incluir y subpilar: incluye todas las líneas de un tipo dado del archivo de configuración especificado como argumento para este control.

Cómo restringir el acceso raíz al servicio SSH a través de PAM

Como ejemplo, configuraremos cómo usar PAM para deshabilitar el acceso del usuario root a un sistema a través de SSH y programas de inicio de sesión. Aquí, queremos deshabilitar el acceso del usuario root a un sistema, restringiendo el acceso a los servicios sshd y de inicio de sesión.

Podemos utilizar el módulo /lib/security/pam_listfile.so que ofrece una gran flexibilidad a la hora de limitar los privilegios de cuentas específicas. Abra y edite el archivo para el servicio de destino en el directorio /etc/pam.d/ como se muestra.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

Agregue esta regla en ambos archivos.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

Explicando las fichas en la regla anterior:

  • auth: es el tipo de módulo (o contexto).
  • requerido: es un indicador de control que significa que si se utiliza el módulo, debe aprobarse o el resultado general será fallido, independientemente del estado de otros módulos.
  • pam_listfile.so: es un módulo que proporciona una forma de denegar o permitir servicios basados en un archivo arbitrario.
  • onerr=succeed: argumento del módulo.
  • item=user: argumento del módulo que especifica lo que aparece en el archivo y lo que se debe verificar.
  • sense=deny: argumento del módulo que especifica la acción a tomar si se encuentra en el archivo; si el elemento NO se encuentra en el archivo, entonces se solicita la acción opuesta.
  • file=/etc/ssh/deniedusers: argumento del módulo que especifica el archivo que contiene un elemento por línea.

A continuación, debemos crear el archivo /etc/ssh/deniedusers y agregarle el nombre root:

sudo vim /etc/ssh/deniedusers

Guarde los cambios y cierre el archivo, luego establezca los permisos necesarios:

sudo chmod 600 /etc/ssh/deniedusers

De ahora en adelante, la regla anterior le indicará a PAM que consulte el archivo /etc/ssh/deniedusers y deniegue el acceso a SSH y a los servicios de inicio de sesión para cualquier usuario listado.

Cómo configurar PAM avanzado en Linux

Para escribir reglas PAM más complejas, puede utilizar indicadores de control válidos de la siguiente forma:

type [value1=action1 value2=action2 …] module module-arguments

Donde valorN corresponde al código de retorno de la función invocada en el módulo para el que está definida la línea. Puede encontrar valores admitidos en la Guía del administrador de PAM en línea. Un valor especial es el predeterminado, lo que implica todos los valores N que no se mencionan explícitamente.

La acciónN puede adoptar una de las siguientes formas:

  • ignorar: si esta acción se utiliza con una pila de módulos, el estado de devolución del módulo no contribuirá al código de devolución que obtiene la aplicación.
  • malo: indica que el código de retorno debe considerarse indicativo de que el módulo está fallando. Si este módulo es el primero de la pila en fallar, su valor de estado se utilizará para el de toda la pila.
  • die: equivalente a malo, pero puede terminar la pila de módulos y PAM regresar inmediatamente a la aplicación.
  • ok: esto indica a PAM que el administrador del sistema cree que este código de retorno debería contribuir directamente al código de retorno de la pila completa de módulos.
  • hecho: equivalente a ok pero puede finalizar la pila del módulo y PAM regresar inmediatamente a la aplicación.
  • N (un entero sin signo): equivalente a ok pero puede saltar sobre los siguientes N módulos de la pila.
  • Restablecer: esta acción borra toda la memoria del estado de la pila de módulos y reinicia con el siguiente módulo apilado.

Cada una de las cuatro palabras clave: requerido; requisito; suficiente; y opcional, tener una expresión equivalente en términos de la sintaxis [...], que te permite escribir reglas más complicadas y son:

  • requerido: [éxito=ok new_authtok_reqd=ok ignorar=ignorar default=malo]
  • requisito: [éxito=ok new_authtok_reqd=ok ignorar=ignorar default=morir]
  • suficiente: [éxito=hecho new_authtok_reqd=hecho default=ignorar]
  • opcional: [éxito=ok new_authtok_reqd=ok default=ignorar]

El siguiente es un ejemplo de un sistema CentOS 7 moderno. Consideremos estas reglas del archivo PAM /etc/pam.d/postlogin:

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

Aquí hay otro ejemplo de configuración del archivo PAM /etc/pam.d/smartcard-auth:

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Para obtener más información, consulte la página de manual pam.d:

man pam.d 

Por último, puede encontrar una descripción completa de la sintaxis del archivo de configuración y de todos los módulos PAM en la documentación de Linux-PAM.

Resumen

PAM es una potente API de alto nivel que permite que los programas que dependen de la autenticación autentiquen a los usuarios de las aplicaciones en un sistema Linux. Es poderoso pero muy difícil de entender y usar.

En este artículo, explicamos cómo configurar funciones avanzadas de PAM en Ubuntu y CentOS. Si tiene alguna pregunta o comentario para compartir, utilice el formulario de comentarios a continuación.