LDAP Logo

Configurando um servidor LDAP no CentOS 6.2

OpenLDAP é um software open source que implementa o protocolo LDAP (Lightweight Directory Access Protocol) e está disponível nos repositórios das principais distribuições Linux e BSD.
Seu uso mais comum é para autenticação de usuários em casos onde a informação precisa estar disponível em várias plataformas, aplicações de diferentes fornecedores necessitam de tais informações e os registros armazenados sofrem poucas alterações.

Vários softwares suportam o protocolo LDAP, tais como Apache, Subversion, Squid e é claro sistemas operacionais como Linux e Windows (Active Directory).
O objetivo aqui é mostrar o básico para configurar um servidor LDAP de forma rápida e simples no CentOS mas a idéia pode ser aproveitada em outras distros como Ubuntu ou Fedora.

Instalação e Configuração

Instale os pacotes necessários:

# yum install openldap-servers openldap-clients

Copie o modelo slapd.conf para /etc/openldap e altere:

# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
# vim /etc/openldap/slapd.conf
 
include          /etc/openldap/schema/core.schema
include          /etc/openldap/schema/inetorgperson.schema
include          /etc/openldap/schema/openldap.schema
 
allow bind_v2
 
pidfile           /var/run/openldap/slapd.pid
argsfile           /var/run/openldap/slapd.args
 
database config
access to *
               by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
               by * none
 
database monitor
access to *
               by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
               by dn.exact="cn=admin,dc=dominio,dc=com,dc=br" read
               by * none
 
database      bdb
suffix             "dc=dominio,dc=com,dc=br"
checkpoint   1024 15
rootdn          "cn=admin,dc=dominio,dc=com,dc=br"
rootpw          senha
 
directory        /var/lib/ldap
 
index objectClass                                    eq,pres
index ou,cn,mail,surname,givenname   eq,sub

rootdn tem permissão para adicionar ou remover qualquer informação na árvore de diretórios. rootpw pode conter a senha em plain text ou criptografada. Por medidas de segurança é aconselhável adicionar o hash gerado pelo comando slappasswd:

# slappasswd -s senha
{SSHA}m/SnFEf/S+S5jGjCof1Ltesi9noPBiXf

Apague a configuração padrão removendo tudo que está dentro do diretório /etc/openldap/slapd.d:

# rm -rf /etc/openldap/slapd.d/*

Copie o arquivo /usr/share/openldap-servers/DB_CONFIG.example para /var/lib/ldap/DB_CONFIG:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Execute o slapdtest para converter as configurações do arquivo slapd.conf (formato antigo) no formato mais recente onde as configurações ficam armazenadas no diretório slapd.d:

# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

Atribua as permissões dos arquivos de configuração ao usuário e grupo ldap:

# chown ldap.ldap -Rf /etc/openldap/slapd.d/*
# chown ldap.ldap -Rf /var/lib/ldap/*

Para finalizar, inicie o servidor OpenLDAP:

# service slapd start
Starting slapd:                                                        [  OK  ]

Agora o servidor OpenLDAP está configurado e funcionando escutando na porta padrão 389. Com isso é possível usar o rootdn e rootpw para criar e gerenciar a árvore de diretórios LDAP.

Criando diretórios

LDAP utiliza o padrão LDIF para gerenciamento de registros. LDIF é um formato de troca de dados em plain text para representar o conteúdo de diretório e requisições de atualização, transportando conteúdo de diretório como um conjunto de registros.
Crie um arquivo chamado primeiroregistro.ldif como abaixo:

# vim /etc/openldap/primeiroregistro.ldif
dn: dc=dominio,dc=com,dc=br
dc: dominio
objectClass: top
objectClass: domain
 
dn: cn=desenvolvedores,dc=dominio,dc=com,dc=br
objectClass: top
objectclass: groupOfNames
cn: desenvolvedores
member: cn=gustavo,cn=desenvolvedores,dc=dominio,dc=com,dc=br
 
dn: cn=gustavo,cn=desenvolvedores,dc=dominio,dc=com,dc=br
objectclass: top
objectclass: inetOrgPerson
cn: gustavo
sn: Gustavo
uid: 10
userpassword: senha

Agora execute o ldapadd para adicionar as entradas do arquivo primeiroregistro.ldif na base LDAP. Quando for solicitada a senha, informe o rootpw que está no arquivo slapd.conf:

# ldapadd -h localhost -a -W -x -D "cn=admin,dc=dominio,dc=com,dc=br" -f /etc/openldap/primeiroregistro.ldif

Nesse exemplo foi criada uma estrutura onde dominio.com.br é o topo da hierarquia, desenvolvedores é um grupo que está um nível abaixo e gustavo é uma pessoa pertencente ao grupo desenvolvedores. Também é possível criar outros diretórios no mesmo nível ou abaixo de desenvolvedores.
Lembrando que é sempre recomendado inserir no atributo userpassword o hash gerado pelo comando slappasswd ao invés de plain text.

Como podem ver, as três entradas no arquivo primeiroregistro.ldif possuem linhas em comum como dn e objectclass. O dn é a chave para identificar um diretório e objectclass especifica o schema utilizado. O LDAP possui vários schemas com um conjunto de atributos e alguns com dependências para outros schemas. No início do arquivo slapd.conf foram incluídos os schemas utilizados nesse exemplo. Um diretório pode ter mais de um schema e alguns atributos são de preenchimento obrigatório. Por exemplo, usando o inetOrgPerson os atributos cn e sn obrigatoriamente precisam conter algum valor, já uid e userpassword são opcionais, sequer precisam ser adicionados. É possível criar um schema com outros atributos mas isso já é um tópico mais avançado.

O arquivo primeiroregistro.ldif pode ser deletado pois não será mais utilizado.

Há ainda os comandos ldapdelete e ldapmodify com funcionamento semelhante. Mais detalhes em man ldapdelete e man ldapmodify.

Buscas com filtros

Operador =

# ldapsearch -x -b "dc=dominio,dc=com,dc=br" "(objectclass=inetOrgPerson)"

Operador or

# ldapsearch -x -b "dc=dominio,dc=com,dc=br" "(uid=10)" or "(cn=gustavo)"

Operador &

# ldapsearch -x -b "dc=dominio,dc=com,dc=br" "(&(uid=10)(cn=gustavo))"

Ferramentas para administração

Ao lidar com uma base de centenas de diretórios fica complicado, entediante e perigoso administrar uma árvore utilizando as ferramentas de linha de comando. Pensando nisso foram desenvolvidas ferramentas gráficas para esse tipo de trabalho. Das opções open source, duas me chamaram a atenção, o Apache Directory Studio e o phpLdapAdmin. A primeira é baseada na popular IDE Eclipse e me pareceu mais fácil e amigável e por isso vou mostrar como instalar no Fedora 16:

Faça o download em http://directory.apache.org/studio/download/download-linux.html. Descompacte em /opt/ApacheDirectoryStudio e crie um arquivo em /opt/ApacheDirectoryStudio/startup.sh com permissão de execução com o conteúdo abaixo:

# vim /opt/ApacheDirectoryStudio/startup.sh
export GDK_NATIVE_WINDOWS=1
/opt/ApacheDirectoryStudio/ApacheDirectoryStudio

Pronto!!! Execute /opt/ApacheDirectoryStudio/startup.sh para abrir o Apache Directory Studio.

Links

http://www.openldap.org/
http://www.tldp.org/HOWTO/LDAP-HOWTO/
http://migre.me/7Zeup
http://directory.apache.org/studio/download/download-linux.html