Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

lunes, 2 de noviembre de 2015

LSC Project. Sincronizando OpenLDAP con otras bases de datos, etc


LSC es un conector Software Libre para sincronizar identidades entre un directorio LDAP y cualquier otra fuente de datos, incluyendo cualquier base de datos con un conector JDBC (Java Database Connectivity), otro servidor LDAP, etc..  
Esto nos puede ser util para infinidad de cosas, como la de sincronizar un directorio Active Directory con OpenLDAP (en cualquier dirección). De esta manera, podríamos tener un escenario de autenticación híbrido en el cual programas que necesiten AD o OpenLDAP puedan habitar alimentándose de una sóla base de datos. 





Así pues, vamos a proceder a instalar el programa obteniéndolo de la web oficial: http://lsc-project.org/

Tenemos dos maneras de hacerlo:

La más gráfica, mediante un paquete deb:

Lo descargamos

Doble click en el archivo .deb
 

Comprobamos que todo ha ido correctamente

Localización de los archivos:

  • /usr/bin/lsc: wrapper to launch LSC
  • /etc/lsc/: configuration
  • /var/log/lsc/: logs
  • /etc/init.d/lsc: init script (for asynchronous connectors)
  • /etc/default/lsc: init script configuration
  • /etc/cron.d/lsc: cron configuration
  • /usr/lib/lsc/: LSC libraries
  • /var/lib/lsc/nagios/: monitoring scripts
  • /usr/share/doc/lsc: sample scripts


Tambien podemos descargarnos tar.gz y descomprimirlo. Ya viene compilado y listo para usarse. En este caso, pese a que soy defensor de usar los paquetes deb y los repositorios (sobretodo los oficiales) en este caso creo que lo mejor es esta opción. Además, los ejemplos vienen pensados justamente para hacerlo de esta manera (rutas, etc). 

Así que.. queda probarlo:

 ./lsc-sample

 One option from available options is:
   --import []    Import data from CSV file
   --show    Show data from database
   --drop    Drop the table csvdata from database
   --start-ldap-server    Launch an embedded OpenDJ LDAP server
   --stop-ldap-server     Halt an embedded OpenDJ LDAP server
   --run     Run the synchronization task
   --clean   Remove all files from disk
   --help    Print informations

Vamos a probar una sincronización a modo de ejemplo con las herramientas incrustadas que lleva el propio programa. 

Miraremos de cargar los registros que queremos sincronizar en la base de datos:

bin/lsc-sample --import sample.csv

Podemos comprobar el contenido mediante la siguiente linea:

bin/lsc-sample --show

Arrancaremos el servidor LDAP incorporado de pruebas:

#lsc-2.1.3/sample/hsqldb$ bin/lsc-sample --start-ldap-server
Starting LDAP server on ldap://localhost:33389/ ... segons /home/ediaz/Escritorio/lsc-2.1.3/sample/hsqldb/bin/../etc
nov 02 15:36:05 - INFO  - Logging configuration successfully loaded from /home/eithel/Escritorio/lsc-2.1.3/sample/hsqldb/bin/../etc/logback.xml 
nov 02 15:36:05 - INFO  - LSC configuration successfully loaded from /home/eithel/Escritorio/lsc-2.1.3/sample/hsqldb/bin/../etc/

Como el ejemplo lo hace sobre 127.0.0.1 y puede ser que no dispongamos de una herramienta gráfica, podemos mirar de probarlo mediante ldapsearch:


ldapsearch -D "cn=Directory Manager" -w secret -p 33389 -h localhost -b "dc=lsc-project,dc=org" -s sub "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# lsc-project.org
dn: dc=lsc-project,dc=org
dc: lsc-project
objectClass: domain
objectClass: top

# Sample, lsc-project.org
dn: ou=Sample,dc=lsc-project,dc=org
description: Sample subtree
ou: Sample
objectClass: organizationalUnit
objectClass: top

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Con la base de datos cargada y un servidor LDAP en donde migrar esos datos, nos dispondremos a hacer la migración:

#bin/lsc-sample --run

y vemos el resultado de nuevo con la busqueda ldapsearch:
ldapsearch -D "cn=Directory Manager" -w secret -p 33389 -h localhost -b "dc=lsc-project,dc=org" -s sub "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# lsc-project.org
dn: dc=lsc-project,dc=org
dc: lsc-project
objectClass: domain
objectClass: top

# Sample, lsc-project.org
dn: ou=Sample,dc=lsc-project,dc=org
description: Sample subtree
ou: Sample
objectClass: organizationalUnit
objectClass: top

# clem.oudot@gmail.com, Sample, lsc-project.org
dn: mail=clem.oudot@gmail.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9Z3Y5ZGlzaFhaZlNQeGR6ekZ0SU1xMlN1WHp5NU5NTDVSdGJlNXc9PQ=
 =
mail: clem.oudot@gmail.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: c.oudot
cn: Oudot, Clement
sn: Oudot

# jonathan@philipoux.net, Sample, lsc-project.org
dn: mail=jonathan@philipoux.net,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9QUlOd0RoWDROTG5aSE9TUDVpKzRtZUJSTzRkMmF2eFNTaDUwWVE9PQ=
 =
mail: jonathan@philipoux.net
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
carLicense: BHU772
carLicense: DED899
uid: j.clarke
cn: Clarke, Jonathan
sn: Clarke

# thomas@aepik.net, Sample, lsc-project.org
dn: mail=thomas@aepik.net,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9Ynh0Y2FWb1g1cmpRcHZSU29PSEd5ME94VGtGSWZGRnlOK3h1SHc9PQ=
 =
mail: thomas@aepik.net
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: t.chemineau
cn: Chemineau, Thomas
sn: Chemineau

# sebastien.bahloul@gmail.com, Sample, lsc-project.org
dn: mail=sebastien.bahloul@gmail.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9dzRUbDhPOEU5dW9mc2tFZDBqR0JYNW1yTzVPMWZmakFJOUdMdkE9PQ=
 =
mail: sebastien.bahloul@gmail.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: s.bahloul
cn: Bahloul, Sebastien
sn: Bahloul

# remy@schermesser.com, Sample, lsc-project.org
dn: mail=remy@schermesser.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9eE9odElwcENEN3RLRlZONSt4Ris1WkNpRlp5Wmx4NlBYV3M5bUE9PQ=
 =
mail: remy@schermesser.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: r.schermesser
cn: Schermesser, Remy-Christophe
sn: Schermesser

# epereira@linagora.com, Sample, lsc-project.org
dn: mail=epereira@linagora.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9YzUwaFEra2RPLzRLQjI4WG9tMmREQm83KzFFOWo4Wi9GbktaZkE9PQ=
 =
mail: epereira@linagora.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: e.pereira
cn: Pereira, Esteban
sn: Pereira

# dcoutadeur@linagora.com, Sample, lsc-project.org
dn: mail=dcoutadeur@linagora.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9Z2VKUkpFa012dE9wNGZvWDB1anVxeEVHMXZZaE1Ob3cvUmp6T0E9PQ=
 =
mail: dcoutadeur@linagora.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: d.coutadeur
cn: Coutadeur, David
sn: Coutadeur

# rouazana@linagora.com, Sample, lsc-project.org
dn: mail=rouazana@linagora.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9YjJKUWQ3NUtTaDlCWnJnUTIrd2E1NWNzNVdNSFIreFpXeG5lbkE9PQ=
 =
mail: rouazana@linagora.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: r.ouazana
cn: Ouazana, Raphael
sn: Ouazana

# search result
search: 2
result: 0 Success

# numResponses: 11
# numEntries: 10

Efectivamente, ha realizado la sincronización perfectamente.

En resumen, lo que hemos hecho es, dado un csv, cargar una base de datos intermedia. Luego, con los datos cargados en esa base de datos, los migramos a otro servidor LDAP (OpenLDAP, AD, etc).








That u don't know what you've got 'til it's gone