Comment utiliser plusieurs fois la même bibliothèque dans NSS (Name Service Switch)

8

Existe-t-il une solution générique pour utiliser une seule bibliothèque NSS deux fois (ou plus)?

Dans mon cas, j'ai deux serveurs LDAP, un local sur la machine elle-même et un distant. J'ai besoin de faire fonctionner NSS avec les deux (il utilise celui distant si local n'a pas les entrées requises).

Actuellement, il a été résolu afin que la bibliothèque unique ( PADL / nss_ldap ) soit construite deux fois. Dans les deux cas, avant que la construction sedsoit utilisée pour changer toutes les nss_ldapoccurrences des sources en autre chose. Pour chaque cas, un texte différent est utilisé (comme nss_ldap_1et nss_ldap_2). Le résultat de la construction est renommé en conséquence. Les deux fichiers binaires sont stockés sur le système cible et mentionnés dans /etc/nsswitch.conf.

Ces deux bibliothèques utilisent également des fichiers de configuration différents dans /etc/(sinon cela n'aurait aucun sens!). Cependant, cela se fait facilement en changeant simplement l'argument dans le configurescript de la bibliothèque exécutée avant la construction.

Mais cela ne "se sent pas bien". Y a-t-il une autre approche?

Ce que je pourrais imaginer, c'est que la bibliothèque NSS elle-même pourrait prendre en charge plusieurs configurations afin qu'elle fonctionne comme deux "instances uniques". Mais cela est difficile à réaliser si vous n'êtes pas l'auteur de la bibliothèque. De plus, cela nécessite un appel ultérieur de la bibliothèque pour les deux configurations, alors que l'on pourrait préférer avoir une autre bibliothèque entre les deux.

Une autre approche serait d'écrire un simple redirecteur qui appelle simplement une autre bibliothèque avec une configuration différente. Mais cela nécessite à nouveau que d'autres bibliothèques soient en quelque sorte reconfigurables (si elles n'utilisent que des fichiers de configuration fixes dans /etcle redirecteur, cela fonctionnera comme la première version). Et cela ne fonctionne qu'une seule fois - pour qu'une bibliothèque soit utilisée trois fois ou plus, le même problème revient maintenant avec le transitaire lui-même.

Adam Badura
la source
Wow, surpris que cela fonctionne - n'essaient-ils pas de lire à partir du même fichier de configuration? Ou avez-vous également changé le nom du fichier de configuration?
derobert
1
Que diriez-vous d'utiliser sss?
Stéphane Chazelas
@ StéphaneChazelas Je pense que sssd est destiné à fonctionner avec un système LDAP faisant autorité, où tous les serveurs LDAP dont il parle ont les mêmes données. OP semble vouloir plusieurs serveurs avec des données différentes, et certaines recherches vont contre server1 et d'autres recherches contre server2.
derobert
@derobert, non, sssd devrait fonctionner avec plusieurs fournisseurs indépendants.
Stéphane Chazelas
2
D'un autre côté, vous pouvez constater qu'il résout quelques autres problèmes comme la mise en cache correcte des informations d'identification et plus de flexibilité dans la configuration.
Stéphane Chazelas

Réponses:

4

Malheureusement, vous ne pouvez pas le faire avec l'implémentation NSS de GNU libc. Vous avez remarqué le problème fondamental, permettez-moi de le présenter sous un angle différent: la nsswitch.confsyntaxe ne permet pas de fournir des informations supplémentaires aux modules de service NSS, ils ne peuvent donc pas se comporter différemment lors d'appels répétés de toute façon. Il n'est donc pas pris en charge du côté libc ni du côté module. De plus, glibc effectue un moment de maintenir les modules de service directement des objets partagés réticulable, ce qui exclut toute ruse de liaison.

Ce que vous pouvez faire à la place est de créer un méta-répertoire à partir de vos deux répertoires LDAP et de l'utiliser dans votre configuration NSS. OpenLDAP le supporte bien, voir la slapd-meta(5)page de manuel ou cette introduction de fusion par exemple. Bien sûr, vous n'avez pas besoin d'une nouvelle slapdinstance pour cela si vous pouvez configurer l'un des deux.

(Et au lieu d' nss-ldaputiliser nss-ldapdsi vous le pouvez.)

Ferenc Wágner
la source