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_ldap
para contas LDAP e pam_unix
para contas locais, então eu configurar nsswitch.conf
para buscar informações de arquivos locais e LDAP.
Se entendi corretamente, o LDAP é usado duas vezes: primeiro pam_ldap
e 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_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.
ATUALIZAR
Eu apenas tentei algo agora. I removido novamente todas as pam_ldap
entradas em todos os campos de configuração do PAM e eu também ter removido shadow: ldap
a partir 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.
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?
fonte
getent shadow | grep LDAPUSER
grep LDAPUSER /etc/shadow
Respostas:
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), ehosts
. As pesquisas de UID usam opasswd
banco de dados e as pesquisas de GID usam ogroup
banco 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
passwd
egroup
do 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.
shadow
estiver 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.pam_unix.so
pode 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)pam_sss.so
, qual ganchosssd
), é possível que o LDAP seja referenciado.fonte
passwd
egroup
(NSS), o que significa que eles devem estar no sistema local (/etc/passwd
+/etc/group
) ou obtidos noldap
módulo NSS.getent passwd
egetent group
com 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.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.
fonte
common-auth
continha apenas pam_env, pam_unix e pam_deny.