GNU/Linux
 
 
OpenLDAP Server
(Open Lightweight Directory Access Protocol Server)

OpenLDAP Server é um servidor que oferece uma base de autênticação centralizada e customizada para leitura.



INSTALACÃO DO OPENLDAP SERVER E UTILITÁRIOS
# apt-get update ; apt-get install slapd ldap-utils (o pacote "slapd" é o "OpenLDAP Server" em si, ou seja, é o daemon junto com os arquivos de configuração. Já o "ldap-utils" é um conjunto de ferramentas usadas para ler, modificar e configurar o "OpenLDAP Server". Será asolicitada uma senha especifica para uso do administrador do OpenLDAP)
# dpkg-reconfigure slapd (ajuda o configurar os parâmentro do servidor LDAP via dialog. Veja a observação a seguir)

Obs: ao se instalar o OpenLDAP varias informacoes precisam ser passadas como: Omit OpenLDAP Server configuration (NO), o DNS Domain Name (nome do dominio - ex: matrinux.local), Organization Name (nome da organização - ex: MATRINUX - esse é o topo da árvore de diretórios do OpenLDAP - o=MATRINUX - no AD o top é o "dc" em vez do "o"), senha do usuário "admin", Database Backend (HDB), LDAP Version (3) etc. Caso se tenha necessidade de rever/refazer todas os telas/dialogs que aparecem depois de instalar o OpenLDAP, digite "dpkg-reconfigure slapd".


ARQUIVOS DE CONFIGURACAO
# vi /etc/ldap/ldap.conf (o “ldapsearch” só funcionará se esse arquivo for configurado corretamente. Caso contrário terá que informa a BASE "-b" no comando. O “ldapsearch -x” é um comando muito utilizado e será mostrado mais a frente. Ao alterar esse arquivo não há necessidade de restart/reload no daemon do OpenLDAP)
BASE dc=example,dc=com,dc=br (se deve colocar aqui o seu dominio. Ex: "BASE dc=matrix,dc=com,dc=br")
URI ldap://openldap_address/ (se deve colocar aqui o IP ou hostname desse servidor OpenLDAP. Ex: "URI ldap://192.168.1.2/")


PROCURAR OBJETOS (USUÁRIOS/GRUPOS/ETC) - TESTES INICIAIS
# ldapsearch -x (mostra todos os objetos do LDAP)
# ldapsearch -xLLL (idem, só que não mostra alguns comentários - essa opção é muito usada em scripts shell que não querem lixo)
# ldapsearch -xLLL -D cn=admin,dc=example,dc=com,dc=br -W (idem, especificando que o usuário "admin" deve autenticar)
# ldapsearch -xLLL -D cn=admin,dc=example,dc=com,dc=br -b dc=example,dc=com,dc=br -W (idem, só que especifica a base de procura. Isso também pode ser definido em "/etc/ldap/ldap.conf")
# ldapsearch -xLLL -D cn=admin,dc=example,dc=com,dc=br -b dc=example,dc=com,dc=br dn -W (idem, só que filtra o que será mostrado. Nesse caso vai mostrar somente os atributos "dn")
# ldapsearch -xLLL -D cn=admin,dc=example,dc=com,dc=br -b dc=example,dc=com,dc=br dn userPassword -W (idem, só que mostra também os atributos "userPassword". Esse atributo só será mostrado se for usado o usuário com direitos administrativos como o "admin")
# ldapsearch -xLLL -h Openldap_Address -D cn=admin,dc=example,dc=com,dc=br -b dc=example,dc=com,dc=br dn userPassword -W (idem, só especifica "-h" o endereço do servidor LDAP)
# ldapsearch -xLLL -H ldaps://Openldap_Address -D cn=admin,dc=example,dc=com,dc=br -b dc=example,dc=com,dc=br dn userPassword -W (idem, só que usa TLS/LDAPS "-H". O "-H" faz uso do URI, ou seja, usa o padrão "ldaps://", "ldap://" ou "ldapi://". Algo muito importante ao usar TLS/LDAPS é o "Openldap_Address" [endereço IP ou hostname do servidor LDAP] que deve ser o mesmo nome do "COMMON NAME" do certificado digital)
# ldapsearch -h 10.1.1.10 -xLLL -D cn=administrator,cn=users,dc=dominio,dc=com,dc=br -b dc=dominio,dc=com,dc=br [email protected] -w 'password' (uma consulta feita em um AD - Active Diretory MS-Windows 2008)
# ldapsearch -h 10.1.1.10 -xLLL -D [email protected] -b dc=dominio,dc=com,dc=br [email protected] -w 'password' (idem)
# ldapsearch -h 10.1.1.10 -xLLL -D uid=administrator,ou=users,dc=dominio,dc=com,dc=br -b dc=dominio,dc=com,dc=br [email protected] -w 'password' (idem)



CRIANDO E ADICIONANDO USUÁRIO
# mkdir /etc/ldap/objects (cria um diretorio onde serao armazenados os objetos (usuario, grupos, impressoras etc) do LDAP. Seria mais profissional criar esse diretorio em "/var", pois ele [e especifico para essa funcao)
# vi /etc/ldap/objects/account_name.ldif (geralmente para criar usuarios no OpenLDAP [e necess[ario criar um arquivo contendo todas as informacoes do mesmo. Esse arquivo por padrao tem a extensao ".ldif" que significa LDAP Data Interchange Format)
dn: cn=FULL NAME,dc=example,dc=com,dc=br
cn: FULL NAME
gidNumber: SPECIFIC "GROUP NUMBER" TO THIS USER
objectClass: top
objectClass: posixGroup
# ------------------------------------------
dn: uid=ACCOUNT_NAME,dc=example,dc=com,dc=br
uid: ACCOUNT_NAME
uidNumber: UNIQUE "USER NUMBER" TO THIS USER
gidNumber: SPECIFIC "GROUP NUMBER" TO THIS USER
cn: FULL NAME
sn: FULL NAME
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: organizationalPerson
objectClass: inetOrgPerson
mail: [email protected]
userPassword: PASSWORD
givenName: FULL NAME
loginShell: /bin/bash
homeDirectory: /home/ACCOUNT_NAME

Obs: O "FULL NAME" deve ser substituido pelo nome completo do usuario. O "ACCOUNT" pelo nome da conta do usuario. O "PASSWORD" pela senha. E o "UNIQUE NUMBER" por um numero decimal unico que nao pode esta sendo usuado por outro usuario (esse numero [e chamado de "UID"). Para mais detalhes "man ldif".

# ldapadd -x -D cn=admin,dc=example,dc=com,dc=br -W -f /etc/ldap/objects/account_name.ldif (sera solicitada a senha do administrador do OpenLDAP)


DELETANDO UM USUARIO
# ldapdelete -x -D cn=admin,dc=example,dc=com,dc=br -W cn=FULL NAME,dc=example,dc=com,dc=br
# ldapdelete -x -D cn=admin,dc=example,dc=com,dc=br -W uid=ACCOUNT_NAME,dc=example,dc=com,dc=br
Obs: para deletar um usuario [e necessario usar os dois comandos anterios, pois se tem que excluir o "cn" e o "uid".


MODIFICANDO A SENHA DE UM USUARIO
# ldappasswd -x -D cn=admin,dc=example,dc=com,dc=br -W -S uid=ACCOUNT_NAME,dc=example,dc=com,dc=br (sera solicitada a senha do administrador do OpenLDAP)


MODIFICANDO DADOS (ATRIBUTOS) DE UM USUARIO
# cp -i account_name.ldif account_name_mod01.ldif (se deve criar um arquivo especifico para as modificacoes. Como alguns dados que serao necessarios estao no arquivo de criacao da conta do usuario (account_name.ldif), [e interessante fazer uma copia do mesmo)
Obs: como est[a sendo realizada uma copia, apague todas as linhas do arquivo “account_name_mod01.ldif”, menos as que são as iniciadas com “dn: cn=” e “dn: uid”. Estas duas entradas tem a funcao de identificar o objeto (usuario).
----------------------------
MODIFICAR O “dn: cn”
# vi account_name_mod01.ldif
dn: cn=FULL NAME,dc=example,dc=com,dc=br
changetype: modrdn
newrdn: cn=FULL NAME
deleteoldrdn: 1
# ldapmodify -x -D cn=admin,dc=example,dc=com,dc=br -W -f /etc/ldap/objects/account_name_mod01.ldif
----------------------------
MODIFICAR O “dn: uid” e “uid”
# vi account_name_mod01.ldif (criar um novo arquivo específico para modificações)
dn: uid=account_name,dc=example,dc=com,dc=br
changetype: modrdn
newrdn: uid=admin_master
deleteoldrdn: 1
# ldapmodify -x -D cn=admin,dc=example,dc=com,dc=br -W -f /etc/ldap/objects/account_name_mod01.ldif
----------------------------
MODIFICAR O “cn“, “sn“, “givenName“, “mail“ etc
# vi account_name_mod01.ldif (criar um novo arquivo específico para modificações)
dn: uid=account_name,dc=example,dc=com,dc=br (caso o procedimento anterior tenha sido feito essa linha deve ficar assim: “uid=admin_master,dc=example,dc=com,dc=br”)
changetype: modify
replace: cn
cn: FULL NAME
-
replace: sn
sn: FULL NAME
-
replace: givenName
givenName: FULL NAME
# ldapmodify -x -D cn=admin,dc=example,dc=com,dc=br -W -f /etc/ldap/objects/account_name_mod01.ldif

----------------------------
DELETAR O ATRIBUTO “passwordExpirationTime“
# vi account_name_mod01.ldif (criar um novo arquivo específico para modificações)
dn: uid=account_name,dc=example,dc=com,dc=br (caso o procedimento anterior tenha sido feito essa linha deve ficar assim: “uid=admin_master,dc=example,dc=com,dc=br”)
changetype: modify
delete: passwordExpirationTime
passwordExpirationTime: 19920102000000Z
# ldapmodify -x -D cn=admin,dc=example,dc=com,dc=br -W -f /etc/ldap/objects/account_name_mod01.ldif



COMANDOS UTEIS (&=AND - !=NOT - |=OR)
# ldapsearch -x (lista todos os objetos do OpenLDAP)
# slapcat (idem)
# slapindex ([e usado para regenerar indices do slapd baseado no conteudo atual da database)
# ldapsearch -h localhost -W -D cn=admin,dc=example,dc=com,dc=br -b dc=example,dc=com,dc=br -x (&(|(objectClass=posixAccount))(uid=aadministracao)([email protected]))
# ldapsearch -x -H ldap://localhost -b dc=example,dc=com,dc=br '(&(|(objectClass=posixAccount)(objectClass=zarafa-contact))(|(uid=jo)(cn=jo)))'
# ldapsearch -h 10.1.1.5 -D o=matrix '(loginTime<=20110620000000Z)' | grep ^mail (filtra a saída pelo o último login menor ou igual que a data '20110620000000Z'. Também usa um "grep" para filtrar a saída somente para os que tiverem no início a palavra "mail". Contudo, é melhor usar o comando a seguir, pois o filtro "mail" é usado no próprio "ldapsearch. Com isso evita trazer tudo e jogar para o "grep" filtrar)
# ldapsearch -h 10.1.1.5 -D o=matrix -LLL '(&(loginTime<=20110620000000Z)(mail=*))' mail (idem, só que melhor, pois o próprio ldap filtra)
# ldapsearch -h 10.1.1.5 -D o=matrix -LLL '(&(loginTime<=20110620000000Z)(mail=*))' mail uid (idem só que traz também o "uid")
# ldapsearch -h 10.1.1.5 -D o=matrix -LLL '(mail=*)' mail uid fullname (filtra todas os registro que tenha algo no atributo mail (mail=*) e mostra somente os atributos 'mail',' uid' e 'fullname')
# ldapsearch -h 10.1.1.5 -D o=matrix -LLL '([email protected])' mail uid fullname (filtra todas os registro que tenha no atributo mail "[email protected] e mostra somente os atributos 'mail',' uid' e 'fullname')
Obs: http://www.centos.org/docs/5/html/CDS/ag/8.0/Finding_Directory_Entries-LDAP_Search_Filters.html
# openldap -c slapindex ()


SIZE LIMIT
# vi /etc/ldap/slapd.conf
sizelimit X (MUITO IMPORTANTE QUANDO SE TEM MUITAS CONTAS DE USUÁRIO. AO SE FAZER OPERAÇÕES DE PESQUISA, A OPÇÃO “sizelimit” DEFINE O NÚMERO DE ENTRADAS QUE PODERÃO SER VISUALIZADAS/RETORNADAS. CASO O LIMITE SEJA INFERIOR AO NÚMERO DE ENTRADAS QUE SERÃO MOSTRADAS, NENUM RESULTADOS SERÁ RETORNADO, OU SEJA, NÃO SE VERÁ AS CONTAS QUE EXISTENTES. PARA RESOLVER ISSO, DEFINA UM VALOR COMPATIVEL)

/etc/init.d/slapd restart


MODIFICANDO UM USUARIO







SIGLAS IMPORTANTES




AGUARDE
PÁGINA EM CONSTRUÇÃO






Referências Bibliográgicas
man Net::LDAP

 
 


ETI - Especialista em Tecnologia
da Informação