Servidor OpenLDAP

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:

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.

Instalação

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

Populando o LDAP

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

A iniciar o ACL

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

Replicação LDAP

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:

  1. Pare o servidor principal do daemon slapd.

  2. Reconfigurar o servidor principal em slapd.conf para activar replicação no novo servidor secundário.

  3. Export the database of the master server.

  4. Configurar o servidor replica slapd.conf.

  5. Importar a base de dados principal para o servidor secundário.

  6. Reiniciar/iniciar o processo de replica do servidor slapd.

  7. 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.

LDAP Master

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

Secundário LDAP

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