LDAP significa Lightweight Directory Access Protocol, é uma versão simplificada do protocolo X500. A configuração do directório nesta secção será usada para autenticação. Mesmo assim, um directório LDAP poderá ser usado de várias formas. Autenticação, partilha do directório (para clientes de mail), em todo o tipo de aplicações. LDAP é um standart vastamente utilizado.
Para descrever de forma breve um LDAP, todas as informações são guardadas num arvore. Terá de determinar por si próprio a Arvore de Directório de Informação: o DIT. Iremos começar com uma arvore básica com dois nós acima da raíz:
Nó "Pessoas" onde os utilizadores serão guardados
Nó "Grupos" onde os grupos serão guardados
Tem de primeiro determinar qual será a raíz do seu LDAP. Por defeito, a sua arvore será determinada pelo domínio de internet. Se o seu domínio +e exemplo.com (será usado no exemplo acima), a sua raíz será dc=exemplo,dc=com.
Antes de mais, instale o daemon do servidor ldap (slapd) no servidor: instale os seguintes pacotes:
slapd
e ldap-utils
.
Insira o seu domínio como requisitado e a palavra-passe que deseja para o directório de administrador.
Algumas pequenas mudanças serão opreradas na configuração por defeito. Primeiro defina a palavra-passe de root no ficheiro de configuração (em vez de ser no directório) editando o ficheiro /etc/ldap/slapd.conf
.
Contudo não use uma password com um texto "claro". Para gerar uma palavra-chave encriptada primeiro use slappasswd sua palavra-passe
$ slappasswd New password: Re-enter password: {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
Este exemplo mostra o que acontece quando se usa a string "secret" como palavra-passe. (Pela natureza da encriptação SSHA o resultado pode variar)
Agora edite o ficheiro /etc/ldap/slapd.conf
e copie para lá a string gerada.
# Certifique-se que edita ou adiciona estas directivas depois da primeira directiva 'database'. suffix "dc=example,dc=com" directory "/var/lib/ldap" rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
A directoria foi criado na instalação, agora é altura de popula-la. Será populada com uma entrada "clássica" que será compatível com a directoria (por exemplo com uma directoria partilhada), com contas clássicas (numa aplicação web) e com contas Unix (posix).
O directório LDAP pode ser "alimentado" com um ficheiro ldif (ldif significa ldap directory interchange format). Gere este ficheiro de texto exemplo init.ldif algures no 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 acima, a estrutura do directório, o utilizador e o grupo foram definidos. Noutro exemplo poderá ver a objectClass: adicionada no topo de cada entrada, mas este é um comportamento por defeito então não terá de adiciona-lo explicitamente.
Agora, adicione as suas entradas no LDAP:
parar o daemon LDAP: sudo /etc/init.d/slapd stop
apagar o conteúdo que foi automaticamente adicionado à instalação: sudo rm -rf /var/lib/ldap/*
adicionar o conteúdo sudo slapadd -l init.ldif
iniciar o daemon LDAP: sudo /etc/init.d/slapd start
Pode-se verificar o conteúdo que foi correctameten adicionado com ferramentas do pacote ldap-utils
. De forma a executar uma pesquisa na directoria 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
Uma pequena explicação:
-x é porque não é usada o motodo de autenticação SASL (por defeito)
-LLL para desactivar a informação de impressãp LDIF
Autenticação necessita de acesso ao campo da palavra-passe, que não deverá estar acessível por defeito. Outra questão é que durante a mudança de palavra-passe usando passwd shadowLastChange necessita de estar disponível também. O código a seguir mostra configurações ACL exemplo que permite acesso a shadowLastChange:
acesso a attr=shadowLastChange by dn="cn=manager,dc=example,dc=com" write by self write by * read
O serviço LDAP torna-se muitas vezes um serviço altamente crítico num sistema de informação: tudo está dependente do LDAP: autenticação, autorização, sistema de mail, etc. É uma boa ideia para definir um sistema redundante. É fácil de configurar, e aqui está um rápido howto.
A replicação será baseada numa relação principal-secundário. Antes de implementar a replicação LDAP considere os seguintes passos:
Pare o servidor principal do daemon slapd.
Reconfigurar o servidor principal em slapd.conf para activar replicação no novo servidor secundário.
Export the database of the master server.
Configurar o servidor replica slapd.conf
.
Importar a base de dados principal para o servidor secundário.
Reiniciar/iniciar o processo de replica do servidor slapd.
Reiniciar/iniciar o servidor principal slapd.
Terá que ter em mente que todas as modificações serão SEMPRE executadas no servidor principal. Se modificar o secundário, estas modificações perder-se-ão.
On the master, you have to modify the database section of the
/etc/ldap/slapd.conf
to add a replica instruction.
The following example shows a replica on ldap-2.example.com with the
Manager user with secret as password. The replication logfile is the place
modifications are stored before they are send to the LDAP slave.
replica uri=ldap://ldap-2.example.com:389 binddn="cn=Manager,dc=example,dc=com" bindmethod=simple credentials=secret replogfile /var/lib/ldap/replog
Export the database of the master using slapcat. Then copy master.ldif to the slave using scp or other tools.
user@master:~$ sudo slapcat -l master.ldif
On the slave, you have to authorize your master to update LDAP
database. Add the following lines to your /etc/ldap/slapd.conf
file in the database section:
updatedn cn=Manager,dc=exemplo,dc=com updateref ldap://ldap-1.exemplo.com
Importar o ficheiro master.ldif
usando slapadd
user@slave:~$ sudo slapadd -c -l master.ldif
Restart the master server.
user@master:~$ sudo /etc/init.d/slapd start
Reiniciar o servidor secundário.
user@slave:~$ sudo /etc/init.d/slapd start