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

8

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

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

Atualmente foi resolvido para que uma única biblioteca ( PADL / nss_ldap ) seja criada duas vezes. Em ambos os casos, antes de criar, sed é usado para alterar todas as ocorrências de nss_ldap nas origens para outra coisa. Para cada caso, um texto diferente é usado (como nss_ldap_1 e nss_ldap_2 ). O resultado da compilação é renomeado de acordo. Ambos os binários são armazenados no sistema de destino e referenciados em /etc/nsswitch.conf .

Além disso, ambas as bibliotecas usam arquivos de configuração diferentes em /etc/ (caso contrário, não faria sentido!). No entanto, isso é feito facilmente apenas alterando o argumento no script configure da biblioteca executada antes de construir.

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

O que eu posso imaginar é que a própria biblioteca do NSS poderia suportar múltiplas configurações para que funcionasse como duas "instâncias únicas". Mas isso é difícil de alcançar se você não for o autor da biblioteca. Também requer a invocação subseqüente da biblioteca para ambas as configurações, enquanto alguém 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 requer que outra biblioteca seja de alguma forma reconfigurável (se usar apenas alguns arquivos de configuração fixos em /etc , o encaminhador funcionará exatamente como a primeira versão). E também funciona apenas uma vez - para ter uma biblioteca usada três vezes ou mais, o mesmo problema retorna agora com o encaminhador em si.

    
por Adam Badura 19.05.2015 / 17:04

1 resposta

4

Infelizmente, você não pode fazer isso com a implementação do GNU libc no NSS. Você percebeu o problema fundamental, apenas deixe-me apresentá-lo de um ângulo diferente: a sintaxe nsswitch.conf 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, não é suportado pelo lado da libc nem pelo lado do módulo. Além disso, a glibc faz um ponto de manter os módulos de serviço diretamente objetos compartilhados vinculáveis, o que exclui qualquer truque de vinculação.

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

(E, em vez de nss-ldap use nss-ldapd , se puder.)

    
por 18.06.2015 / 16:45

Tags