Name Service Switch(NSS)で同じライブラリを複数回使用する方法


8

1つのNSSライブラリを2回以上使用する一般的な解決策はありますか?

私の場合、2つのLDAPサーバーがあり、1つはマシン自体のローカルに、もう1つはリモートにあります。NSSを両方で機能させる必要があります(ローカルに必要なエントリがない場合は、リモートのNSSを使用します)。

現在、単一のライブラリー(PADL / nss_ldap)が2回ビルドされるように解決されました。どちらの場合も、ビルド前にソース内のsedすべてのnss_ldap出現箇所を別のものに変更するために使用されます。ケースごとに異なるテキストが使用されます(nss_ldap_1およびのようにnss_ldap_2)。ビルド結果はそれに応じて名前が変更されます。両方のバイナリはターゲットシステムに保存され、で参照され/etc/nsswitch.confます。

また、これらのライブラリはどちらも異なる構成ファイルを使用しています/etc/(そうしないと、意味がありません!)。ただし、これはconfigureビルド前に実行されるライブラリのスクリプトで引数を変更するだけで簡単に実行できます。

しかし、それは「正しく感じる」わけではありません。他のアプローチはありますか?

私が想像できることは、NSSライブラリ自体が複数の構成をサポートできるため、2つの「単一インスタンス」として機能するということです。ただし、ライブラリの作成者でない場合、これを達成するのは困難です。また、両方の構成でライブラリーを後で呼び出す必要がありますが、その間に他のライブラリーが必要になる場合があります。

もう1つのアプローチは、構成が異なる他のライブラリを呼び出すだけの単純なフォワーダーを作成することです。ただし、この場合も、他のライブラリが何らかの形で再構成可能である必要があります(/etcフォワーダーでいくつかの固定構成ファイルを使用する場合は、最初のバージョンと同じように機能します)。また、1回だけ機能します。ライブラリを3回以上使用すると、フォワーダー自体で同じ問題が再発します。


驚いたことに、同じ構成ファイルから読み取ろうとしないのでしょうか。または、設定ファイル名も変更しましたか?
derobert

1
使用してみsssませんか?
ステファンChazelas

@StéphaneChazelassssdは、1つの信頼できるLDAPシステムで動作するように設計されていると思います。このLDAPシステムは、通信するすべてのLDAPサーバーが同じデータを持つようにします。OPは、異なるデータを持つ複数のサーバーと、server1に対するルックアップとserver2に対する他のルックアップを必要とするようです。
デロベルト

@derobert、いや、sssdは複数の独立したプロバイダーと連携する必要があります。
ステファンChazelas

2
一方、適切な資格情報のキャッシュや構成の柔軟性の向上など、他のいくつかの問題を解決する場合があります。
ステファンChazelas

回答:


4

残念ながら、GNU libcのNSS実装ではこれを行うことはできません。基本的な問題に気付いたので、別の角度から説明しnsswitch.confます。構文ではNSSサービスモジュールに追加情報を提供できないため、繰り返し呼び出しを行っても動作が異なる可能性があります。そのため、libc側からもモジュール側からもサポートされていません。さらに、glibcは、サービスモジュールを直接リンク可能な共有オブジェクトに維持することに重点を置いています。これにより、リンクの手口が排除されます。

代わりにできることは、2つのLDAPディレクトリからメタディレクトリを作成し、それをNSS構成で使用することです。OpenLDAPはこれをうまくサポートしていslapd-meta(5)ます。たとえば、マニュアルページまたはこのマージの紹介を参照してください。もちろんslapd、2つのいずれかを構成できる場合は、このための新しいインスタンスは必要ありません。

(可能であればnss-ldap使用する代わりにnss-ldapd。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.