Come utilizzare la stessa libreria più di una volta in Name Service Switch (NSS)


8

Esiste una soluzione generica per utilizzare una singola libreria NSS due (o più) volte?

Nel mio caso ho due server LDAP, uno locale sulla macchina stessa e uno remoto. Ho bisogno di far funzionare NSS con entrambi (usa quello remoto se local non ha richiesto voci).

Attualmente è stato risolto in modo che la singola libreria ( PADL / nss_ldap ) sia costruita due volte. In entrambi i casi, prima della costruzione sedviene utilizzato per modificare tutte le nss_ldapoccorrenze nelle fonti in qualcos'altro. Per ogni caso viene utilizzato un testo diverso (come nss_ldap_1e nss_ldap_2). Il risultato della compilazione viene rinominato di conseguenza. Entrambi i binari sono memorizzati sul sistema di destinazione e indicati in /etc/nsswitch.conf.

Inoltre entrambe le librerie usano file di configurazione diversi /etc/(altrimenti non avrebbe alcun senso!). Questo, tuttavia, viene fatto facilmente cambiando l'argomento nello configurescript della libreria eseguita prima della creazione.

Ma non "si sente bene". C'è qualche altro approccio?

Quello che potrei immaginare è che la stessa libreria NSS potrebbe supportare più configurazioni in modo che funzioni come due "singole istanze". Ma questo è difficile da ottenere se non sei l'autore della biblioteca. Inoltre richiede il successivo richiamo della libreria per entrambe le configurazioni, mentre si potrebbe preferire avere un'altra libreria in mezzo.

Un altro approccio sarebbe quello di scrivere un semplice forwarder che chiama solo qualche altra libreria con diversa configurazione. Ma questo richiede di nuovo che altre librerie siano in qualche modo riconfigurabili (se utilizza solo alcuni file di configurazione fissi nel server d' /etcinoltro funzionerà proprio come la prima versione). E funziona anche solo una volta: avere una libreria utilizzata tre o più volte lo stesso problema ritorna ora con lo spedizioniere stesso.


Wow, sorpreso che abbia funzionato: non provano a leggere dallo stesso file di configurazione? O hai cambiato anche il nome del file di configurazione?
derobert,

1
Che ne dici di usare sss?
Stéphane Chazelas,

@ StéphaneChazelas Penso che sssd sia progettato per funzionare con un autorevole sistema LDAP, in cui tutti i server LDAP di cui parla hanno gli stessi dati. OP sembra voler più server con dati diversi e alcune ricerche vanno contro server1 e altre ricerche contro server2.
derobert,

@derobert, no, sssd dovrebbe funzionare con diversi provider indipendenti.
Stéphane Chazelas,

2
D'altra parte potresti scoprire che risolve alcune altre cose come la corretta memorizzazione nella cache delle credenziali e una maggiore flessibilità nella configurazione.
Stéphane Chazelas,

Risposte:


4

Sfortunatamente, non puoi farlo con l'implementazione NSS di GNU libc. Hai notato il problema fondamentale, fammelo presentare da una prospettiva diversa: la nsswitch.confsintassi non consente di fornire ulteriori informazioni ai moduli del servizio NSS, quindi non potrebbero comportarsi diversamente in caso di ripetute invocazioni. Quindi non è supportato dal lato libc né dal lato modulo. Inoltre, glibc punta a mantenere i moduli di servizio collegabili direttamente agli oggetti condivisi, il che esclude qualsiasi inganno di collegamento.

Quello che puoi fare invece è creare una meta directory dalle tue due directory LDAP e usarla nella tua configurazione NSS. OpenLDAP lo supporta perfettamente, vedere la slapd-meta(5)pagina di manuale o questa introduzione di fusione, ad esempio. Ovviamente non è necessaria una nuova slapdistanza per questo se è possibile configurare una delle due.

(E invece di nss-ldapusare nss-ldapdse puoi.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.