NSS e PAM – Autenticando o sistema no LDAP

Em algumas situações não é o bastante autenticar apenas usuários de algum serviço instalado. Pode ser necessário autenticar todos os usuários do sistema em uma base LDAP. Para situações assim pode-se configurar o sistema de autenticação do Sistema Operacional para validar contas em uma base LDAP.

A autenticação de um usuário necessita de duas etapas:

Busca pelo nome de usuário e seu ID (uid); Autenticação propriamente dita, confrontando-se o par usuário/senha fornecido com o par armazenado.

A primeira etapa envolve o uso de bibliotecas NSS – Name Server Switches – que se encarregam de fazer a busca nas bases de usuários especificadas. O módulo “nss_ldap” permite que sistemas GNU/Linux façam a busca de usuários do sistema em bases OpenLDAP.

A segunda etapa é usada para aplicação de políticas relacionadas a autenticação (verificar se o diretório pessoal existe, por exemplo). Em sistemas GNU/Linux os módulos do PAM – Pluggable Authentication Modules – são responsáveis por essa etapa. O módulo “libpam_ldap” é o responsável pela integração do PAM com o OpenLDAP.

Ambas as etapas são realizadas por módulos permitindo que sistemas Gnu/Linux utilizem uma grande gama de serviços de armazenamento de usuários. São bastante usados sistemas baseados em Gerenciadores de Bancos de Dados (MySQL, por exemplo) e sistemas baseados em serviços de diretórios (OpenLDAP, por exemplo).

Na realidade o módulo “libpam_ldap” não é necessário para login, mas é fundamental para que ferramentas funcionem corretamente. É o caso do utilitário de troca de senhas. Outro bom motivo é que sem o uso do “libpam_ldap”, o método de criptografia a ser usado é obrigatoriamente o {CRYPT}, considerado por muitos como ultrapassado e passível de quebra em processadores contemporâneos.

Usando “libpam_ldap” pode-se usar os mecanismos de criptografia entendidos pelo sistema OpenLDAP. Veja em: http://www.debianplanet.org/node.php?id=1048

Praticamente todos os serviços que utilizem o sistema de autenticação interna do GNU/Linux podem se beneficiar do uso do OpenLDAP. A aplicação de políticas de restrição de usuários (uma regra baseada em horários, por exemplo) é geralmente realizada por módulos PAM.

Instalando e configurando o NSS - Name Server Switches

1. Para instalar o NSS execute o seguinte comando:

aptitude install libnss-ldap

2. Na tela de configuração preencha com o DN completo do seu usuário “admin”:

3. Na tela seguinte coloque a senha do usuário “admin”:

4. Altere o arquivo “/etc/nsswitch.conf” para que ele busque as informações de usuários e senhas na base OpenLDAP:

passwd: compat ldap
group:  compat ldap
shadow: compat ldap

OBSERVAÇÃO: Quando se instala o “libnss-ldap” usando o aptitude também é instalado o programa “nscd”. Este aplicativo funciona como um cache para autenticação, mantendo informações na memória. Apesar de sua função ser agilizar o processo de busca sua presença traz mais instabilidade do que algum possível benefício. Portanto sugerimos que ele seja removido. Sendo assim, “aptitude purge nscd”

5. Confira o arquivo “/etc/libnss-ldap.conf”, que já deve ter sido configurado pelo “debconf”, e confira se as seguintes diretivas estão corretas:

uri ldap://ldap__.kyapanel.com.br/
base dc=kyapanel,dc=com,dc=br
ldap_version 3

Se tudo estiver correto já deve ser possível listar o conteúdo do arquivo “passwd”, por exemplo e, ver as entradas da base OpenLDAP.

6. Liste o conteúdo do arquivo “/etc/passwd” com o comando abaixo:

getent passwd

Instalando e configurando o PAM - Pluggable Authentication Modules

1. Instale o libpam-ldap com o comando abaixo:

aptitude install libpam-ldap

2. A primeira tela de configuração pergunta se desejamos fazer o usuário “root local o administrados base. A resposta é sim:

3. A segunda tela pergunta se é necessária autenticação na base de dados para uma simples pesquisa? A resposta padrão é não:

4. Na terceira tela informe a conta do usuário administrador da base para eventuais trocas de senhas.

5. Na quarta e última tela devemos fornecer a senha do usuário “admin”

O PAM atua nos quatro estágios da autenticação: session, account, authentication e password. Como queremos que nossas alterações tenham efeito nos quatro estágios e para todos os programas que suportam PAM, precisamos fazer as alterações nos arquivos comuns a todos os aplicativos, ou seja: common-auth, common-account, common-session e common-password.

6. Edite o arquivo “/etc/pam.d/common-account” e adicione o suporte ao OpenLDAP. Deixe ele assim:

account sufficient      pam_ldap.so
account required        pam_unix.so

7. Edite o arquivo “/etc/pam.d/common-auth” para que seja suficiente a autenticação via base OpenLDAP. Deixe ele assim:

auth    sufficient      pam_ldap.so
auth    required        pam_unix.so nullok_secure

A opção “try_first_pass” tenta usar a mesma senha que o usuário já digitou em um módulo anterior, caso essa senha não tenha sido validada ele pede a senha do usuário novamente. Para obter maiores informações sugere-se a leitura da RFC86.0.

8. Edite o arquivo “/etc/pam.d/common-password” e adicione o suporte ao OpenLDAP. Deixe ele assim:

password required  pam_unix.so nullok obscure min=4 max=8 md5
password required  pam_ldap.so try_first_pass

9. Edite o arquivo “/etc/pam.d/common-session” e adicione o suporte ao OpenLDAP. Deixe ele assim:

session sufficient pam_ldap.so
session required pam_unix.so

10. Verifique as configurações do arquivo “/etc/pam_ldap.conf” para ter certeza de que o “debconf” as fez corretamente:

base dc=kyapanel,dc=com,dc=br
uri ldap://ldap__.kyapanel.com.br/
ldap_version 3
rootbinddn cn=admin,dc=kyapanel,dc=com,dc=br
pam_password crypt

Teste de funcionamento

Para testar a autenticação no sistema operacional basta abrir uma nova sessão ou executar uma conexão via “ssh” na própria máquina.

Entretanto é provável que, apesar de validar corretamente, o usuário não consiga ter acesso ao sistema. E se tiver será apresentado um erro. Algo como:

“Could not chdir to home directory /home/fulano1: No such file or directory”

Isso acontece porque o diretório “HOME” do usuário não existe:

Criar o diretório “home” do usuário manualmente. Algo como:

mkdir /home/fulano1
chown fulano1: /home/fulano1 -R

Finalmente faça uma tentativa de “login” no seu servidor utilizando o usuário “fulano1”.

Licença

Copyright 2007 Anahuac de Paula Gil e Francisco Kem Iti Saito

Permite-se distribuição, publicação e cópia literal da íntegra deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright, a URL oficial do documento e esta nota de permissão.

Permite-se também distribuição, publicação e cópia literal de seções individuais deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright e a nota de permissão acima, e que a URL oficial do documento seja preservada ou substituída pela URL oficial da seção individual.

openldap_basico/nss_pam.txt · Last modified: 2009/08/19 14:02 by anahuac
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki