Cómo configurar y usar PAM en Linux

Cómo configurar y usar PAM en Linux

Linux-PAM. (abreviatura de Módulos de autenticación conectables. que evolucionó a partir de la arquitectura Unix-PAM) es un poderoso conjunto de bibliotecas compartidas que se utilizan para autenticar dinámicamente a un usuario en las 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 requieren autenticación, independientemente del sistema de autenticación subyacente.

Muchas distribuciones modernas de Linux son compatibles con Linux-PAM. (en lo sucesivo, “ PAM. ”) de forma predeterminada. En este artículo, explicaremos cómo configurar PAM. avanzado en sistemas Ubuntu. y CentOS.

Antes de proceder con cualquier Además, 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 deshabilitar 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 bloquear su acceso 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, verifique si ha sido compilado con la biblioteca PAM usando el comando ldd.

freestar. config. 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 de 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 extender las reglas usando el carácter de escape “\”) y los comentarios están precedidos por marcas “#” y se extienden hasta el siguiente final de línea.

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

tipo de servicio módulo-indicador de control módulo-argumentos

donde:

  • servicio. nombre real de la aplicación .
  • type. tipo de módulo/contexto/interfaz.
  • control-flag. indica el comportamiento de la 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 eso del archivo principal y se compone de líneas de la siguiente forma:

tipo control-flag module module-argumentos

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

solicitud de cuenta uired pam_nologin.so

Comprender los grupos de administración PAM y los indicadores de control

Las tareas de autenticación PAM. están separadas en cuatro grupos de administración independientes. Estos grupos administran 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 grupos de administración:

  • cuenta. proporciona servicios para la verificación de la cuenta: ¿ha caducado la contraseña del usuario ?; ¿Este usuario tiene permiso para acceder al servicio solicitado?
  • autenticación. autentique a un usuario y configure sus credenciales.
  • contraseña. son responsables de actualizar las contraseñas de los usuarios y trabajan junto con los módulos de autenticación.
  • sesión. administran las acciones realizadas al comienzo 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/seguridad. según la arquitectura.

Los indicadores de control. admitidos son:

  • requisito. 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. regrese éxito de la aplicación.
  • suficiente. dado que todo l los módulos anteriores han tenido éxito, el éxito de este módulo conduce a un retorno inmediato y exitoso a la aplicación (se ignora el fallo 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, hay otras dos marcas de control válidas:

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

Cómo restringir el acceso de root al servicio SSH a través de PAM

Como ejemplo, configuraremos cómo usar PAM para deshabilitar al usuario root acceso 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 de inicio de sesión y sshd.

Podemos usar el módulo /lib/security/pam_listfile.so. que ofrece una gran flexibilidad para 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 O $ sudo vim/etc/pam.d/login

Agregue esta regla en ambos archivos.

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

Explicando los tokens en la regla anterior:

  • auth: es el tipo de módulo (o contexto).
  • requerido. es un indicador de control que significa si el se utiliza el módulo, debe aprobarse o el resultado general fallará, 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 = success. argumento del módulo.
  • item = user. argumento del módulo que especifica lo que se enumera en el archivo y 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, se solicita la acción opuesta.
  • archivo =/etc/ssh/denigrados usuarios. argumento del módulo que especifica el archivo que contiene uno elemento por línea.

A continuación, tenemos que crear el archivo /etc/ssh/pressedusers. y agregar el nombre root. en él :

$ sudo vim/etc/ssh/pressedusers

Guarde los cambios y cierre el archivo, luego establezca los permisos requeridos en él:

$ sudo chmod 600/etc/ssh/pressedusers

A partir de ahora, la regla anterior le dirá a PAM que consulte el archivo /etc/ssh/denigradousers. y denegue el acceso al SSH y los servicios de inicio de sesión para cualquier usuario de la lista.

Configuración de PAM avanzado en Linux

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

escriba [valor1 = acción1 valor2 = acción2 …] Módulo módulo-argumentos

Donde valorN. corresponde al código de retorno de la función invocada en el m odule para el que se define 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 que todos los valores N no se mencionan explícitamente.

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

  • ignorar. si esta acción se usa con una pila de módulos, el estado de retorno del módulo no contribuirá al código de retorno que obtiene la aplicación.
  • malo. indica que el código de retorno debe considerarse como un indicador de falla del módulo. Si este módulo es el primero en la pila en fallar, su valor de estado se usará para el de toda la pila.
  • morir. equivalente a malo pero puede terminar la pila de módulos y PAM regresando inmediatamente a la aplicación.
  • ok. esto le 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 terminar la pila de módulos y PAM regresa inmediatamente a la aplicación.
  • N (un número 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: obligatorio; requisito; suficiente; y opcional, tienen una expresión equivalente en términos de sintaxis, […] que te permiten escribir reglas más complicadas y son:

  • requeridas. [ success = ok new_authtok_reqd = ok ignore = ignore default = bad]
  • requisito. [success = ok new_authtok_reqd = ok ignore = ignore default = die]
  • suficiente. [éxito = hecho new_authtok_reqd = hecho predeterminado = ignorar]
  • opcional. [éxito = ok new_authtok_reqd = ok predeterminado = ignorar]

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

#% PAM-1.0 # Este archivo se genera automáticamente. # Los cambios de usuario se destruirán la próxima vez que se ejecute authconfig. session [éxito = 1 predeterminado = ignorar] pam_succeed_if.so service! ~ gdm * service! ~ su * quiet session [default = 1] pam_lastlog.so nowtmp showfailed session opcional pam_lastlog.so silent noupdate showfailed

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

#% PAM-1.0 # Este archivo se genera automáticamente. # Los cambios de usuario se destruirán la próxima vez que se ejecute authconfig. auth required pam_env.so auth [éxito = hecho ignore = ignore default = die] pam_pkcs11.so nodebug wait_for_card auth required pam_deny.so cuenta requerida pam_unix.so cuenta suficiente pam_localuser.so cuenta suficiente pam_succeed_if.so uid <1000 quiet account required pam_permit. entonces se requiere contraseña pam_pkcs11.so sesión opcional pam_keyinit.so revocar sesión requerida pam_limits.so-session opcional pam_systemd.so sesión [éxito = 1 predeterminado = ignorar] pam_succeed_if.so servicio en crond quiet use_uid sesión requerida pam_unix.so

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

$ man pam.d

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

Resumen

PAM. es una potente API de alto nivel que permite a los programas que dependen de la autenticación n para usuarios auténticos de 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.