如何在名称服务交换机(NSS)中多次使用同一库


8

是否有任何通用解决方案可以使用单个NSS库两次(或多次)?

就我而言,我有两台LDAP服务器,一台在计算机本身上,另一台在远程上。我需要使NSS与它们两者都可以工作(如果本地没有必需的条目,它将使用远程的)。

当前已解决,因此单个库(PADL / nss_ldap)被构建两次。在这两种情况下,在使用构建之前sednss_ldap源中的所有事件都更改为其他事件。对于每种情况,都会使用不同的文本(例如nss_ldap_1nss_ldap_2)。构建结果将相应地重命名。这两个二进制文件都存储在目标系统上,并在中进行了引用/etc/nsswitch.conf

而且这两个库都使用不同的配置文件/etc/(否则就没有任何意义!)。但是,只需configure在构建之前运行的库脚本中更改参数即可轻松实现。

但这并不“感觉正确”。还有其他方法吗?

我可以想象的是,NSS库本身可以支持多种配置,因此可以作为两个“单个实例”使用。但是,如果您不是该库的作者,则很难实现。此外,它还要求随后为这两种配置调用该库,而一个人可能更希望在它们之间具有其他库。

另一种方法是编写一个简单的转发器,该转发器仅调用其他具有不同配置的库。但这再次要求其他库可以以某种方式重新配置(如果它仅使用/etc转发器中的一些固定配置文件,则该库将与第一个版本一样工作)。而且它也只能工作一次-让一个库使用3次或更多次,转发器本身现在会返回相同的问题。


哇,这很奏效-他们不尝试从同一配置文件中读取吗?还是您也更改了配置文件名?
derobert

1
使用sss怎么样?
斯特凡Chazelas

@StéphaneChazelas我认为sssd旨在与一个权威的LDAP系统配合使用,在该系统中,与之交谈的所有LDAP服务器都具有相同的数据。OP似乎希望使用具有不同数据的多个服务器,并且要对server1进行某些查找,而对server2进行其他查找。
derobert

@derobert,不,sssd应该与几个独立的提供程序一起工作。
斯特凡Chazelas

2
另一方面,您可能会发现它解决了其他一些问题,例如适当的凭据缓存和配置的更大灵活性。
斯特凡Chazelas

Answers:


4

不幸的是,您无法使用GNU libc的NSS实现来做到这一点。您注意到了一个基本问题,只是让我从另一个角度提出:nsswitch.conf语法不允许向NSS服务模块提供任何其他信息,因此无论如何它们在重复调用中的行为都不会有所不同。因此,libc或模块都不支持它。而且,glibc 指出了保持服务模块直接可链接的共享对象的目的,这不包括任何链接技巧。

您可以做的是从两个LDAP目录中创建一个元目录,然后在NSS配置中使用该目录。OpenLDAP很好地支持此功能,例如,请参见slapd-meta(5)手册页或此合并介绍。当然slapd,如果您可以配置两者中的任何一个,则不需要新的实例。

(如果可以,请不要nss-ldap使用nss-ldapd。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.