LDAP significa Lightweight Directory Access Protocol (Protocolo Peso-leve de Acesso a Diretórios) e é uma versão simplificada do protocolo X500. A configuração de diretório nesta sessão será usada para autenticação. Apesar disso, um diretório LDAP pode ser usado de diversas formas: autenticação, compartilhamento de diretório (para clientes de email), em qualquer tipo de aplicações. LDAP é um padrão largamente utilizado.
Para descrever rapidamente um LDAP, todas as informações são guardadas em um árvore. Você deve determinar por si mesmo a arborescência do diretório (a Arvore de Informação de Diretório: o DIT, do inglês Directory Information Tree). Vamos começar com uma árvore básica com dois nodos acima da raiz:
Nó "Pessoas" onde seus usuários serão armazenados
Nó "Grupos" onde seus grupos serão armazenados
Você deve determinar primeiramente qual será a raizdo seu LDAP. Por padrão, sua árvore será determinada pelo seu domínio de internet. Se o seu domínio é example.com (nós iremos usar este nos exemplos) sua raiz será dc=example,dc=com.
Primeiramente instale o daemon do servidor ldap (slapd) no servidor; instale os seguintes pacotes: slapd
e ldap-utils
.
Entre seu domínio e a senha que você deseja para o administrados de diretório.
Apenas poucas mudanças serão feitas na configuração padrão. Primeiramente defina a senha do root no arquivo de configuração (ao invés de no diretório) editando o arquivo /etc/ldap/slapd.conf
.
Nunca use a senha como um texto limpo. Para gerar uma senha criptografada use, primeiro, slappasswd suasenha
$ slappasswd New password: Re-enter password: {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
Esse exemplo mostra o que acontece quando você usa a palavra "secret" com senha. (Pela natureza do esquema de encriptação SSHA, seu resultado pode variar.)
Agora edite /etc/ldap/slapd.conf
e copie e cole a palavra gerada.
# Make sure you edit or add these directives after the first 'database' directive. suffix "dc=example,dc=com" directory "/var/lib/ldap" rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
O diretório foi criado na instalação, agora é hora de populá-lo. Ele será populado com uma entrada "clássica" que será compatível com diretório (um diretório compartilhado, por exemplo), com contas clássicas (para uma aplicação web) e com contas Unix (posix).
O diretório LDAP pode ser preenchido com um arquivo ldif (ldif significa formato para intercâmbio de diretórios do ldap, do inglês ldap directory interchange format). Gere este arquivo exemplo de arquivo de texto init.ldif em qualquer lugar do seu sistema:
dn: dc=example,dc=com objectClass: dcObject objectClass: organizationalUnit dc: example ou: Example Dot Com dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups dn: uid=john,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 1000 gidNumber: 10000 userPassword: password gecos: John Doe loginShell: /bin/bash homeDirectory: /home/john shadowExpire: -1 shadowFlag: 0 shadowWarning: 7 shadowMin: 8 shadowMax: 999999 shadowLastChange: 10877 mail: john.doe@example.com postalCode: 31000 l: Toulouse o: Example mobile: +33 (0)6 xx xx xx xx homePhone: +33 (0)5 xx xx xx xx title: System Administrator postalAddress: initials: JD dn: cn=example,ou=groups,dc=example,dc=com objectClass: posixGroup cn: example gidNumber: 10000
No exemplo anterior a estrutura de diretórios, um usuário e um grupo foram configurados. Em outro exemplo você deve ver o objectClass: top adicionado em toda entrada mas este é o comportamento padrão, então você não precisa adicioná-los explicitamente.
Agora, adicione suas entradas ao LDAP:
pare o deamon LDAP: sudo /etc/init.d/slapd stop
apague o conteúdo que foi adicionado automaticamente na instalação: sudo rm -rf /var/lib/ldap/*
adicione o conteúdo sudo slapadd -l init.ldif
inicie o daemon LDAP: sudo /etc/init.d/slapd start
Nós podemos verificar que o conteúdo foi adicionado corretamente com as ferramentas do pacote ldap-utils
. Para executar uma busca em um diretório LDAP:
ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn dn: uid=john,ou=people,dc=example,dc=com cn: John Doe sn: Doe givenName: John
Apenas uma explicação rápida
-x é porque nós não usamos o método de autenticação SASL (por padrão)
-LLL desabilita impressão de informações LDIF
A autenticação requer acesso a um campo senha, que não deve ser acessível por padrão. Outra característica é que durante a troca de senha usando passwd, shadowLastChange precisa estar acessível. O código a seguir mostra um exemplo de configuração de uma Lista de Controle de Acesso (ACL, do inglês Access Control List) que permite acesso ao shadowLastChange:
access to attr=shadowLastChange by dn="cn=manager,dc=example,dc=com" write by self write by * read
O servico LDAP freqüentemente se torna, em pouco tempo, um serviço altamente crítico em um sistema de informação: tudo está dependendo do LDAP: autenticação, autorização, sistema de email, etc. É uma boa idéia configurar um sistema redundante. Isso é fácil de fazer e aqui está um rápido howto.
A replicação será aqui baseada em uma relação de mestre-escravo. Antes de implementar a replicação do LDAP considere os seguintes passos:
Pare o daemon slapd do servidor mestre
Reconfigure o slapd.conf do servidor mestre para habilitar replicação para o novo servidor escravo.
Exporte a base de dados do servidor mestre.
Configure o slapd.conf
do servidor de replica.
Importe a base de dados do servidor mestre para o servidor escravo.
Re/Inicie o processo slapd do servidor de réplica
Re/Inicie o processo slapd do servidor mestre.
Você deve lembrar que essas modificações devem ser SEMPRE feitas no servidor mestre. Se você modificar o escravo, elas serão perdidas.
No mestre você deve modificar a sessão base de dados (database) do arquivo /etc/ldap/slapd.conf
para adicionar uma instrução de réplica. O exemplo seguinte mostra uma réplica em ldap-2.example.com com o usuário Gerenciador com secret como senha. O arquivo de log de replicação é o lugar onde as modificações são guardadas antes de serem mandadas para o LDAP escravo.
replica uri=ldap://ldap-2.examplo.com:389 binddn="cn=Manager,dc=examplo,dc=com" bindmethod=simple credentials=secret replogfile /var/lib/ldap/replog
Exporte a base de dados do mestre usando slapcat. Então copie master.ldif para o escravo usando scp ou outras ferramentas.
usuario@mestrer:~$ sudo slapcat -l master.ldif
No escravo, você deve autorizar seu mestre para atualizar a base de dados LDAP. Adicione as seguintes linhas ao seu arquivo /etc/ldap/slapd.conf
, na sessão de base de dados (database):
updatedn cn=Manager,dc=examplo,dc=com updateref ldap://ldap-1.examplo.com
Importe o master.ldif
usando slapadd.
usuario@escravo:~$ sudo slapadd -c -l master.ldif
Reinicie o servidor mestre.
usuario@mestre:~$ sudo /etc/init.d/slapd start
Reinicie o servidor escravo.
usario@escravo:~$ sudo /etc/init.d/slapd start