Inicializar base de datos LDAP
Si sólo desea ver el sistema corriendo vaya a la guía de Instalación Rápida.
Consideraciones hechas para el proyecto SIU-Araí: Usuarios:
- Se requiere de un servicio de LDAP, externo a la plataforma.
- La implementación actual se basa en un servicio OpenLDAP versión 2.4.
- Se provee los archivos en formato schema y ldif necesarios para inicializar el servicio.
- Se provee una imagen Docker pre-armada con una estructura fija, a modo de guía
Existen dos alternativas para desplegar el servicio OpenLDAP: mediante una instalación manual o mediante un despliegue en Docker. Cualquiera de las dos opciones son compatibles con un despliegue en Docker de SIU-Araí: Usuarios.
Preparación de la estructura
El primer paso antes de realizar el despliegue es definir la estructura que adoptará el directorio LDAP. En la sección Conceptos - Almacenamiento - Ldap se describe en detalle la estructura subyacente.
En este punto, lo que se debe elegir es el nombre de la raíz del directorio LDAP que alojará todo el arbol. Normalmente se trata de una sigla de la institución. Si se toma como ejemplo UNX, nos quedaría definido de la siguiente manera:
identificador | valor |
---|---|
raiz | unx |
DN base | dc=unx,dc=edu,dc=ar |
Bind admin | cn=admin,dc=unx,dc=edu,dc=ar |
OU usuarios | ou=usuarios,dc=unx,dc=edu,dc=ar |
OU cuentas | ou=usuariosCuentas,dc=unx,dc=edu,dc=ar |
OU grupos | ou=groups,dc=unx,dc=edu,dc=ar |
Pueden ver un ejemplo de como quedan configuradas estas entidades acá. Si se desea adaptar a una estructura LDAP existente, por favor ponganse en contacto.
Despliegue en Docker
Existe multitid de imágenes docker para OpenLDAP. Una de ellas es hecha por osixia. Para el proyecto, contamos con una imágen basada en ella, con los esquemas de SIU-Araí: Usuarios cargados. Pueden encontrarla aquí.
Sobre como osixia plantea su uso, referirse a la documentación específica.
Ajustar la imágen a las necesidades
Para personalizar la imagen docker, utilizar el repositorio siu-toba/docker-openldap-arai que contiene la última versión del schema requerido por el proyecto. Los puntos claves aquí son:
- el directorio
bootstrap/schema/
contiene los esquemas requeridos:01-arai-usuarios.schema
,edu-org.schema
yedu-person.schema
- el directorio
ldif
contiene la estructura a inicializar:01-estructuraUsuarios.ldif
. Para adaptar la estructura a las necesidades de la institución, como se detalla en la sección previa. - el directorio
environment
contiene los parámetros (DN base, SSL, etc.):my-env.startup.yaml
ymy-env.yaml
. Aquí se configura todo lo relacionado a la forma de operar OpenLDAP y su seguridad. No lo deje por defecto!
Tomemos como ejemplo lo siguiente, se desea un DN base como dc=unx,dc=edu,dc=ar
, por tanto el archivo 01-estructuraUsuarios.ldif
debería
quedar de la siguiente manera:
# Entry Usuarios: ou=usuarios,dc=unx,dc=edu,dc=ar
dn: ou=usuarios,dc=unx,dc=edu,dc=ar
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: usuarios
# Entry Usuarios Cuentas: ou=usuariosCuentas,dc=unx,dc=edu,dc=ar
dn: ou=usuariosCuentas,dc=unx,dc=edu,dc=ar
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: usuariosCuentas
# Entry Grupos: ou=groups,dc=unx,dc=edu,dc=ar
dn: ou=groups,dc=unx,dc=edu,dc=ar
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: groups
# Subgrupo devs: cn=devs,ou=groups,dc=unx,dc=edu,dc=ar
dn: cn=devs,ou=groups,dc=unx,dc=edu,dc=ar
changetype: add
objectclass: groupofnames
cn: devs
member: cn=admin,dc=unx,dc=edu,dc=ar
Una vez realizada las adaptaciones requeridas, se recomienda:
- gestionar los cambios sobre un repositorio Git para su seguimiento, control, actualización futura, etc.
- proceder a construir la imágen docker de acuerdo a como lo documenta el repositorio y osixia.
- la imagen ha de estar publicada en alguna registro de imágenes Docker (ver DockerHub para mayores detalles).
Desplegar
La forma más simple de realizar el respliegue, es mediante Docker Compose. El archivo
docker-compose.yml
tendrá mas o menos esta estructura:
version: '3.7'
services:
ldap:
image: siudocker/openldap-arai:v1.0.0
command: [ "--copy-service", "--loglevel", "debug"]
environment:
LDAP_ORGANIZATION: UNX
LDAP_DOMAIN: "unx.edu.ar"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "false"
LDAP_ADMIN_PASSWORD: admin
LDAP_CONFIG_PASSWORD: admin
networks:
backend:
volumes:
- volumen_ldap_data:/var/lib/ldap
- volumen_ldap_config:/etc/ldap/slapd.d
- $PWD/01-estructuraUsuarios.ldif:/container/service/slapd/assets/config/bootstrap/ldif/01-estructuraUsuarios.ldif
networks:
backend:
volumes:
volumen_ldap_data:
volumen_ldap_config:
Para ejecutarlo, basta correr vía Docker Compose el archivo
docker-compose up
Este es claramente un despliegue muy simple, realizado con la imagen Docker que provee el proyecto. Se opta por configurar volúmenes para almacenamiento de los datos y configuración LDAP de manera externa al contenedor. Con esto se logra que la información que este contenedor pueda generar sea persistente. Sopora que se pueda realizar una actualización del mismo a una versión futura, entre otros usos.
Recomendamos encarecidamente el despliegue de un orquestador de contenedores (ya sea basado en Docker Swarm o Kubernetes) para dar mayor fiabilidad al servicio.
Despliegue manual
A continuación se describe uno basado en OpenLDAP con Debian 10 Buster. Se asume un DN base dc=unx,dc=edu,dc=ar
.
El primer paso es realizar la instalación del servicio OpenLDAP
sudo apt install slapd ldap-utils
Es necesario reconfigurar el servicio ldap para establecer los valores de configuración inicial (ej. DN base
dc=unx,dc=edu,dc=ar
)sudo dpkg-reconfigure slapd
Se deben cargar los esquemas requeridos por SIU-Araí: Usuarios (se encuentran dentro del directorio
idm/templates/ldap/$VERSION/ldif
del proyecto).sudo cp idm/templates/ldap/$VERSION/ldif/cn\=\{* "/etc/ldap/slapd.d/cn=config/cn=schema"
Es necesario que los archivos estén con los permisos adecuados (del usuario que corre el servicio
slapd
)sudo chown openldap:openldap "/etc/ldap/slapd.d/cn=config/cn=schema" -R
Para que OpenLDAP tome los nuevos esquemas, el servicio necesita ser reiniciado
sudo systemctl restart slapd
Opcional. Es posible verificar si los esquemas fueron cargados realmente
sudo ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
La salida debe contener los esquemas recientemente copiados, de la forma:
- dn: cn={4}arai-usuarios,cn=schema,cn=config
- dn: cn={5}edu-org,cn=schema,cn=config
- dn: cn={6}edu-person,cn=schema,cn=config
Con los esquemas en su lugar, las entidades que alojan los usuarios, grupos y cuentas han de ser creados
sudo ldapadd -x -W -D "cn=admin,dc=unx,dc=edu,dc=ar" -f estructura-arai-usuarios.ldif
Opcional. Si no se dispone, agregar el esquema
memberOf
para los grupossudo ldapmodify -Y EXTERNAL -H ldapi:/// -f idm/templates/ldap/$VERSION/optional/memberOf.ldif
Opcional. Para verificar que se cuenta con el esquema
memberOf
sudo ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" | grep memberOf
En la salida debe estar algún atributo tipo
olcAttributeTypes
relacionado al overlay creado.Opcional. Es posible verificar que las entidades se hayan cargado adecuadamente
sudo ldapsearch -x -W -D "cn=admin,dc=unx,dc=edu,dc=ar" -b "dc=unx,dc=edu,dc=ar"
En la salida deben estar presentes las entidades que se intentaron crear previamente.
Opcional. Crear indices
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f idm/templates/ldap/$VERSION/optional/index.ldif
Opcional. Activar el modulo Bcrypt para utilizarlo vía Bind (Arai-Usuarios v3.2+)
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f idm/templates/ldap/$VERSION/optional/bcryptModule.ldif
Si se desea soportar BCrypt vía Bind, se debe configurar el soporte en la instalación manual de OpenLdap (aquí y aquí).
Otros productos
Si poseen otro producto, es bienvenida toda colaboración, ya sea por el foro como vía el HUB.