Configurando OpenLDAP 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:
sudo yum install openldap-servers openldap-clients
Copie o arquivo modelo slapd.conf
para /etc/openldap
e altere:
# sudo cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
# sudo 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
O 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
:
# sudo 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
:
sudo rm -rf /etc/openldap/slapd.d/*
Copie o arquivo /usr/share/openldap-servers/DB_CONFIG.example
para /var/lib/ldap/DB_CONFIG
:
sudo 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
:
sudo 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
:
sudo chown ldap.ldap -Rf /etc/openldap/slapd.d/*
sudo chown ldap.ldap -Rf /var/lib/ldap/*
Para finalizar, inicie o servidor OpenLDAP:
sudo service slapd start
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:
# sudo 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
:
sudo 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 =
sudo ldapsearch -x -b "dc=dominio,dc=com,dc=br" "(objectclass=inetOrgPerson)"
Operador or
sudo ldapsearch -x -b "dc=dominio,dc=com,dc=br" "(uid=10)" or "(cn=gustavo)"
Operador &
sudo 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:
# sudo 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.