Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Servidor LDAP bajo Gentoo


Lo primero que debemos tener en cuenta es que se estructura en forma de arbol, este es llamado como DIT(Data Information Tree), si estamos familiarizados con el protocolo SNMP nos daremos cuenta de que la estructura es muy similar.

Cada objeto es una instancia de un objectClass y los objectClass contienen atributos.

 

En el siguiente dibujo podemos ver una configuración de un arbol ldap:

 

Una lista de los atributos y objectClass puede ser encontrada aquí(dependiendo de los esquemas incluidos en /etc/openldap/slapd.conf se tendrán a nuestra disposición unos objectClass u otros):
 

Podemos ver que elementos tiene cada objectClass en los esquemas:

vi /etc/openldap/schema/core.schema
objectclass ........

 

Un esquema típico podría ser:

Dominio --> Organization unit --> UID
dc=com dc=alfaexploit ou=people uid=kr0m
dc=com dc=alfaexploit ou=servers uid=server01

 

Pueden haber tantos dc como queramos: asd.alfaexploit.com
Y tantos ou como queramos: servers --> HTTP --> server01


Los atributos del UID se controlan mediante los objectclass.

  • RDN --> Elemento final del arbol                    uid=kr0m
  • DN --> Elementos hasta llegar al RDN                uid=kr0m ou=people dc=alfaexploit dc=com

 

Ahora que ya tenemos los conceptos claros podemos proceder con la instalación del software:

emerge -av net-nds/openldap

 

vi /etc/openldap/slapd.conf

include     /etc/openldap/schema/core.schema            --> Cuidado con los includes ya que pueden haber dependencias cruzadas!!!
include     /etc/openldap/schema/cosine.schema
include     /etc/openldap/schema/inetorgperson.schema

pidfile     /var/run/openldap/slapd.pid
argsfile    /var/run/openldap/slapd.args

database    hdb
suffix      "dc=alfaexploit,dc=com"

checkpoint  32  30
rootdn      "cn=Manager,dc=alfaexploit,dc=com"         --> Cuando conectemos con este DN se nos permitirá modificar cualquier cosa del LDAP

rootpw      "{SSHA}sAAQc/1EDlk23Vb/stsceOa/EoFd7pghi" --> Salida de slappasswd
directory   /var/lib/openldap-data
index   objectClass eq

 

Copiamos el fichero de config de ejemplo de la base de datos:

cp /etc/openldap/DB_CONFIG.example /var/lib/openldap-data/DB_CONFIG
chown ldap:ldap /var/lib/openldap-data/*
mkdir /var/run/openldap/
chown ldap:ldap /var/run/openldap/

 

Se puede chequear la config con:

slaptest -f /etc/openldap/slapd.conf
config file testing succeeded

 

NOTA: Si da problemas podemos arrancarlo de forma manual con debug level 65535 así veremos donde está el problema:

/usr/lib64/openldap/slapd -d 65535

 

/etc/init.d/slapd start

 

También puede que estén fallando los permisos del directorio de datos:

chown ldap:ldap /var/lib/openldap-data/*
/etc/init.d/slapd restart

 

Configuramos la parte como cliente(para poder hacer pruebas en local en el propio servidor LDAP):

vi /etc/openldap/ldap.conf
BASE    dc=alfaexploit,dc=com
URI ldap://ldap.alfaexploit.com:389

 

vi /etc/hosts
IP_SERVER ldap.alfaexploit.com


Comprobamos que funciona:

ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=alfaexploit,dc=com        --> OK

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


Para realizar inserciones openldap espera la entrada en sintaxis LDIF:

vi insercion.ldif
# Creamos el elemento superior
dn: dc=alfaexploit,dc=com
dc: alfaexploit
description: The best place in the whole world
objectClass: dcObject
objectClass: organization
o: Alfaexploit, Corp.

# Creamos el elemento de tipo organizationUnit
dn: ou=servers,dc=alfaexploit,dc=com
ou: servers
description: All servers in alfaexploit.com
objectclass: organizationalUnit

# Anyadimos un servidor al elemento
dn: uid=server01,ou=servers,dc=alfaexploit,dc=com
objectclass: inetOrgPerson
cn: server01
sn: serve01
uid: server01
displayName: HTTP-server01

 

NOTA: El servidor LDAP NO nos permitirá el acceso incluso utilizando las credenciales de rootdn si no hay datos en el arbol, para evitar esto SIEMPRE realizaremos una carga de datos inicial!!

 

Realizamos la inserción:

ldapadd -x -D "cn=Manager,dc=alfaexploit,dc=com" -W -f insercion.ldif
Enter LDAP Password:

adding new entry "dc=alfaexploit,dc=com"
adding new entry "ou=servers,dc=alfaexploit,dc=com"
adding new entry "uid=server01,ou=servers,dc=alfaexploit,dc=com"

 

Si queremos depurar la salida:

ldapadd -x -D "cn=Manager,dc=alfaexploit,dc=com" -W -f insercion.ldif -d 255


Para comprobar que se ha insertado:

ldapsearch -h ldap.alfaexploit.com -D "cn=Manager,dc=alfaexploit,dc=com" -w 'XXXXXX' -L "objectClass=inetOrgPerson"

version: 1

#
# LDAPv3
# base <dc=alfaexploit,dc=com> (default) with scope subtree
# filter: objectClass=inetOrgPerson
# requesting: ALL
#

# server01, servers, alfaexploit.com
dn: uid=server01,ou=servers,dc=alfaexploit,dc=com
objectClass: inetOrgPerson
cn: server01
sn: serve01
uid: server01
displayName: HTTP-server01

# search result

# numResponses: 2
# numEntries: 1


Una herramienta muy útil es shelldap, esta nos permitirá navegar por el arbol y realizar tareas administrativas sobre el:

emerge -av net-nds/shelldap

 

shelldap --server IP_SERVER --binddn cn=Manager,dc=alfaexploit,dc=com

~ >  TAB
cat     copy    delete  exit    id      mkdir   passwd  rm      touch   
cd      cp      edit    grep    list    move    pwd     search  vi      
clear   create  env     help    ls      mv      read    setenv  whoami  

~ > ls
ou=servers/

~ > cd ou=servers

ou=servers,~ > ls

uid=server01
ou=servers,~ > cat uid=server01
dn: uid=server01,ou=servers,dc=alfaexploit,dc=com
objectClass: inetOrgPerson
cn: server01
displayName: HTTP-server01
sn: serve01
uid: server01

ou=servers,~ > rm uid=server01
Are you sure? [N/y]: y
uid=server01,ou=servers,dc=alfaexploit,dc=com: Success

ou=servers,~ > ls
ou=servers,~ > create organizationalUnit
dn: ou=HTTP_SERVERS,ou=servers,dc=alfaexploit,dc=com
objectClass: organizationalUnit
ou: HTTP_SERVERS

Success

ou=servers,~ > ls
ou=HTTP_SERVERS


ou=servers,~ > cd ou=HTTP_SERVERS
ou=HTTP_SERVERS,ou=servers,~ > create inetOrgPerson
dn: cn=http_server_01,ou=HTTP_SERVERS,ou=servers,dc=alfaexploit,dc=com
objectClass: inetOrgPerson
cn: http_server_01
sn: http_server_01

Success


ou=HTTP_SERVERS,ou=servers,~ > ls
cn=http_server_01

 

Si se crean objetos de varios tipos y alguno de ellos está en un schema que no se incluyó en el server LDAP NO nos saldrán las opciones correspondientes a ese schema

 

Si en un momento dado necesitamos dumpear el arbol LDAP desde el propio servidor LDAP podemos hacerlo:

slapcat

 

Con esto ya tenemos nuestro servidor LDAP básico, en próximas entregas explicaré como podemos tener un entorno con una VIP y un segundo servidor LDAP en stand-by.


Autor: Kr0m -- 12/09/2014 14:09:22