OpenLDAP
Ir para navegação
Ir para pesquisar
Objetivo
Instalação de OpenLDAP em servidores Linux Ubuntu.
Requisitos
- Ubuntu Server
- Openssl
Procedimentos
Instalação
- Instalação do daemon do OpenLDAP (slapd):
# apt-get install slapd
- Instalação das ferramentas do OpenLDAP (ldapadd,ldapsearch, ldapmodify, etc):
# apt-get install ldap-utils
- Instalação das ferramentas para DB Berkeley:
# apt-get install db4.5-util
Configuração
- Copie os esquemas do Qmail-LDAP e freeRADIUS no diretório /etc/ldap/schema.
- Edite o arquivo de configuração do slapd /etc/ldap/slapd.conf.
- Acrescente os esquemas LDAP para o Qmail-LDAP e freeRADIUS:
include /etc/ldap/schema/qmail.schema include /etc/ldap/schema/radius.schema
- Defina o nível de log do slapd (veja em slapd.conf(5) sobre outras opções):
loglevel 256
O nível 256 permite gerar informações de conexões, operações e resultados. O valor padrão é 8, que gera penas informações de conexão. - Defina a base do diretório no banco de dados:
suffix "dc=usp,dc=br"
Esta base define o início da estrutura de diretório do seu banco de dados. - Defina o superusuário do banco de dados (rootdn):
rootdn "cn=admin,dc=usp,dc=br"
- Defina as indexações das entradas do seu banco de dados (para otimização em busca na estrutura do diretório):
index objectClass eq index uid eq index mail eq,sub index mailAlternateAddress eq,sub index mailForwardingAddress eq,sub
Os valores eq e sub definem a forma da indexação e da busca: eq busca o valor exato enquanto sub busca partes do valor. - Defina que os acessos aos atributos por parte dos usuários (a ordem em que aparecem no arquivo de configuração é importante):
access to attrs=userPassword by dn="cn=admin,dc=usp,dc=br" write by anonymous auth by self write by * none
Permite o acesso ao atributo userPassword na seguinte ordem:
- O rootdn tem permissão de escrita (write);
- Em uma conexão sem identificação (anonymous) exige-se a autenticação (auth);
- Em uma conexão identificada self é permitido a escrita;
- E os demais não tem nenhuma permissão.
access to attrs=mailForwardingAddress,deliveryMode,mailReplyText by dn="cn=admin,dc=usp,dc=br" write by anonymous read by self write by * none
Permite o acesso aos atributos mailForwardingAddress, deliveryMode e mailReplyText na seguinte ordem:
- O rootdn tem permissão de escrita;
- Em uma conexão sem identificação é permitido ler (read);
- Em uma conexão identificada é permitido a escrita;
- Os demais não tem nenhuma permissão.
access to * by dn="cn=admin,dc=usp,dc=br" write by * read
Permite que o acesso aos demais atributos na seguinte ordem:
- O rootdn tem permissão de escrita.
- Os demais tem permissão de leitura.
Criando o banco de dados
O banco de dados do OpenLDAP fica localizado no diretório do sistema /var/lib/ldap/ com permissões ao usuário e grupo openldap.
- Pare o processo do daemon:
# /etc/init.d/slapd stop
- Remova os arquivos do diretório /var/lib/ldap:
# rm /var/lib/ldap/*
- Gere uma senha em SSHA para o superusuário (rootdn):
# slappasswd
Uma senha criptografada em SSHA é gerada (SSHA}senha_criptografada). - Crie o arquivo
- /tmp/init.ldif com o seguinte conteúdo:
- dn: define um distinguish name que identifica unicamente uma entrada na árvore do diretório.
- objectClass: define a classe do objeto utilizado definido em algum esquema.
- atributo: define o atributo da classe de objeto utilizado e seu respectivo valor.
- a criação da árvore inicial dc=usp,dc=br;
- a criação do superusuário cn=admin,dc=usp,dc=br com a senha gerada no passo anterior ({SSHA}senha_criptografada);
- a criação da organização para conter os usuários do freeRADIUS (ou=radius,dc=usp,dc=br);
- a criação da organização para conter os domínios do qmailLDAP (ou=qmail,dc=usp,dc=br);
- a criação da organização para conter os usuários do domínio do qmailLDAP (ou=sc.usp.br,ou=qmail,dc=usp,dc=br).
- Crie o dirétório:
# slapadd -l /tmp/init.ldif
- Verifique se a árvore foi criada corretamente:
# slapcat
- Altere as permissões dos arquivos do diretório /var/lib/ldap:
# chown openldap:openldap /var/lib/ldap/*
- Inicialize o daemon slapd:
# /etc/init.d/slapd start
dn: dc=usp,dc=br objectClass: dcObject objectClass: organization dc: usp o: usp dn: cn=admin,dc=usp,dc=br objectClass: dcObject objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin dc: usp description: LDAP administrator userPassword: {SSHA}senha_criptografada dn: ou=radius,dc=usp,dc=br objectClass: dcObject objectClass: organizationalUnit ou: radius dc: usp description: Usuarios do radius dn: ou=qmail,dc=usp,dc=br objectClass: dcObject objectClass: organizationalUnit ou: qmail dc: usp description: Usuarios do qmail dn: ou=sc.usp.br,ou=qmail,dc=usp,dc=br objectClass: organizationalUnit ou: sc.usp.br ou: qmail description: Dominio sc.usp.br
onde:
Para informações sobre os atributos, verifique nos esquemas utilizados na configuração.
Este arquivo permite:
Trabalhando com o banco de dados
Inserindo dados
- Crie o arquivo /tmp/usuario.ldif para inserção da entrada uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br que define a conta test para o Qmail-LDAP:
dn: uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br objectClass: inetOrgPerson objectClass: qmailUser ou: sc.usp.br cn: Conta de Teste sn: test uid: test mail: test@sc.usp.br qmailUID: 509 qmailGID: 509 accountStatus: active qmailDotMode: both userPassword: {CRYPT}senha_criptografada mailHost: hermes.cisc.usp.br mailQuotaSize: 125829120 mailQuotaCount: 0 homeDirectory: /var/qmail/maildirs/sc.usp.br/J/test/ mailMessageStore: /var/qmail/maildirs/sc.usp.br/J/test/Maildir/
Cada entrada tem que ter um único dn em toda árvore do diretório. - Insira o usuário no banco de dados:
# ldapadd -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/usuario.ldif
- Crie o arquivo /tmp/raidus.ldiff para inserção da entrada uid=test,ou=radius,dc=usp,dc=br que define a conta test para o freeRADIUS:
dn: uid=test,ou=radius,dc=usp,dc=br objectClass: inetOrgPerson objectClass: radiusprofile ou: radius uid: test cn: Conta de Teste sn: test userPassword: {CRYPT}AJLSPco3rZRDg radiusAuthType: ldap radiusExpiration: Jan 01 2008 radiusSimultaneousUse: 1
- Insira o usuário no banco de dados:
# ldapadd -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/radius.ldif
Verificando os atributos
- Para verificar os dados de uma entrada específica como superusuário, digite:
# ldapsearch -x -W -D "cn=admin,dc=usp,dc=br" -b "uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br"
- Para verificar todos os dados de um ramo da árvore como superusuário, digite:
# ldapsearch -x -W -D "cn=admin,dc=usp,dc=br" -b "ou=sc.usp.br,ou=qmail,dc=usp,dc=br"
- Para verificar os atributos específicos de uma entrada como superusuário, digite:
# ldapsearch -x -W -D "cn=admin,dc=usp,dc=br" -b "uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br" mail cn
- Para verificar os atributos específicos de uma entrada específica como superusuário, digite:
# ldapsearch -x -W -D "cn=admin,dc=usp,dc=br" -b "uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br" ('uid=test') mail cn
- Para verificar os dados de uma entrada específica como anônimo, digite:
# ldapsearch -x -b "uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br"
- Para verificar os dados de uma entrada específica, mas como dono da entrada, digite:
# ldapsearch -x -W -D "uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br" -b "uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br"
Modificando atributos
- Crie o arquivo /tmp/modificar.ldif para modificar um atributo de uma entrada existente:
dn: uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br changetype: modify replace: cn cn: Conta de teste de email -
onde:
- dn: define a entrada da árvore;
- changetype: define a ação a ser realizada;
- replace: define que atributo irá ser modificado;
- atributo: define o atributo e o valor a ser modificado.
- -: delimita a ação.
- Modifique o atributo:
# ldapmodify -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/modificar.ldif
- Crie o arquivo /tmp/adicionar.ldif para adicionar um novo atributo a uma entrada existente:
dn: uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br changetype: modify add: mailQuotaCount mailQuotaCount: 1000 -
onde:
- dn: define a entrada da árvore;
- changetype: define a ação a ser realizada;
- add: define que atributo irá ser adicionado;
- atributo: define o atributo e o valor a ser modificado.
- -: delimita a ação.
- Adicione o atributo:
# ldapmodify -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/adicionar.ldif
- Crie o arquivo /tmp/remover.ldif para remover um atributo em uma entrada existente:
dn: uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br changetype: modify delete: mailQuotaSize -
onde:
- dn: define a entrada da árvore;
- changetype: define a ação a ser realizada;
- delete: define que atributo irá ser removido;
- atributo: define o atributo e o valor a ser modificado.
- -: delimita a ação.
- Remova o atributo:
# ldapmodify -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/remover.ldif
- As modificações de uma entrada existente (modificar, criar e remover) podem ser feitas em um único arquivo LDIF:
dn: uid=test,ou=sc.usp.br,ou=qmail,dc=usp,dc=br changetype: modify replace: cn cn: Conta de teste de email - add: mailQuotaCount mailQuotaCount: 1000 - delete: mailQuotaSize -
Backupeando os dados
- Para fazer o backup completo da árvore do diretório e salvar no arquivo /tmp/backup.ldif, digite:
# slapcat > /tmp/backup.ldif