Cómo usar la misma biblioteca más de una vez en el conmutador de servicio de nombres (NSS)

8

¿Existe alguna solución genérica para usar una sola biblioteca NSS dos (o más) veces?

En mi caso, tengo dos servidores LDAP, uno local en la máquina y otro remoto. Necesito hacer que NSS funcione con ambos (usa el remoto si local no tiene entradas requeridas).

Actualmente se resolvió de modo que la biblioteca única ( PADL / nss_ldap ) se compila dos veces. En ambos casos, antes de construir sedse usa para cambiar todas las nss_ldapocurrencias en las fuentes a otra cosa. Para cada caso se usa un texto diferente (como nss_ldap_1y nss_ldap_2). El resultado de la compilación se renombra en consecuencia. Ambos binarios se almacenan en el sistema de destino y se hace referencia a ellos /etc/nsswitch.conf.

Además, ambas bibliotecas usan diferentes archivos de configuración /etc/(de lo contrario, ¡no tendría sentido!). Sin embargo, esto se hace fácilmente simplemente cambiando el argumento en el configurescript de la biblioteca ejecutada antes de construir.

Pero no "se siente bien". ¿Hay algún otro enfoque?

Lo que podría imaginar es que la propia biblioteca NSS podría admitir múltiples configuraciones para que funcione como dos "instancias únicas". Pero esto es difícil de lograr si no eres autor de la biblioteca. También requiere la invocación posterior de la biblioteca para ambas configuraciones, mientras que uno podría preferir tener alguna otra biblioteca en el medio.

Otro enfoque sería escribir un reenviador simple que simplemente llame a alguna otra biblioteca con una configuración diferente. Pero esto nuevamente requiere que otra biblioteca sea reconfigurable de alguna manera (si solo usa algunos archivos de configuración fijos en /etcel reenviador funcionará igual que la primera versión). Y también funciona solo una vez: para que una biblioteca se use tres veces o más, el mismo problema vuelve ahora con el reenviador.

Adam Badura
fuente
Wow, sorprendido de que funcionó, ¿no intentan leer el mismo archivo de configuración? ¿O también cambió el nombre del archivo de configuración?
derobert
1
¿Qué tal el uso sss?
Stéphane Chazelas
@ StéphaneChazelas Creo que sssd está destinado a trabajar con un sistema LDAP autorizado, donde todos los servidores LDAP con los que habla tienen los mismos datos. OP parece querer múltiples servidores con datos diferentes, y algunas búsquedas van en contra del servidor1 y otras búsquedas en el servidor2.
derobert
@derobert, no, sssd debería funcionar con varios proveedores independientes.
Stéphane Chazelas
2
Por otro lado, es posible que resuelva algunas otras cosas, como el almacenamiento en caché de credenciales adecuado y una mayor flexibilidad en la configuración.
Stéphane Chazelas

Respuestas:

4

Desafortunadamente, no puede hacer esto con la implementación NSS de GNU libc. Notó el problema fundamental, solo permítame presentarlo desde un ángulo diferente: la nsswitch.confsintaxis no permite proporcionar ninguna información adicional a los módulos de servicio NSS, por lo que de todos modos no podrían comportarse de manera diferente en invocaciones repetidas. Por lo tanto, no es compatible desde el lado de la libc ni desde el lado del módulo. Por otra parte, glibc hace que un punto de mantenimiento de los módulos de servicio directamente objetos enlazable compartidos, que excluye cualquier engaño vinculación.

Lo que puede hacer en su lugar es crear un metadirectorio a partir de sus dos directorios LDAP y usarlo en su configuración de NSS. OpenLDAP lo admite muy bien, consulte la slapd-meta(5)página del manual o esta introducción de fusión, por ejemplo. Por supuesto, no necesita una nueva slapdinstancia para esto si puede configurar cualquiera de los dos.

(Y en lugar de nss-ldapusar nss-ldapdsi puedes).

Ferenc Wágner
fuente