Compreender o PAM e o NSS

19

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.

Citando:

NSS allows administrators to specify a list of sources where authentication files, host names and other information will be stored and searched for

e

PAM is a set of libraries that provide a configurable authentication platform for applications and the underlying operating system

O que não entendo é como o PAM e o NSS funcionam e interagem juntos. Em este livro a arquitetura é explicada muito bem: configuro o PAM para usar pam_ldap para contas LDAP e pam_unix para contas locais, configurei nsswitch.conf para buscar informações de arquivos locais e LDAP.

Se eu entendi corretamente, o LDAP é usado duas vezes: primeiro por pam_ldap e, em seguida, pelo NSS, que é chamado de pam_unix . Isso esta certo? O LDAP é realmente usado duas vezes? Mas por que preciso configurar tanto o NSS quanto 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 somente PAM, como li em esta página .

Então eu experimentei um pouco e tentei primeiro 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). Então eu reativei o LDAP no NSS e o deletei da configuração do PAM (desta vez tudo funcionou bem, como se pam_ldap fosse 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.

UPDATE

Eu apenas tentei algo agora. Eu removi novamente todas as entradas pam_ldap em todos os campos de configuração pam e também removi shadow: ldap de nsswitch.conf . Como agora em todo o sistema, existem apenas as linhas: passwd: ldap files e group: ldap files in 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.

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

    
por ColOfAbRiX 12.09.2013 / 15:27

2 respostas

24

Isso ajuda a quebrar as coisas assim na sua cabeça:

  • NSS - Um sistema baseado em módulos 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 se limita a) passwd , group , shadow (isso é importante notar) e hosts . As pesquisas de UID usam o banco de dados passwd e as pesquisas de GID usam o banco de dados group .

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

A diferença importante é que o PAM não faz nada sozinho. Se um aplicativo não se vincular à biblioteca PAM e fizer chamadas para ele, o PAM nunca será usado. O NSS é fundamental 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 curva: enquanto pam_ldap é a maneira popular de autenticar contra o LDAP, não é a maneira somente .

  • Se shadow estiver apontando para o serviço ldap em /etc/nsswitch.conf , qualquer autenticação executada no banco de dados shadow terá êxito se os atributos para esses mapeamentos de campos de sombra (particularmente o campo de senha criptografada) estiverem presentes no LDAP e permitirem entrar.
    • Isso, por sua vez, significa que pam_unix.so pode resultar em autenticação contra o LDAP, pois ele é autenticado no banco de dados shadow. (que é gerenciado pelo NSS e pode estar apontando para o LDAP)
  • Se um módulo PAM executar chamadas em um daemon que, por sua vez, consulta o banco de dados LDAP (digamos, pam_sss.so , que engancha sssd ), é possível que o LDAP seja referenciado.
por 12.09.2013 / 21:30
1

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

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

Então eles fazem coisas diferentes. O NSS obtém informações, o PAM determina quem pode fazer o que uma vez essa informação é obtida.

    
por 12.09.2013 / 16:42