Как использовать одну и ту же библиотеку более одного раза в Name Service Switch (NSS)

8

Есть ли общее решение использовать одну библиотеку NSS два (или более) раза?

В моем случае у меня есть два сервера LDAP, один локальный на самой машине и один удаленный. Мне нужно, чтобы NSS работал с ними обоими (он использует удаленный, если локальный не имеет необходимых записей).

В настоящее время решено, что одна библиотека ( PADL / nss_ldap ) собирается дважды. В обоих случаях перед сборкой sedиспользуется для изменения всех nss_ldapвхождений в источниках на что-то другое. Для каждого случая используется другой текст (например, nss_ldap_1и nss_ldap_2). Результат сборки переименован соответственно. Оба двоичных файла хранятся в целевой системе и упоминаются в /etc/nsswitch.conf.

Также обе эти библиотеки используют разные конфигурационные файлы /etc/(иначе это не имело бы никакого смысла!). Однако это легко сделать, просто изменив аргумент в configureскрипте библиотеки, запущенной перед сборкой.

Но это не "чувствует себя хорошо". Есть ли другой подход?

Я мог бы представить, что сама библиотека NSS может поддерживать несколько конфигураций, чтобы она работала как два «единичных экземпляра». Но этого трудно достичь, если вы не являетесь автором библиотеки. Также это требует последующего вызова библиотеки для обеих конфигураций, в то время как можно предпочесть иметь какую-то другую библиотеку между ними.

Другой подход - написать простой сервер пересылки, который просто вызывает другую библиотеку с другой конфигурацией. Но это опять-таки требует, чтобы другая библиотека была каким-то образом реконфигурируемой (если она просто использует некоторые фиксированные конфигурационные файлы в /etcсервере пересылки, будет работать так же, как и в первой версии). И также это работает только один раз - если использовать библиотеку три раза или более, та же проблема возвращается теперь с самим форвардером.

Адам Бадура
источник
Вау, удивлен, что это сработало - они не пытаются читать из одного и того же файла конфигурации? Или вы также изменили имя файла конфигурации?
Дероберт
1
Как насчет использования sss?
Стефан Шазелас
@ StéphaneChazelas Я думаю, что sssd предназначен для работы с одной авторитетной системой LDAP, где все серверы LDAP, с которыми он работает, имеют одинаковые данные. OP, кажется, хочет, чтобы несколько серверов с разными данными, и некоторые поиски шли против server1 и другие поиски против server2.
Дероберт
@derobert, нет, sssd должен работать с несколькими независимыми провайдерами.
Стефан Шазелас
2
С другой стороны, вы можете обнаружить, что он решает несколько других вещей, таких как правильное кэширование учетных данных и большая гибкость в конфигурации.
Стефан Шазелас

Ответы:

4

К сожалению, вы не можете сделать это с NSS-реализацией GNU libc. Вы заметили фундаментальную проблему, просто позвольте мне представить ее под другим углом зрения: nsswitch.confсинтаксис не позволяет предоставлять какую-либо дополнительную информацию служебным модулям NSS, поэтому они в любом случае не могут вести себя по-разному при повторных вызовах. Так что это не поддерживается ни со стороны libc, ни со стороны модуля. Кроме того, Glibc делает точку сохранения модулей услуг непосредственно связываемый общие объектов, что исключает любую связывающую хитрость.

Вместо этого вы можете создать мета-каталог из двух ваших каталогов LDAP и использовать его в своей конфигурации NSS. OpenLDAP прекрасно это поддерживает, см ., Например, slapd-meta(5)страницу руководства или вступление к слиянию . Конечно, вам не нужен новый slapdэкземпляр для этого, если вы можете настроить любой из двух.

(И вместо того, чтобы nss-ldapиспользовать, nss-ldapdесли можете.)

Ференц Вагнер
источник