Entenda o PAM e o NSS

21

Nos últimos dias, configurei um sistema Linux com autenticação LDAP e tudo funciona bem, mas ainda há algo que não consigo entender sobre o NSS e o PAM, também depois de muita pesquisa.

Citação:

O NSS permite que os administradores especifiquem uma lista de fontes onde os arquivos de autenticação, nomes de host e outras informações serão armazenados e pesquisados

e

PAM é um conjunto de bibliotecas que fornecem uma plataforma de autenticação configurável para aplicativos e o sistema operacional subjacente

O que não entendo é como o PAM e o NSS trabalham e interagem juntos. Em este livro a arquitetura é explicado muito bem: Eu configurar o PAM para utilização pam_ldappara contas LDAP e pam_unixpara contas locais, então eu configurar nsswitch.confpara buscar informações de arquivos locais e LDAP.

Se entendi corretamente, o LDAP é usado duas vezes: primeiro pam_ldape depois pelo NSS, que é chamado de pam_unix. Isso esta certo? O LDAP é realmente usado duas vezes? Mas por que preciso configurar o NSS e o PAM? Minha explicação é que o PAM executa tarefas diferentes do NSS e é usado por outros programas. Mas, então, deve ser possível usar apenas NSS ou apenas PAM, como li nesta página .

Então, experimentei um pouco e tentei excluir o LDAP do nsswitch.conf(e a autenticação parou para funcionar como se apenas o pam_ldap não fosse suficiente para fazer o trabalho). Em seguida, reativei o LDAP no NSS e o excluí da configuração do PAM (desta vez tudo funcionou bem, como se pam_ldapfosse inútil e o NSS fosse suficiente para autenticar um usuário).

Existe alguém que possa me ajudar a esclarecer isso? Muito obrigado antecipadamente.

ATUALIZAR

Eu apenas tentei algo agora. I removido novamente todas as pam_ldapentradas em todos os campos de configuração do PAM e eu também ter removido shadow: ldapa partir nsswitch.conf. Como agora em todo o sistema, existem apenas as linhas: passwd: ldap filese group: ldap filesin nsswitch.conf. Bem ... o login com usuários LDAP funciona perfeitamente, essas duas linhas (mais /etc/ldap.conf) são suficientes para configurar a autenticação LDAP.

Pelo meu conhecimento, o PAM é independente do NSS, mas meus testes mostraram que não. Então, pergunto-me: é possível desativar completamente o NSS e usar apenas o PAM?

ColOfAbRiX
fonte
Não vi sua atualização. Execute os seguintes comandos e relate suas descobertas, substituindo LDAPUSER pelo usuário que você acha que está configurado apenas no LDAP. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

Respostas:

25

Isso ajuda a dividir coisas assim em sua cabeça:

  • NSS - Um sistema baseado em módulo para controlar como vários bancos de dados no nível do sistema operacional são montados na memória. Isso inclui (mas não está limitado a) passwd, group, shadow(isto é importante para a nota), e hosts. As pesquisas de UID usam o passwdbanco de dados e as pesquisas de GID usam o groupbanco de dados.

  • PAM - Um sistema baseado em módulo para permitir autenticação e contabilidade baseada em serviço. Ao contrário do NSS, você não está estendendo os bancos de dados existentes; Os módulos PAM podem usar a lógica que quiserem, embora os logins do shell ainda dependam dos bancos de dados passwde groupdo NSS. (você sempre precisa de pesquisas UID / GID)

A diferença importante é que o PAM não faz nada por si só. Se um aplicativo não for vinculado à biblioteca do PAM e fizer chamadas, o PAM nunca será usado. O NSS é essencial para o sistema operacional e os bancos de dados são bastante onipresentes para a operação normal do sistema operacional.

Agora que temos isso fora do caminho, aqui está a bola curva: enquanto pam_ldap é a maneira popular de autenticar contra LDAP, não é a única maneira.

  • Se shadowestiver apontando para o serviço ldap /etc/nsswitch.conf, qualquer autenticação executada no banco de dados sombra terá êxito se os atributos desses mapeamentos de campos de sombra (principalmente o campo de senha criptografada) estiverem presentes no LDAP e permitirem o login.
    • Por sua vez, isso significa que pam_unix.sopode resultar potencialmente em autenticação no LDAP, pois ele é autenticado no banco de dados sombra. (que é gerenciado pelo NSS e pode estar apontando para LDAP)
  • Se um módulo PAM executa chamadas em um daemon que, por sua vez, consulta o banco de dados LDAP (por exemplo pam_sss.so, qual gancho sssd), é possível que o LDAP seja referenciado.
Andrew B
fonte
Muito obrigado, eu sei que o nsswitch.conf + pam_unix pode fazer todo o trabalho sozinho. Mas o PAM também deve poder fazer o mesmo, porque é independente, como você escreveu também. Meu entendimento é que o módulo pam_ldap deve ser suficiente para autenticar o usuário em um servidor ldap. Não é?
ColOfAbRiX 13/09
6
Autentique sim, mas, a menos que você tenha outra maneira de obter informações do usuário (local / etc / passwd ou o que for), ainda precisará encontrar uma maneira de descobrir a associação ao grupo, o diretório inicial, etc. Você ainda está confundindo autenticação e autorização / enumeração de atributos.
TheFiddlerWins
11
@ColOfAbRiX TheFIddlerWins está correto. É suficiente para autenticar , mas você ainda precisa de uma maneira de procurar associações de UIDs + GID, como observei. Eles são obtidos nos bancos de dados passwde group(NSS), o que significa que eles devem estar no sistema local ( /etc/passwd+ /etc/group) ou obtidos no ldapmódulo NSS.
Andrew B
3
Aqui está uma maneira de ajudar você a entender: execute getent passwde getent groupcom o LDAP ativado para os dois bancos de dados /etc/nsswitch.conf. Em seguida, desative o LDAP nesse arquivo e execute os dois comandos novamente. getenté um comando para despejar bancos de dados NSS.
Andrew B
Por fim, consegui entender tudo com um pouco mais de trabalho. Obrigado pessoal!
ColOfAbRiX
1

O NSS existe para enumerar informações sobre serviços / usuários (a que grupo você pertence, onde fica seu diretório pessoal, etc.). O PAM determina o que fazer com essas informações.

Se você quiser usar o LDAP para autenticação que você precisa pam_ldap. Se você estiver usando outra coisa (contas locais, Kerberos etc.), não poderá.

Então eles fazem coisas diferentes. O NSS obtém informações, o PAM determina quem tem permissão para fazer o que depois que essas informações são obtidas.

TheFiddlerWins
fonte
Obrigado, mas o problema é que não funciona dessa maneira, pelo menos no meu sistema :) No começo, eu entendi o mesmo, mas tentei remover todas as entradas pam_ldap na autenticação PAM e LDAP ainda funcionavam (e desativado o cache). Isso aumentou minha confusão :)
ColOfAbRiX
Como você está verificando se está se autenticando via pam_ldap após removê-lo? Publique o conteúdo de sua autenticação comum, por favor. Eu não estou certo sobre os caminhos no SUSE mas em resposta à primeira parte da sua terceira questão, mesmo com pam_ldap funcionando, você precisa de alguma maneira para o sistema de saber quem você é - este é fornecido pela NSS
TheFiddlerWins
Sinto muito, quero dizer que após remover o pam_ldap, a autenticação LDAP funcionou sem ele, acho que funcionou através do NSS. O arquivo common-authcontinha apenas pam_env, pam_unix e pam_deny.
ColOfAbRiX
Isso não faz sentido, como você confirmou que a autenticação LDAP funcionou?
TheFiddlerWins
Efetuando login usando uma conta LDAP e monitorando o log dos servidores ldap. O nscd (armazenamento em cache) está desativado
ColOfAbRiX