OpenLDAP

De Infraestrutura São Carlos
Ir para navegação Ir para pesquisar

Objetivo

Instalação de OpenLDAP em servidores Linux Ubuntu.

Requisitos

  • Ubuntu Server
  • Openssl

Procedimentos

Instalação

  1. Instalação do daemon do OpenLDAP (slapd):
    # apt-get install slapd
    
  2. Instalação das ferramentas do OpenLDAP (ldapadd,ldapsearch, ldapmodify, etc):
    # apt-get install ldap-utils
    
  3. Instalação das ferramentas para DB Berkeley:
    # apt-get install db4.5-util
    

Configuração

  1. Copie os esquemas do Qmail-LDAP e freeRADIUS no diretório /etc/ldap/schema.
  2. Edite o arquivo de configuração do slapd /etc/ldap/slapd.conf.
  3. Acrescente os esquemas LDAP para o Qmail-LDAP e freeRADIUS:
    include         /etc/ldap/schema/qmail.schema
    include         /etc/ldap/schema/radius.schema
    
  4. 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.
  5. 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.
  6. Defina o superusuário do banco de dados (rootdn):
    rootdn          "cn=admin,dc=usp,dc=br"
    
  7. 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.
  8. 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.

  1. Pare o processo do daemon:
    # /etc/init.d/slapd stop
    
  2. Remova os arquivos do diretório /var/lib/ldap:
    # rm /var/lib/ldap/*
    
  3. Gere uma senha em SSHA para o superusuário (rootdn):
    # slappasswd 
    
    Uma senha criptografada em SSHA é gerada (SSHA}senha_criptografada).
  4. Crie o arquivo
  5. /tmp/init.ldif
  6. com o seguinte conteúdo:
    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:

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

    Para informações sobre os atributos, verifique nos esquemas utilizados na configuração.

    Este arquivo permite:

    • 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).
  7. Crie o dirétório:
    # slapadd -l /tmp/init.ldif
    
  8. Verifique se a árvore foi criada corretamente:
    # slapcat
    
  9. Altere as permissões dos arquivos do diretório /var/lib/ldap:
    # chown openldap:openldap /var/lib/ldap/*
    
  10. Inicialize o daemon slapd:
    # /etc/init.d/slapd start
    

Trabalhando com o banco de dados

Inserindo dados

  1. 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.
  2. Insira o usuário no banco de dados:
    # ldapadd -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/usuario.ldif
    
  3. 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
    
  4. 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

  1. 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"
    
  2. 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"
    
  3. 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
    
  4. 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
    
  5. 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"
    
  6. 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

  1. 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.
  2. Modifique o atributo:
    # ldapmodify -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/modificar.ldif
    
  3. 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.
  4. Adicione o atributo:
    # ldapmodify -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/adicionar.ldif
    
  5. 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.
  6. Remova o atributo:
    # ldapmodify -x -W -D "cn=admin,dc=usp,dc=br" -f /tmp/remover.ldif
    
  7. 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

  1. Para fazer o backup completo da árvore do diretório e salvar no arquivo /tmp/backup.ldif, digite:
    # slapcat > /tmp/backup.ldif
    

Referências