Introdução

Lightweight Directory Access Protocol (LDAP) é um protocolo padrão projetado para gerenciar e acessar informações de diretório hierárquico através de uma rede. Ele pode ser usado para armazenar qualquer tipo de informação, embora seja usado com freqüência como um sistema de autenticação centralizado ou para diretórios corporativos de e-mail e telefone.

Neste guia, vamos discutir como instalar e configurar o servidor OpenLDAP no Ubuntu 16.04. Em seguida, instalaremos phpLDAPadmin, uma interface web para visualizar e manipular informações LDAP. Nós protegeremos a interface da web e o serviço LDAP com certificados SSL da Let’s Encrypt, um provedor de certificados gratuitos e automatizados.

Pré-requisitos

Antes de iniciar este tutorial, você deve ter um servidor Ubuntu 16.04 configurado com Apache e PHP.

Além disso, uma vez que vamos inserir senhas na interface da web, devemos proteger o Apache com criptografia SSL.

Etapa 1 – Instalando e Configurando o Servidor LDAP

Nosso primeiro passo é instalar o servidor LDAP e alguns utilitários associados. Felizmente, os pacotes que precisamos estão todos disponíveis nos repositórios padrão do Ubuntu.

Faça login no seu servidor. Uma vez que esta é a nossa primeira vez usando o apt-get nesta sessão, atualizaremos nosso índice de pacotes locais e, em seguida, instalaremos os pacotes que queremos:

$ sudo apt-get update

$ sudo apt-get install slapd ldap-utils

Durante a instalação, você será solicitado a selecionar e confirmar uma senha de administrador para o LDAP. Você pode inserir qualquer coisa aqui, porque você terá a oportunidade de atualizá-la em apenas um momento.

Mesmo que acabemos de instalar o pacote, vamos avançar e reconfigurá-lo. O pacote slapd tem a capacidade de fazer muitas perguntas de configuração importantes, mas, por padrão, elas são ignoradas no processo de instalação. Nós ganhamos acesso a todos os prompts dizendo ao nosso sistema para reconfigurar o pacote:

$ sudo dpkg-reconfigure slapd

Existem algumas perguntas novas a serem respondidas neste processo. Aceitaremos a maioria dos padrões. Passemos pelas perguntas:

  • Omitir a configuração do servidor OpenLDAP? Não
  • Nome de domínio DNS?
    • Esta opção determinará a estrutura básica do seu caminho de diretório. Leia a mensagem para entender exatamente como isso será implementado. Você pode selecionar o valor que quiser, mesmo se você não possui o domínio real. No entanto, este tutorial assume que você possui um nome de domínio apropriado para o servidor, então você deve usar isso. Usaremos o example.com ao longo do tutorial.
  • Nome da organização?
    • Para este guia, usaremos o exemplo como o nome da nossa organização. Você pode escolher qualquer coisa que você considere apropriada.
  • Senha de administrador? Digite uma senha segura duas vezes
  • Backend do banco de dados? MDB
  • Remover o banco de dados quando o slapd é purgado? Não
  • Mover banco de dados antigo? sim
  • Permitir o protocolo LDAPv2? Não

Neste ponto, seu servidor LDAP está configurado e em execução. Abra a porta LDAP no seu firewall para que os clientes externos possam se conectar:

  • Sudo ufw permitir ldap

Vamos testar nossa conexão LDAP com ldapwhoami , que deve retornar o nome de usuário que estamos conectados como:

  • Ldapwhoami -H ldap: // -x
Saída
  anônimo

anonymous é o resultado que esperamos, já que nós ldapwhoami executado sem fazer logon no servidor LDAP. Isso significa que o servidor está sendo executado e está respondendo as consultas. Em seguida, configuraremos uma interface web para gerenciar dados LDAP.

Etapa 2 – Instalando e Configurando a Interface da Web phpLDAPadmin

Embora seja muito possível administrar o LDAP através da linha de comando, a maioria dos usuários achará mais fácil usar uma interface web. Vamos instalar o phpLDAPadmin, um aplicativo PHP que fornece essa funcionalidade.

Os depósitos do Ubuntu contêm um pacote phpLDAPadmin. Você pode instalá-lo com apt-get :

  • Sudo apt-get install phpldapadmin

Isso irá instalar o aplicativo, ativar as configurações necessárias do Apache e recarregar o Apache.

O servidor web agora está configurado para atender o aplicativo, mas precisamos fazer algumas alterações adicionais. Precisamos configurar phpLDAPadmin para usar nosso domínio e não preencher automaticamente as informações de login do LDAP.

Comece abrindo o arquivo de configuração principal com privilégios de root no seu editor de texto:

  • Sudo nano /etc/phpldapadmin/config.php

Procure a linha que começa com $servers->setValue('server','name' . Em nano você pode procurar uma string digitando CTRL-W , então a string, então ENTER . Seu cursor será colocado no correto linha.

Esta linha é um nome de exibição para o servidor LDAP, que a interface da web usa para cabeçalhos e mensagens sobre o servidor. Escolha qualquer coisa apropriada aqui:

/etc/phpldapadmin/config.php
$servers->setValue('server','name',' Example LDAP ');

Em seguida, mova para baixo para a linha $servers->setValue('server','base' line. Esta configuração diz a phpLDAPadmin qual a raiz da hierarquia LDAP. Isso é baseado no valor que escrevemos ao reconfigurar o pacote slapd . Nosso exemplo selecionamos example.com e precisamos traduzir isso para sintaxe LDAP colocando cada componente de domínio (tudo não um ponto) em uma dc= notação:

/etc/phpldapadmin/config.php
$servers->setValue('server','base', array(' dc=example,dc=com '));

Agora, encontre a linha de configuração login bind_id e comente-a com um # no início da linha:

/etc/phpldapadmin/config.php
# $servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

Esta opção prepaplica os detalhes de login do administrador na interface da web. Esta é a informação que não devemos compartilhar se a nossa página phpLDAPadmin for acessível ao público.

A última coisa que precisamos ajustar é uma configuração que controla a visibilidade de algumas mensagens de aviso do phpLDAPadmin. Por padrão, o aplicativo mostrará algumas mensagens de aviso sobre arquivos de modelo. Estes não têm impacto sobre o uso atual do software. Podemos escondê-los procurando o parâmetro hide_template_warning , descomentando a linha que o contém e configurando-o como verdadeira :

/etc/phpldapadmin/config.php
$config->custom->appearance['hide_template_warning'] = true ;

Esta é a última coisa que precisamos ajustar. Salve e feche o arquivo para finalizar. Não precisamos reiniciar nada para que as mudanças entrem em vigor.

Em seguida, entraremos no phpLDAPadmin.

Passo 3 – Iniciar sessão na interface web phpLDAPadmin

Tendo feito as mudanças de configuração necessárias para phpLDAPadmin, agora podemos começar a usá-lo. Navegue até o aplicativo em seu navegador. Certifique-se de substituir o seu domínio pela área destacada abaixo:

https:// example.com /phpldapadmin

A página de destino phpLDAPadmin será carregada. Clique no link de login no menu à esquerda na página. Um formulário de login será apresentado:

Página de Login do phpLDAPadmin

DN do Login é o nome de usuário que você usará. Ele contém o nome da conta como uma seção cn=e o nome de domínio que você selecionou para o servidor quebrado em dc= seções como descrito em etapas anteriores. A conta de administrador padrão que configuramos durante a instalação é chamada de administrador , então, para o nosso exemplo, digitaremos o seguinte:

cn=admin, dc=example,dc=com

Depois de inserir a string apropriada para o seu domínio, digite a senha de administrador criada durante a configuração e clique no botão Autenticar .

Você será levado para a interface principal:

PhpLDAPadmin página principal

Neste ponto, você está logado na interface phpLDAPadmin. Você tem a capacidade de adicionar usuários, unidades organizacionais, grupos e relacionamentos.

LDAP é flexível em como você pode estruturar suas hierarquias de dados e diretórios. Você pode criar qualquer tipo de estrutura que você gostaria e também criar regras sobre como elas interagem.

Essas etapas funcionarão bem nesta instalação do phpLDAPadmin, então siga para obter alguma prática trabalhando com a interface e aprendendo a estruturar seus dados.

Agora que iniciamos sessão e nos familiarizamos com a interface web, vamos aproveitar um momento para fornecer mais segurança ao nosso servidor LDAP.

Etapa 4 – Configurando a Criptografia LDAP StartTLS

Embora tenhamos criptografado nossa interface web, os clientes LDAP externos ainda estão se conectando ao servidor e enviando informações em texto simples. Vamos usar nossos certificados Let’s Encrypt SSL para adicionar criptografia ao nosso servidor LDAP.

Copiando os Certificados de Criptografia da Let’s

Como o daemon slapd é executado como o openldap do usuário, e os certificados Let’s Encrypt só podem ser lidos pelo usuário root , precisaremos fazer alguns ajustes para permitir o acesso slapd aos certificados. Vamos criar um script curto que copiará os certificados para /etc/ssl/ , o diretório padrão do sistema para certificados SSL e chaves. A razão pela qual estamos fazendo um script para fazer isso, em vez de apenas entrar os comandos manualmente, é que precisamos repetir esse processo automaticamente sempre que os certificados Let’s Encrypt são renovados. Atualizaremos o trabalho certbot cron mais tarde para habilitar isso.

Primeiro, abra um novo arquivo de texto para o script shell:

$ sudo nano /usr/local/bin/renew.sh

Isso abrirá um arquivo de texto em branco. Cole no seguinte script. Certifique-se de atualizar a porção SITE= example.com para refletir onde os certificados Let’s Encrypt são armazenados. Você pode encontrar o valor correto listando o diretório de certificados com sudo ls /etc/letsencrypt/live .

 

/usr/local/bin/renew.sh
#!/bin/sh

SITE=example.com

# move to the correct let's encrypt directory
cd /etc/letsencrypt/live/$SITE

# copy the files
cp cert.pem /etc/ssl/certs/$SITE.cert.pem
cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem
cp privkey.pem /etc/ssl/private/$SITE.privkey.pem

# adjust permissions of the private key
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem

# restart slapd to load new certificates
systemctl restart slapd

Este script se move para o diretório de certificados Let’s Encrypt, copia arquivos para /etc/ssl e atualiza as permissões da chave privada para torná-lo legível pelo grupo ssl-cert do sistema. Ele também reinicia o slapd , o que garantirá que os novos certificados sejam carregados quando esse script for executado a partir do nosso trabalho cron de renovação certbot .

Salve e feche o arquivo, então faça-o executável:

$ sudo chmod u+x /usr/local/bin/renew.sh

Em seguida, execute o script com sudo :

$ sudo /usr/local/bin/renew.sh

Verifique se o script funcionou listando os novos arquivos em /etc/ssl :

$ sudo su -c ‘ls -al /etc/ssl/{certs,private}/example.com*’

O comando sudo acima é um pouco diferente do normal. su -c ' . . . '  parte envolve todo o comando ls em um shell de raiz antes de executá-lo. Se não fizéssemos isso, a expansão do nome de arquivo * curinga seria executada com as permissões do usuário não-sudo e falharia porque /etc/ssl/private não é legível pelo seu usuário.

ls imprimirá detalhes sobre os três arquivos. Verifique se a propriedade e as permissões são corretas:

Saída (Output)

-rw-r--r-- 1 root root     1793 May 31 13:58 /etc/ssl/certs/example.com.cert.pem
-rw-r--r-- 1 root root     3440 May 31 13:58 /etc/ssl/certs/example.com.fullchain.pem
-rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/example.com.privkey.pem

Em seguida, vamos automatizar isso com certbot .

Atualizando o Certbot Renewal Cron Job

Precisamos atualizar nosso trabalho do certbot cron para executar este script sempre que os certificados são atualizados:

$ sudo crontab -e

Você já deve ter uma linha certbot renew . Adicione a parte destacada abaixo:

crontab
15 3 * * * /usr/bin/certbot renew --quiet --renew-hook /usr/local/bin/renew.sh

Salve e feche o crontab. Agora, sempre que certbot renova os certificados, nosso script será executado para copiar os arquivos, ajustar as permissões e reiniciar o servidor slapd .

Configurando o slapd para oferecer conexões seguras

Precisamos adicionar o usuário openldap ao grupo ssl-cert para que slapd possa ler a chave privada:

$ sudo usermod -aG ssl-cert openldap

Reinicie slapd para que ele pegue o novo grupo:

$ sudo systemctl restart slapd

Finalmente, precisamos configurar o slapd para realmente usar esses certificados e chaves. Para fazer isso, colocamos todas as nossas mudanças de configuração em um arquivo LDIF – que significa formato de intercâmbio de dados LDAP – e, em seguida, carregamos as alterações em nosso servidor LDAP com o comando ldapmodify .

Abra um novo arquivo LDIF:

$ cd ~

$ nano ssl.ldif

Isso abrirá um arquivo em branco. Cole o seguinte no arquivo, atualizando os nomes dos arquivos para refletir seu domínio:

ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/example.com.fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/example.com.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/example.com.privkey.pem
Salve e feche o arquivo e, em seguida, aplique as alterações com ldapmodify :

$ sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif

Saída  (Output)
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Não precisamos recarregar o slapd para carregar os novos certificados, isso ocorreu automaticamente quando atualizamos a configuração com ldapmodify . Execute o comando ldapwhoami mais uma vez, para verificar. Desta vez, precisamos usar o nome do host apropriado e adicionar a opção -ZZ para forçar uma conexão segura:

  • ldapwhoami -H ldap://example.com -x -ZZ

Precisamos do nome de host completo ao usar uma conexão segura porque o cliente verificará se o nome do host corresponde ao nome do host no certificado. Isso evita ataques man-in-the-middle onde um invasor pode interceptar sua conexão e representar seu servidor.

O comando ldapwhoami deve retornar anonymous , sem erros. Nós criptografamos com sucesso nossa conexão LDAP.

Conclusão

Neste tutorial, instalamos e configuramos o servidor slown de OpenLDAP e a interface da web LDAP phpLDAPadmin. Também configuramos criptografia em ambos os servidores e atualizamos o certbotpara processar automaticamente o processo de renovação de certificado Vamos criptografar o slapd .

O sistema que configuramos é bastante flexível e você poderá projetar seu próprio esquema organizacional e gerenciar grupos de recursos à medida que suas necessidades exigem. Para obter mais informações sobre como gerenciar LDAP, incluindo mais ferramentas e técnicas de linha de comando.

Anúncios