Configuración de OpenLDAP III.

Continuamos con la serie de posts sobre configuración de OpenLDAP, ahora con la overlay para controlar las políticas de seguridad de contraseñas del directorio.

Serie completa:

http://www.elalfon.com/2015/03/21/configuracion-de-openldap-i/

http://www.elalfon.com/2015/03/30/configuracion-de-openldap-ii/

http://www.elalfon.com/2015/03/31/configuracion-de-openldap-iii/

Overlay Password Policy.

Esta overlay se utiliza para mantener políticas de seguridad en las password en cuanto a requisitos tanto de la propia password como de caducidad y logins de gracia, aunque principalmente la usaremos porque nos permite mantener las passwords cifradas incluso aunque se escriban en claro desde cualquier cliente de acceso al ldap. Esto punto también se puede conseguir parcialmente si no dejamos que nadie vea el atributo password, pero nunca es buena idea utilizar «seguridad mediante oscuridad». El OpenLDAP almacena el dato aunque no sea visible, así que siempre hay formas de acceder.

Carga del módulo y configuración de la overlay en base de datos.

Solo Centos 7: El primer paso antes de empezar la carga de módulos y overlays es cargar el esquema ppolicy en el OpenLDAP. Los atributos que define no vienen de serie, y no son necesarios a menos que se cargue esta librería. Los esquemas que vienen con la instalación del LDAP se encuentran en /etc/openldap/schemas, así que cargaremos la que nos hace falta con:

Solo Centos 7

ldapadd -x -W -D «cn=Config» < /etc/openldap/schema/ppolicy.ldif

Con el esquema cargado de serie en Centos 6.6 o recien cargado en Centos 7, podemos añadir el módulo ppolicy al OpenLDAP. Usaremos para ello el ldif ModuloPPolicy.ldif:

version: 1

dn: cn=PPolicy,cn=config
objectClass: top
objectClass: olcConfig
objectClass: olcModuleList
cn: PPolicy
olcModuleLoad: ppolicy.la
olcModulePath: /usr/lib64/openldap

Ahora pasamos a configurar la overlay en la base de datos. Empezaremos configurando únicamente la entrada para cifrar automáticamente la password. Luego veremos qué podemos añadir a la overlay para dar seguridad al manejo de passwords. El ldif inicial overlayPPolicy.ldif será el que indicamos, recordando siempre que la base de datos en centos 6.6 es la que tenemos en el ldif, pero en Centos 7 es hdb:

version: 1

dn: olcOverlay=ppolicy,olcDatabase={2}bdb,cn=config
objectClass: olcPPolicyConfig
objectClass: top
objectClass: olcConfig
objectClass: olcOverlayConfig
olcOverlay: ppolicy
olcPPolicyHashCleartext: TRUE

En Centos 7 la línea marcada en rojo sería:

dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config

Lo cargamos con el comando:

ldapadd -x -W -D «cn=config» < overlayPPolicy.ldif

Probemos esta primera parte modificando la password de uno de los usuarios que tenemos cargados en el punto II. El ldif para ponerle password a un usuario es este:

dn: cn=user5,ou=usuarios,dc=example,dc=com
changetype: modify
add: userPassword
userPassword: user5

OJO CON ESTA PARTE. El atributo userPassword puede contener varios valores. Si ejecutamos este ldif más de una vez, tendremos varias passwords para el mismo usuario. En un principio, esto esta pensado para almacenar diferentes hashes de una contraseña (MD6, SHA, etc) a la vez, en el momento de crear la password, pero puede resultar un problema posteriomente si no eliminamos todos los valores antes de cambiar la password.

Por ejemplo, es posible editar una password y no ver que hay más elementos, o pensar que se cambian todos los valores de esa pasword a la vez. En realidad lo que obtenemos al final es un mismo usuario con diferentes passwords, unas conocidas porque las acabamos de cambiar y otras no.

Lo mejor que podemos hacer siempre que haya que cambiar la password de un usuario es eliminar todas las entradas de userPassword y luego crear una única entrada. Si no tenemos más remedio que almacenar la password con diferentes hashes (no encuentro una buena razón para esto, pero nunca se sabe…), primero borramos todos los valores y luego cargamos los nuevos.

Si tenemos que repetir la carga de la password, cambiar el add en rojo por replace.

Cargamos el ldif con el comando:

ldapmodify -x -W -D «cn=Manager,dc=example,dc=com» <cambioPassword.ldif

Ahora podemos verificar que la password se ha codificado en el OpenLDAP:

ldapsearch -x -W -D «cn=Manager,dc=example,dc=com» -b «dc=example,dc=com» «(cn=user5)» userPassword

# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (cn=user5)
# requesting: userPassword
#

# user5, usuarios, example.com
dn: cn=user5,ou=usuarios,dc=example,dc=com
userPassword:: e1NTSEF9ZjhXMFVzVExTWjlZRm1SNCtyV0R5Y29CVkR6WVcvdGU=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Cuando encontramos un atributo en la salida de ldapsearch con «::» es que está codificado en base64. El resultado real es:

userPassword:{SSHA}f8W0UsTLSZ9YFmR4+rWDycoBVDzYW/te

Esto nos indica que la password está codificada con el hash sha «salado».

Para ver el contenido total del módulo de políticas de seguridad en la password, pasaos por este enlace:

http://www.zytrax.com/books/ldap/ch6/ppolicy.html

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *