Gibt es eine generische Lösung, um eine einzelne NSS-Bibliothek zwei (oder mehr) Mal zu verwenden?
In meinem Fall habe ich zwei LDAP-Server, einen lokalen auf dem Computer selbst und einen Remote-Server. Ich muss dafür sorgen, dass NSS mit beiden funktioniert (es verwendet die Remote-Version, wenn local keine erforderlichen Einträge hat).
Derzeit wurde es so gelöst, dass eine einzelne Bibliothek ( PADL / nss_ldap ) zweimal erstellt wird. In beiden Fällen werden vor dem Erstellen sed
alle nss_ldap
Vorkommen in Quellen in etwas anderes geändert . Für jeden Fall wird ein anderer Text verwendet (wie nss_ldap_1
und nss_ldap_2
). Das Build-Ergebnis wird entsprechend umbenannt. Beide Binärdateien werden auf dem Zielsystem gespeichert und in verwiesen /etc/nsswitch.conf
.
Außerdem verwenden beide Bibliotheken unterschiedliche Konfigurationsdateien in /etc/
(sonst macht es keinen Sinn!). Dies ist jedoch einfach, indem Sie das Argument im configure
Skript der Bibliothek ändern, die vor dem Erstellen ausgeführt wird.
Aber es fühlt sich nicht "richtig an". Gibt es einen anderen Ansatz?
Was ich mir vorstellen kann ist, dass die NSS-Bibliothek selbst mehrere Konfigurationen unterstützen könnte, so dass sie als zwei "einzelne Instanzen" funktionieren würde. Dies ist jedoch schwer zu erreichen, wenn Sie nicht Autor der Bibliothek sind. Außerdem muss die Bibliothek für beide Konfigurationen anschließend aufgerufen werden, während möglicherweise eine andere Bibliothek dazwischen liegt.
Ein anderer Ansatz wäre, eine einfache Weiterleitung zu schreiben, die nur eine andere Bibliothek mit einer anderen Konfiguration aufruft. Dies setzt jedoch wiederum voraus, dass andere Bibliotheken irgendwie rekonfigurierbar sind (wenn nur einige feste Konfigurationsdateien in /etc
der Weiterleitung verwendet werden, funktioniert dies genauso wie die erste Version). Und es funktioniert auch nur einmal - wenn eine Bibliothek dreimal oder öfter verwendet wird, tritt das gleiche Problem jetzt mit der Weiterleitung selbst auf.
sss
?Antworten:
Leider können Sie dies mit der NSS-Implementierung von GNU libc nicht tun. Sie haben das grundlegende Problem bemerkt, lassen Sie es mich nur aus einem anderen Blickwinkel betrachten: Die
nsswitch.conf
Syntax erlaubt keine zusätzlichen Informationen für die NSS-Servicemodule, sodass sie sich bei wiederholten Aufrufen ohnehin nicht anders verhalten können. Es wird also weder von der libc-Seite noch von der Modulseite unterstützt. Darüber hinaus legt glibc Wert darauf, dass die Servicemodule direkt verknüpfbare gemeinsam genutzte Objekte erhalten, was jegliche Verknüpfungsprobleme ausschließt.Sie können stattdessen ein Meta-Verzeichnis aus Ihren beiden LDAP-Verzeichnissen erstellen und dieses in Ihrer NSS-Konfiguration verwenden. OpenLDAP unterstützt dies sehr gut, siehe die
slapd-meta(5)
Handbuchseite oder dieses Zusammenführungs-Intro zum Beispiel. Natürlich benötigen Sie hierfür keine neueslapd
Instanz, wenn Sie eine der beiden konfigurieren können.(Und anstatt zu
nss-ldap
benutzen,nss-ldapd
wenn du kannst.)quelle