Nsswitch

如何在名稱服務切換 (NSS) 中多次使用同一個庫

  • June 18, 2015

是否有任何通用解決方案可以兩次(或多次)使用單個 NSS 庫?

就我而言,我有兩台 LDAP 伺服器,一台在機器本身上,一台在遠端。我需要讓 NSS 與它們一起工作(如果本地沒有必需的條目,它使用遠端的)。

目前已解決,因此單個庫 ( PADL/nss_ldap ) 建構了兩次。在這兩種情況下,在建構之前sed都用於將nss_ldap源中的所有出現更改為其他內容。對於每種情況,使用不同的文本(如nss_ldap_1nss_ldap_2)。建構結果相應地重命名。兩個二進製文件都儲存在目標系統上,並在/etc/nsswitch.conf.

此外,這兩個庫都使用不同的配置文件/etc/(否則它沒有任何意義!)。然而,這很容易通過configure在建構之前更改庫執行腳本中的參數來完成。

但它並不“感覺正確”。還有其他方法嗎?

我可以想像的是 NSS 庫本身可以支持多種配置,以便它可以作為兩個“單個實例”工作。但是,如果您不是該庫的作者,這很難實現。此外,它還需要隨後為兩種配置呼叫庫,而人們可能更喜歡在兩者之間使用其他庫。

另一種方法是編寫一個簡單的轉發器,它只呼叫具有不同配置的其他庫。但這再次要求其他庫以某種方式可重新配置(如果它只使用/etc轉發器中的一些固定配置文件將與第一個版本一樣工作)。而且它只工作一次 - 讓一個庫使用三次或更多次,現在轉發器本身會返回相同的問題。

不幸的是,你不能用 GNU libc 的 NSS 實現來做到這一點。您注意到了根本問題,讓我從不同的角度來介紹它:nsswitch.conf語法不允許向 NSS 服務模組提供任何額外的資訊,因此它們在重複呼叫時無論如何都不會表現出不同的行為。因此,libc 端和模組端都不支持它。此外,glibc 強調保持服務模組可直接連結共享對象,這排除了任何連結技巧。

您可以做的是從您的兩個 LDAP 目錄中創建一個元目錄,並在您的 NSS 配置中使用它。OpenLDAP 很好地支持這一點,例如參見slapd-meta(5)手冊頁或這個合併介紹slapd當然,如果您可以配置兩者中的任何一個,則不需要為此創建新實例。

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

引用自:https://unix.stackexchange.com/questions/204350