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

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

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

就我而言,我有两台 LDAP 服务器,一台位于计算机本身本地,一台位于远程。我需要让 NSS 与它们一起工作(如果本地没有必需的条目,它会使用远程 NSS)。

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

此外,这两个库都使用不同的配置文件/etc/(否则它没有任何意义!)。然而,只需在configure构建之前更改库运行脚本中的参数即可轻松完成此操作。

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

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

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

答案1

不幸的是,您无法使用 GNU libc 的 NSS 实现来做到这一点。您注意到了根本问题,让我从不同的角度介绍它:nsswitch.conf语法不允许向 NSS 服务模块提供任何附加信息,因此它们在重复调用时无论如何都不会表现出不同。因此 libc 端和模块端均不支持它。此外,glibc 还做了一个观点保持服务模块可直接链接共享对象,这排除了任何链接欺骗。

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

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

相关内容