En el primer artículo sobre OpenLDAP, expliqué cómo instalar y configurar LDAP con Postgres como backend. En el mismo presenté una configuración básica para slapd, la cual almacenaba la contraseña de root (superusuario de LDAP) en formato plano. Esto tiene varias implicancias negativas desde el punto de vista de la seguridad de la información, con lo cual el siguiente paso consiste en cambiar esta configuración para que el password se almacene como hash MD5 o SHA-1 en vez de plano.



La herramienta slappasswd provee la funcionalidad para generar un valor userPassword adecuado para utilizar con las herramientas ldapmodify, ldapadd y ldapdelete, al igual que la configuración de la contraseña de root (rootpw en el archivo slapd.conf (justamente lo que busca este artículo).

A través de la opción -h es posible indicar uno de los siguientes esquemas para almacenar la contraseña: {CLEARTEXT} (texto plano), {CRYPT} (man 3 crypt), {MD5} (man md5sum), {SMD5} (MD5 con salt), {SHA} (man 1ssl sha) y {SSHA} (SHA-1 con salt, esquema por defecto).

Para generar un valor de contraseña hasheada utilizando SHA-1 con salt compatible con el formato requerido para un valor userPassword, ejecutar el siguiente comando:

root@debian8:~# slappasswd -h {SSHA}
New password: 
Re-enter new password: 
{SSHA}5uUxSgD1ssGkEUmQTBEtcqm+I1Aqsp37

La contraseña se solicita de manera interactiva.

Copiar el valor retornado, el cual utilizaremos en la configuración rootpw del archivo slapd.conf:

root@debian8:~# nano /usr/local/etc/openldap/slapd.conf

[...]

rootdn          "cn=root,dc=example,dc=com"
rootpw          {SSHA}5uUxSgD1ssGkEUmQTBEtcqm+I1Aqsp37

[...]

Luego reiniciar el servidor slapd:

root@debian8:~# service slapd restart
slapd: [INFO] Using built-in configuration - this may cause some problems
slapd: [INFO] Launching OpenLDAP configuration test...
slapd: [OK] OpenLDAP configuration test successful
slapd: [INFO] Halting OpenLDAP...
slapd: [OK] OpenLDAP stopped after 1 seconds
slapd: [INFO] Launching OpenLDAP...
slapd: [OK] File descriptor limit set to 2048
slapd: [OK] OpenLDAP started

Para verificar el funcionamiento de la nueva contraseña voy a eliminar una entrada. Primero ejecuto una búsqueda sobre el directorio con el criterio "Mitya*" en el common name:

root@debian8:~# ldapsearch -x -h localhost -b "dc=example,dc=com" "(cn=Mitya*)"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (cn=Mitya*)
# requesting: ALL
#

# Mitya Kovalev, example.com
dn: cn=Mitya Kovalev,dc=example,dc=com
objectClass: inetOrgPerson
cn: Mitya Kovalev
sn: Kovalev
seeAlso: documentTitle=book1,dc=example,dc=com
seeAlso: documentTitle=book2,dc=example,dc=com
givenName: Mitya
userPassword:: bWl0
telephoneNumber: 222-3234
telephoneNumber: 332-2334

# search reference
ref: ldap://localhost:9012/dc=example,dc=com??sub

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 1
# numReferences: 1

Se encuentra el usuario "Mitya Kovalev".

Para eliminarlo, utilizo la herramienta ldapdelete con el distinguished name (DN) como parámetro:

root@debian8:~# ldapdelete -x -h localhost -D "cn=root,dc=example,dc=com" -W "cn=Mitya Kovalev,dc=example,dc=com"
Enter LDAP Password: 

Al ejecutar nuevamente la búsqueda, no hay resultados:

root@debian8:~# ldapsearch -x -h localhost -b "dc=example,dc=com" "(cn=Mitya*)"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (cn=Mitya*)
# requesting: ALL
#

# search reference
ref: ldap://localhost:9012/dc=example,dc=com??sub

# search result
search: 2
result: 0 Success

# numResponses: 2
# numReferences: 1

Tener en cuenta que el objetivo de "hashear" la contraseña de root consiste en evitar que quede plana y visible en la configuración de slapd. Esto no protege para nada la seguridad de la contraseña durante la transferencia de datos del protocolo a través de la red. A tal fin es necesario implementar y forzar el uso de LDAP sobre TLS. Los valores de los hashes deben ser protegidos al igual que cualquier contraseña plana.

Referencias


Tal vez pueda interesarte


Compartí este artículo