PAM

O PAM (Pluggable Authentication Modules) é o serviço responsável por realizar a autenticação de usuários nos ambientes Linux/Unix. Através do PAM e de suas bibliotecas, é possível configurar um esquema de autenticação segura para qualquer aplicação de forma transparente.

O pacote libpam-ldap é o plugin do LDAP para o PAM, ou seja, ele é que permitirá ao PAM autenticar usuários armazenados no diretório LDAP. O PAM apenas realiza a autenticação dos usuários que foram reconhecidos durante a pesquisa do NSS, ou seja, é necessário instalar e configurar o módulo libnss-ldap antes do libpam-ldap para que a autenticação dos usuários do diretório LDAP seja efetuada.

Procedimento 3.3. Instalação

Procedimento 3.4. Configuração

O processo de configuração do pacote libpam-ldap deve iniciar automaticamente após a instalação. Caso ele tenha sido instalado automaticamente junto com o libnss-ldap, sua configuração será realizada após a primeira. A seguir explicaremos esse processo para cada tela apresentada. O processo pode ser repetido a qualquer momento, utilizando o seguinte comando:

usuario@cliente:~$ sudo dpkg-reconfigure libpam-ldap
  1. Digite o endereço do servidor LDAP.

  2. Digite a raiz (ou base) do diretório LDAP.

  3. Configure para a versão 3 do protocolo LDAP.

  4. Selecione não para essa opção também.

  5. Configure a base de dados para que ela não precise de autenticação.

  6. Na próxima tela vamos configurar o algoritmo utilizado para criptografar as senhas nos casos em que um algoritmo não for explicitamente especificado.

  7. Apenas mantenha a opção padrão (crypt) e confirme.

  8. Precisamos agora alterar os arquivos /etc/pam.d/common-account, /etc/pam.d/common-auth e /etc/pam.d/common-password. Os exemplo abaixo ilustram esses arquivos com as alterações necessárias para que o PAM utilize os usuários do diretório para autenticação do sistema:

    Listagem do arquivo /etc/pam.d/common-account:

    Exemplo 3.2. Arquivo /etc/pam.d/common-account

    #
    # /etc/pam.d/common-account - authorization settings common to all
    # services
    # This file is included from other service-specific PAM config files,
    # and should contain a list of the authorization modules that define
    # the central access policy for use on the system.  The default is to
    # only deny service to users whose accounts are expired in /etc/shadow.
    #
    account sufficient      pam_ldap.so
    account required        pam_unix.so
    

    Listagem do arquivo /etc/pam.d/common-account:

    Exemplo 3.3. Arquivo /etc/pam.d/common-auth

    #
    # /etc/pam.d/common-auth - authentication settings common to all
    # services
    # This file is included from other service-specific PAM config files,
    # and should contain a list of the authentication modules that define
    # the central authentication scheme for use on the system
    # (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
    # traditional Unix authentication mechanisms.
    #
    auth    sufficient      pam_ldap.so
    auth    required        pam_unix.so nullok_secure use_first_pass
    

    Nota

    A opção use_first_pass utilizada na última linha do arquivo /etc/pam.d/common-auth evita que o usuário digite a senha duas vezes durante a autenticação.

    Listagem do arquivo /etc/pam.d/common-account:

    Exemplo 3.4. Arquivo /etc/pam.d/common-password

    #
    # /etc/pam.d/common-password - password-related modules common to all
    # services
    # This file is included from other service-specific PAM config files,
    # and should contain a list of modules that define  the services to be
    # used to change user passwords.  The default is pam_unix
    
    # The "nullok" option allows users to change an empty password, else
    # empty passwords are treated as locked accounts.
    #
    # (Add `md5' after the module name to enable MD5 passwords)
    #
    # The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
    # login.defs. Also the "min" and "max" options enforce the length of the
    # new password.
    
    password   sufficient pam_ldap.so
    password   required   pam_unix.so nullok obscure min=4 max=8 md5
    
    # Alternate strength checking for password. Note that this
    # requires the libpam-cracklib package to be installed.
    # You will need to comment out the password line above and
    # uncomment the next two in order to use this.
    # (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')
    #
    # password required       pam_cracklib.so retry=3 minlen=6 difok=3
    # password required       pam_unix.so use_authtok nullok md5
    
  9. O PAM precisará se comunicar com o servidor LDAP através de TLS para garantir a segurança dos dados transmitidos, nos casos em que ele for instalado em uma máquina diferente da que está rodando o serviço slapd. Para isso, precisamos descomentar a seguinte linha no arquivo /etc/pam_ldap.conf:

    …
    ssl start_tls
    …
    

    Também será necessário ter um arquivo /etc/ldap/ldap.conf com o seguinte conteúdo:

    Exemplo 3.5. Arquivo de configuração /etc/ldap/ldap.conf

    ####################### /etc/ldap/ldap.conf #######################
    # Arquivo de configuração para os clientes do diretório LDAP.
    
    # See ldap.conf(5) for details
    # This file should be world readable but not world writable.
    
    BASE    dc=ime,dc=usp,dc=br
    URI     ldap://ldapserver.ime.usp.br
    
    TLS_CACERT      /etc/ssl/certs/ssl-cert-ldapserver.pem
    

    Cuidado

    Este arquivo deve ter as permissões ajustadas para 644.

    O certificado do servidor (caso ele seja do tipo auto-assinado) ou o da CA que o certificou deve ser colocado no diretório /etc/ssl/certs e sua permissão de acesso deve ser ajustada para 644 também. Altere o valor do parâmetro TLS_CACERT de acordo com o nome do arquivo do certificado.