如何在名稱服務切換 (NSS) 中多次使用同一個庫
是否有任何通用解決方案可以兩次(或多次)使用單個 NSS 庫?
就我而言,我有兩台 LDAP 伺服器,一台在機器本身上,一台在遠端。我需要讓 NSS 與它們一起工作(如果本地沒有必需的條目,它使用遠端的)。
目前已解決,因此單個庫 ( PADL/nss_ldap ) 建構了兩次。在這兩種情況下,在建構之前
sed
都用於將nss_ldap
源中的所有出現更改為其他內容。對於每種情況,使用不同的文本(如nss_ldap_1
和nss_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