Comprendi PAM e NSS


21

Negli ultimi giorni ho installato un sistema Linux con autenticazione LDAP e tutto funziona bene, ma c'è ancora qualcosa che non riesco davvero a capire riguardo a NSS e PAM, anche dopo molte ricerche.

citando:

NSS consente agli amministratori di specificare un elenco di fonti in cui verranno archiviati e cercati file di autenticazione, nomi host e altre informazioni

e

PAM è un insieme di librerie che forniscono una piattaforma di autenticazione configurabile per le applicazioni e il sistema operativo sottostante

Quello che non capisco è come PAM e NSS lavorano e interagiscono insieme. In questo libro l'architettura è spiegata abbastanza bene: configuro PAM per l'utilizzo pam_ldapper account LDAP e pam_unixper account locali, quindi configuro nsswitch.confper recuperare informazioni da file locali e LDAP.

Se ho capito bene LDAP è usato due volte: prima da pam_ldape poi da NSS, che è a sua volta chiamato pam_unix. È giusto? LDAP è davvero usato due volte? Ma perché devo configurare sia NSS che PAM? La mia spiegazione è che PAM svolge compiti diversi rispetto a NSS ed è utilizzato da altri programmi. Ma, quindi, dovrebbe essere possibile utilizzare solo NSS o solo PAM, come ho letto in questa pagina .

Quindi ho sperimentato un po 'e ho prima provato a eliminare LDAP dal nsswitch.conf(e l'autenticazione ha smesso di funzionare come se solo pam_ldap non fosse abbastanza per fare il lavoro). Quindi ho riabilitato LDAP in NSS e l'ho eliminato dalla configurazione PAM (questa volta tutto ha funzionato bene, come se pam_ldapfosse inutile e NSS è sufficiente per autenticare un utente).

C'è qualcuno che può aiutarmi a chiarire questo? Molte grazie in anticipo.

AGGIORNARE

Ho appena provato qualcosa adesso. Ho rimosso di nuovo tutte le pam_ldapvoci in tutti i campi di configurazione pam e ho anche rimosso shadow: ldapda nsswitch.conf. Come ora in tutto il sistema ci sono solo le linee: passwd: ldap filese group: ldap filesdentro nsswitch.conf. Bene ... il login con gli utenti LDAP funziona perfettamente, quelle due righe (più /etc/ldap.conf) sono sufficienti per configurare l'autenticazione LDAP.

Dalla mia conoscenza, PAM è indipendente da NSS, ma i miei test hanno dimostrato che non lo è. Quindi mi chiedo: è possibile disabilitare completamente NSS e usare solo PAM?


Non ho visto il tuo aggiornamento. Esegui i seguenti comandi e segnala i risultati, sostituendo LDAPUSER con l'utente che ritieni sia configurato solo in LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B,

Risposte:


25

Aiuta a scomporre le cose in questo modo nella tua testa:

  • NSS - Un sistema basato su modulo per controllare il modo in cui i vari database a livello di sistema operativo sono assemblati in memoria. Questo include (ma non è limitato a) passwd, group, shadow(questo è importante per nota), e hosts. Le ricerche UID utilizzano il passwddatabase e le ricerche GID utilizzano il groupdatabase.

  • PAM : un sistema basato su moduli per consentire l'autenticazione e la contabilità basate sui servizi. A differenza di NSS, non si stanno estendendo database esistenti; Moduli PAM possono usare qualsiasi logica che vogliono, sebbene accedere alla shell ancora dipendono dalle passwde groupdatabase di NSS. (hai sempre bisogno di ricerche UID / GID)

La differenza importante è che PAM non fa nulla da solo. Se un'applicazione non si collega alla libreria PAM e non effettua chiamate, PAM non verrà mai utilizzata. NSS è fondamentale per il sistema operativo e i database sono abbastanza onnipresenti per il normale funzionamento del sistema operativo.

Ora che lo abbiamo rimosso, ecco la palla curva: mentre pam_ldap è il modo popolare per autenticarsi contro LDAP, non è l' unico modo.

  • Se shadowpunta al servizio ldap all'interno /etc/nsswitch.conf, qualsiasi autenticazione eseguita sul database shadow avrà esito positivo se gli attributi per quei mapping dei campi ombra (in particolare il campo password crittografato) sono presenti in LDAP e consentirebbero l'accesso.
    • Questo a sua volta significa che pam_unix.sopuò potenzialmente comportare l'autenticazione con LDAP, poiché esegue l'autenticazione con il database shadow. (che è gestito da NSS e potrebbe puntare a LDAP)
  • Se un modulo PAM esegue chiamate contro un demone che a sua volta interroga il database LDAP (diciamo pam_sss.so, quali hook sssd), è possibile che venga fatto riferimento a LDAP.

Molte grazie, so che nsswitch.conf + pam_unix può fare tutto il lavoro da solo. Ma anche PAM dovrebbe essere in grado di fare lo stesso, perché è indipendente, come hai scritto anche tu. La mia comprensione è che il modulo pam_ldap dovrebbe essere sufficiente per autenticare l'utente su un server LDAP. No?
ColOfAbRiX

6
Autenticare sì, ma a meno che tu non abbia un altro modo per ottenere informazioni sull'utente (local / etc / passwd o altro) hai ancora bisogno di un modo per scoprire l'appartenenza al gruppo, la home directory ecc. Stai ancora confondendo l'autenticazione e l'autenticazione / enumerazione degli attributi.
TheFiddler vince il

1
@ColOfAbRiX TheFIddlerWins è corretto. È sufficiente eseguire l' autenticazione , ma è ancora necessario un modo per cercare UID + iscrizioni GID, come ho notato. Questi sono ottenuti dal database passwde group(NSS), il che significa che devono trovarsi sul sistema locale ( /etc/passwd+ /etc/group) o ottenuti tramite il ldapmodulo NSS.
Andrew B,

3
Ecco un modo per aiutarti a capire: esegui getent passwde getent groupcon LDAP abilitato per entrambi i database in /etc/nsswitch.conf. Quindi disabilitare LDAP in quel file ed eseguire nuovamente entrambi i comandi. getentè un comando per il dumping di database NSS.
Andrew B,

Finalmente sono riuscito a capire tutto con un po 'più di lavoro. Grazie ragazzi!
ColOfAbRiX il

1

NSS è lì per elencare informazioni su servizi / utenti (a quale gruppo appartieni, dove si trova la tua home directory ecc.). PAM determina cosa fare in merito a tali informazioni.

Se si desidera utilizzare LDAP per l' autenticazione, è necessario pam_ldap. Se stai usando qualcos'altro (account locali, Kerberos ecc.), Non puoi.

Quindi fanno cose diverse. NSS ottiene informazioni, PAM determina chi è autorizzato a fare cosa una volta ottenute tali informazioni.


Grazie, ma il problema è che non funziona in questo modo, almeno nel mio sistema :) All'inizio ho capito lo stesso ma poi ho provato a rimuovere tutte le voci pam_ldap nell'autenticazione PAM e LDAP funzionava ancora (e disabilitato la cache). Ciò ha aumentato la mia confusione :)
ColOfAbRiX

Come stai verificando l'autenticazione tramite pam_ldap dopo averlo rimosso? Pubblica i contenuti del tuo common-auth per favore. Non sono sicuro dei percorsi in SUSE ma in risposta alla prima parte della tua terza domanda, anche con pam_ldap funzionante hai bisogno di un modo per il sistema di sapere chi sei - questo è fornito da NSS
TheFiddlerWins

Mi dispiace, intendo che dopo aver rimosso pam_ldap, l'autenticazione LDAP ha funzionato senza di essa, immagino che abbia funzionato tramite NSS. Il file common-authconteneva solo pam_env, pam_unix e pam_deny.
ColOfAbRiX

Non ha senso, come hai confermato l'autenticazione LDAP?
TheFiddler vince il

Accedere utilizzando un account LDAP e monitorare il registro dei server LDAP. nscd (memorizzazione nella cache) è disabilitato
ColOfAbRiX
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.