Como usar a mesma biblioteca mais de uma vez no NSS (Name Service Switch)

8

Existe alguma solução genérica para usar uma única biblioteca NSS duas (ou mais) vezes?

No meu caso, tenho dois servidores LDAP, um local na própria máquina e um remoto. Preciso fazer o NSS funcionar com os dois (ele usa o remoto se o local não tiver entradas necessárias).

Atualmente, foi resolvido para que a biblioteca única ( PADL / nss_ldap ) seja compilada duas vezes. Nos dois casos, antes da construção sedé usada para alterar todas as nss_ldapocorrências nas fontes para outra coisa. Para cada caso, um texto diferente é usado (como nss_ldap_1e nss_ldap_2). O resultado da construção é renomeado de acordo. Ambos os binários são armazenados no sistema de destino e mencionados em /etc/nsswitch.conf.

As duas bibliotecas também usam arquivos de configuração diferentes /etc/(caso contrário, não faria sentido!). No entanto, isso é feito facilmente, apenas alterando o argumento no configurescript da biblioteca executado antes da compilação.

Mas não "parece certo". Existe alguma outra abordagem?

O que eu poderia imaginar é que a própria biblioteca NSS poderia suportar várias configurações para que funcionasse como duas "instâncias únicas". Mas isso é difícil de conseguir se você não for o autor da biblioteca. Também requer a invocação subsequente da biblioteca para ambas as configurações, enquanto um pode preferir ter alguma outra biblioteca no meio.

Outra abordagem seria escrever um encaminhador simples que apenas chame alguma outra biblioteca com configuração diferente. Mas isso novamente exige que outra biblioteca seja reconfigurável de alguma forma (se ela usar apenas alguns arquivos de configuração fixos no /etcencaminhador funcionará exatamente como a primeira versão). E também funciona apenas uma vez - para que uma biblioteca seja usada três vezes ou mais, o mesmo problema retorna agora com o próprio encaminhador.

Adam Badura
fonte
Uau, surpreso que funcionou - eles não tentam ler do mesmo arquivo de configuração? Ou você também mudou o nome do arquivo de configuração?
Derobert
1
Que tal usar sss?
Stéphane Chazelas
@ StéphaneChazelas Acho que o sssd se destina a trabalhar com um sistema LDAP autoritativo, onde todos os servidores LDAP com os quais ele fala têm os mesmos dados. O OP parece querer vários servidores com dados diferentes e algumas pesquisas contra o servidor1 e outras pesquisas contra o servidor2.
Derobert
@derobert, não, sssd deve funcionar com vários provedores independentes.
Stéphane Chazelas
2
Por outro lado, você pode descobrir que ele resolve algumas outras coisas, como armazenamento em cache de credenciais adequado e mais flexibilidade na configuração.
Stéphane Chazelas

Respostas:

4

Infelizmente, você não pode fazer isso com a implementação NSS do GNU libc. Você percebeu o problema fundamental, deixe-me apresentá-lo de um ângulo diferente: a nsswitch.confsintaxe não permite fornecer informações adicionais aos módulos de serviço do NSS; portanto, eles não poderiam se comportar de maneira diferente em invocações repetidas. Portanto, ele não é suportado pelo lado da libc nem pelo lado do módulo. Além disso, a glibc faz questão de manter os módulos de serviço vinculados diretamente aos objetos compartilhados, o que exclui qualquer truque de vinculação.

O que você pode fazer é criar um meta-diretório a partir dos seus dois diretórios LDAP e usá-lo na sua configuração do NSS. O OpenLDAP suporta isso muito bem, consulte a slapd-meta(5)página do manual ou esta introdução de mesclagem, por exemplo. É claro que você não precisa de uma nova slapdinstância para isso, se você pode configurar um dos dois.

(E, em vez de nss-ldapusar, nss-ldapdse puder.)

Ferenc Wágner
fonte