Comprender PAM y NSS

21

En los últimos días he configurado un sistema Linux con autenticación LDAP y todo funciona bien, pero todavía hay algo que realmente no puedo entender con respecto a NSS y PAM, también después de mucha investigación.

Citando:

NSS permite a los administradores especificar una lista de fuentes donde se almacenarán y buscarán archivos de autenticación, nombres de host y otra información

y

PAM es un conjunto de bibliotecas que proporcionan una plataforma de autenticación configurable para aplicaciones y el sistema operativo subyacente.

Lo que no entiendo es cómo PAM y NSS trabajan e interactúan juntos. En este libro, la arquitectura se explica bastante bien: configuro PAM para usar pam_ldappara cuentas LDAP y pam_unixpara cuentas locales, luego configuro nsswitch.confpara obtener información de archivos locales y LDAP.

Si lo he entendido correctamente, LDAP se usa dos veces: primero pam_ldappor NSS, que se llama desde pam_unix. ¿Está bien? ¿LDAP se usa realmente dos veces? Pero, ¿por qué necesito configurar NSS y PAM? Mi explicación es que PAM realiza tareas diferentes que NSS y lo utilizan otros programas. Pero, entonces, debería ser posible usar solo NSS o solo PAM, como he leído en esta página .

Así que experimenté un poco y primero intenté eliminar LDAP de nsswitch.conf(y la autenticación dejó de funcionar como si solo pam_ldap no fuera suficiente para hacer el trabajo). Luego volví a habilitar LDAP en NSS y lo eliminé de la configuración de PAM (esta vez todo funcionó bien, como si fuera pam_ldapinútil y NSS es suficiente para autenticar a un usuario).

¿Hay alguien que pueda ayudarme a aclarar esto? Muchas gracias de antemano.

ACTUALIZAR

Acabo de intentar algo ahora. I eliminó de nuevo todas las pam_ldapentradas en todos los campos de configuración de PAM y también he eliminado shadow: ldapde nsswitch.conf. Como ahora en todo el sistema solo hay líneas: passwd: ldap filesy group: ldap filesen nsswitch.conf. Bueno ... el inicio de sesión con usuarios LDAP funciona perfectamente, esas dos líneas (más /etc/ldap.conf) son suficientes para configurar la autenticación LDAP.

Desde mi conocimiento, PAM es independiente de NSS, pero mis pruebas mostraron que no lo es. Entonces me pregunto si es posible desactivar completamente NSS y usar solo PAM.

ColOfAbRiX
fuente
No vi tu actualización. Ejecute los siguientes comandos e informe sus hallazgos, reemplazando LDAPUSER con el usuario que cree que solo está configurado en LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Respuestas:

25

Ayuda a descomponer cosas como esta en tu cabeza:

  • NSS : un sistema basado en módulos para controlar cómo se ensamblan varias bases de datos a nivel del sistema operativo en la memoria. Esto incluye (pero no se limita a) passwd, group, shadow(esto es importante tener en cuenta), y hosts. Las búsquedas de UID usan la passwdbase de datos, y las búsquedas de GID usan la groupbase de datos.

  • PAM : un sistema basado en módulos para permitir la autenticación y la contabilidad basadas en servicios. A diferencia de NSS, no está extendiendo las bases de datos existentes; Módulos PAM puede usar cualquier lógica que les gusta, aunque los inicios de sesión de concha aún dependen de las passwdy groupbases de datos de NSS. (siempre necesita búsquedas UID / GID)

La diferencia importante es que PAM no hace nada por sí solo. Si una aplicación no se vincula con la biblioteca PAM y realiza llamadas a ella, PAM nunca se usará. NSS es esencial para el sistema operativo, y las bases de datos son bastante ubicuas para el funcionamiento normal del sistema operativo.

Ahora que tenemos eso fuera del camino, aquí está la bola curva: mientras pam_ldap es la forma popular de autenticarse contra LDAP, no es la única forma.

  • Si shadowestá apuntando al servicio ldap /etc/nsswitch.conf, cualquier autenticación que se ejecute en la base de datos en la sombra tendrá éxito si los atributos para esas asignaciones de campo en la sombra (particularmente el campo de contraseña encriptada) están presentes en LDAP y permitirían el inicio de sesión.
    • Esto a su vez significa que pam_unix.sopotencialmente puede resultar en autenticación contra LDAP, ya que se autentica contra la base de datos en la sombra. (que es administrado por NSS y puede estar apuntando a LDAP)
  • Si un módulo PAM realiza llamadas contra un demonio que a su vez consulta la base de datos LDAP (por ejemplo pam_sss.so, qué enlaces sssd), es posible que se haga referencia a LDAP.
Andrew B
fuente
Muchas gracias, sé que nsswitch.conf + pam_unix puede hacer todo el trabajo por sí mismos. Pero también PAM debería poder hacer lo mismo, porque es independiente, como usted también escribió. Entiendo que el módulo pam_ldap debería ser suficiente para autenticar al usuario contra un servidor ldap. ¿No es así?
ColOfAbRiX
66
Autentique sí, pero a menos que tenga otra forma de obtener información del usuario (local / etc / passwd o lo que sea) todavía necesita una forma de averiguar la pertenencia a grupos, el directorio de inicio, etc. Todavía confunde la autenticación y la autorización / enumeración de atributos.
TheFiddlerWins
1
@ColOfAbRiX TheFIddlerWins es correcto. Es suficiente para autenticarse , pero aún necesita una forma de buscar UID + membresías GID como lo señalé. Estos se obtienen de las bases de datos passwdy group(NSS), lo que significa que deben estar en el sistema local ( /etc/passwd+ /etc/group) u obtenerse a través del ldapmódulo NSS.
Andrew B
3
Aquí hay una manera de ayudarlo a comprender: ejecutar getent passwdy getent groupcon LDAP habilitado para ambas bases de datos /etc/nsswitch.conf. Luego deshabilite LDAP en ese archivo y ejecute ambos comandos nuevamente. getentes un comando para descargar bases de datos NSS.
Andrew B
Por fin pude entender todo con un poco más de trabajo. ¡Gracias chicos!
ColOfAbRiX
1

NSS está allí para enumerar información sobre servicios / usuarios (a qué grupo pertenece, dónde está su directorio de inicio, etc.). PAM determina qué hacer con esa información.

Si desea utilizar LDAP para la autenticación , necesita pam_ldap. Si está utilizando otra cosa (cuentas locales, Kerberos, etc.), entonces no puede.

Entonces hacen cosas diferentes. NSS obtiene información, PAM determina quién puede hacer qué una vez que se obtiene esa información.

TheFiddlerWins
fuente
Gracias, pero el problema es que no funciona de esa manera, al menos en mi sistema :) Al principio entendí lo mismo, pero luego intenté eliminar todas las entradas pam_ldap en la autenticación PAM y LDAP que todavía funcionaban (y deshabilitó el caché). Esto aumentó mi confusión :)
ColOfAbRiX
¿Cómo está verificando que se está autenticando a través de pam_ldap después de eliminarlo? Publique el contenido de su autenticación común por favor. No estoy seguro acerca de las rutas en SUSE, pero en respuesta a la primera parte de su tercera pregunta, incluso con pam_ldap funcionando, necesita alguna forma para que el sistema sepa quién es usted, esto es proporcionado por NSS
TheFiddlerWins el
Lo siento, quiero decir que después de eliminar pam_ldap, la autenticación LDAP funcionó sin ella, supongo que funcionó a través de NSS. El archivo common-authcontenía solo pam_env, pam_unix y pam_deny.
ColOfAbRiX
Eso no tiene sentido, ¿cómo confirmó que funcionó la autenticación LDAP?
TheFiddlerWins
Iniciar sesión con una cuenta LDAP y monitorear el registro de los servidores ldap. nscd (almacenamiento en caché) está deshabilitado
ColOfAbRiX