Aumentando a segurança

Antes de colocar o serviço de diretório em um ambiente de produção, é recomendável fazer alguns ajustes para garantir que as informações consultadas pelos clientes não sejam vistas por pessoas não-autorizadas.

Tendo em vista que na maioria das redes, os serviços que consultarão as informações contidas no diretório (como autenticação, por exemplo) não estarão necessariamente no mesmo servidor que contém o serviço de diretório, torna-se necessário lançar mão de recursos que permitam uma comunicação segura entre as máquinas.

Um desses recursos, disponibilizado pelo slapd, é o suporte a transações TLS (Transport Layer Security). O TLS é uma espécie de reimplementação do SSL, mais eficiente e segura, e por isso tem sido adotada na maioria dos serviços atualmente.

Para configurar o suporte a TLS no slapd, primeiro precisamos criar um certificado SSL, conforme descrito no Apêndice C, Gerando um certificado SSL auto-assinado. Com os arquivos do certificado devidamente gerados, vamos agora armazená-los no local correto segundo a distribuição Ubuntu.

  1. Copie o arquivo do certificado para o diretório /etc/ssl/certs, com o nome seguindo o mesmo padrão da distribuição:

    usuario@ldapserver:~$ sudo cp newreq.pem /etc/ssl/certs/ssl-cert-
    ldapserver.pem
    
  2. Copie o arquivo da chave privada sem senha para o diretório /etc/ssl/private, seguindo também esse padrão:

    usuario@ldapserver:~$ sudo cp openkey.pem /etc/ssl/private/ssl-ce
    rt-ldapserver.key
    

Cuidado

O arquivo contendo a chave privada do certificado que será usado pelo slapd precisa ser armazenado sem a senha de proteção, caso contrário o serviço poderá travar ao tentar iniciar automaticamente junto com o sistema operacional. Apenas utilize um arquivo protegido por senha se você quiser inicializar o serviço de diretório manualmente.

Agora precisamos ajustar as permissões adequadas para esses arquivos.

  1. Primeiro proteja o arquivo contendo a chave privada:

    usuario@ldapserver:~$ sudo chown root:ssl-cert /etc/ssl/private/s
    sl-cert-ldapserver.key
    usuario@ldapserver:~$ sudo chmod 640 /etc/ssl/private/ssl-cert-
    ldapserver.key
    
  2. Em seguida ajuste o acesso ao arquivo do certificado:

    usuario@ldapserver:~$ sudo chown root:root /etc/ssl/certs/ssl-cer
    t-ldapserver.pem
    usuario@ldapserver:~$ sudo chmod 644 /etc/ssl/certs/ssl-cert-
    ldapserver.pem
    

Agora precisamos alterar a seção de segurança do arquivo /etc/ldap/slapd.conf, para que ela fique dessa maneira:

…
# segurança
allow           bind_v2

TLSCACertificateFile    /etc/ssl/certs/ssl-cert-ldapserver.pem
TLSCertificateFile      /etc/ssl/certs/ssl-cert-ldapserver.pem
TLSCertificateKeyFile   /etc/ssl/private/ssl-cert-ldapserver.key
…

TLSCACertificateFile

O certificado que criamos é auto-assinado, por isso configuramos o parâmetro do certificado do CA (TLSCACertificateFile) com o mesmo arquivo que o parâmetro do certificado do servidor (TLSCertificateFile). Caso esteja usando um certificado assinado por uma CA ao invés de um certificado auto-assinado, ajuste o parâmetro TLSCACertificateFile para o certificado da CA responsável pela sua emissão, que deve estar contido no servidor.

Para que as alterações tenham efeito, é necessário reiniciar o serviço slapd:

usuario@ldapserver:~$ sudo /etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: running BDB recovery, slapd.

Se o serviço iniciar normalmente, é sinal de que tudo correu bem. Caso contrário, ocorreu algum erro na configuração ou nos arquivos do certificado. Verifique todos os passos novamente em caso de problemas.

Você pode agora testar se o certificado está funcionando corretamente. Execute o seguinte comando para realizar uma operação de busca com suporte a TLS no servidor LDAP:

usuario@ldapserver:~$ ldapsearch -x -b 'dc=ime,dc=usp,dc=br' -D 
"cn=admin,dc=ime,dc=usp,dc=br" '(objectclass=*)' -H
ldap://ldapserver.ime.usp.br -W -ZZ
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base dc=ime,dc=usp,dc=br with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# ime.usp.br
dn: dc=ime,dc=usp,dc=br
objectClass: domain
dc: ime

# admin, ime.usp.br
dn: cn=admin,dc=ime,dc=usp,dc=br
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: admin
description: Administrador do LDAP
userPassword:: e01ENX1YcjRpbE96UTRQQ09xM2FRMHFidWFRPT0=

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2