OpenLDAP

OpenLDAP es una implementación libre y de código abierto del protocolo Lightweight Directory Access Protocol (LDAP) desarrollada por el proyecto OpenLDAP. Está liberada bajo su propia licencia OpenLDAP Public License. LDAP es un protocolo de comunicación independiente de la plataforma. Muchas distribuciones GNU/Linux incluyen el software OpenLDAP para el soporte LDAP. Este software también corre en plataformas BSD, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (NT y derivados, incluyendo 2000, XP, Vista), y z/OS.

El problema de la autenticación en Linux (y en Unix en general) esta dividido en dos partes, la primera es comprobar el usuario y password, y la segunda es obtener la información del usuario para poder completar el login (user ID, home directory, group membership, shell inicial). En la mayoría de las distribuciones de Linux esta problemática esta resuelta por dos componentes:

PAM: que realiza la autenticación (comprueba el usuario y password, ademas de verificar la validez de la cuenta de usuario).

NSS: que se encarga de obtener la información del usuario mencionada anteriormente.

Ambos componentes presentan una modularidad que les permite acceder a la información desde cualquier tipo de sistema de base de datos, como puede ser los archivos locales (/etc/passwd y / etc/group) o desde servidores como LDAP, Mysql, Windows.

Instalación

Deberemos bajar los siguientes paquetes

DB 4 http://www.oracle.com/database/berkeley-db/index.html

OpenLDAP http://www.openldap.org/

Para compilar DB4 solo deberemos ejecutar :

../dist/configure --enable-cxx

En cambio para compilar OpenLDAP deberemos correr :

CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include" LDFLAGS="-L/usr/local/lib -L/usr/local/BerkeleyDB.4.8/lib" LD_LIBRARY_PATH="/usr/local/BerkeleyDB.4.8/lib" ./configure --enable-crypt --enable-modules --enable-overlays --enable-bdb --enable-hdb --enable-ldap --enable-monitor --enable-passwd --enable-relay --enable-shell --enable-sock

Una vez hecho esto tendremos lista nuestra instalación para poder correr.

Replicación

REQUIERE Openldap 2.4

La replicación multimaster se puede hacer en 1 o más nodos, la única premisa es que todos deben estar iguales al momento de comenzar esta configuración (misma configuración y misma base).

Vamos a suponer que tenemos los servidores ldapba y ldap-miami.

En el servidor ldap1 agregar estas línas al final del slapd.conf:

serverID 1
overlay syncprov
syncRepl rid=2
provider=ldap://ldap2.com
binddn="cn=admin,ou=users,dc=dominio,dc=com"
bindmethod=simple
credentials=contraseña
searchbase="dc=dominio,dc=com"
type=refreshAndPersist
retry="5 + 5 +"
interval=00:00:00:05
starttls=yes
tls_reqcert=never
mirrormode true
database monitor

En el servidor ldap2:

serverID 2
overlay syncprov
syncRepl rid=1
provider=ldap://ldap1.com
binddn="cn=admin,ou=users,dc=dominio,dc=com"
bindmethod=simple
credentials=contraseña
searchbase="dc=dominio,dc=com"
type=refreshAndPersist
retry="5 + 5 +"
interval=00:00:00:05
starttls=yes
tls_reqcert=never
mirrormode true
database monitor

La configuración en ambos servidor es similar, solo cambia el ServerID, el rid y el provider, que van invertidos, como se observa en al configuración.

El usuario especificado en el binddn debe tener acceso completo a la base.

Politicas

Para poder manejar policies de passwords con LDAP y hacer que estos se bloqueen luego de determinados intentos se debe agregar lo siguiente:

RFC http://www.potaroo.net/ietf/old-ids/draft-behera-ldap-password-policy-00.txt RFC http://www.mozilla.org/directory/ietf-docs/draft-behera-ldap-password-policy-05.txt

/etc/openldap/slapd.conf

Despues de la definicion de la base de datos se deben agregar las siguientes lineas

overlay ppolicy
ppolicy_default "cn=default,ou=policies,dc=pan-energy"

Registros a agregar en el arbol LDAP

Se debe agregar la “ou” Policies para que contenga todas la policies.

dn: ou=policies,dc=dominio,dc=com
ou: policies
objectClass: top
objectClass: organizationalUnit
structuralObjectClass: organizationalUnit

Ahora se deben agregar las politicas por defecto, en este ejemplo se bloquea el usuario por 120 segundos (2 minutos) luego de tres intentos fallidos.

dn: cn=default,ou=policies,dc=dominio,dc=com
pwdFailureCountInterval: 30
pwdSafeModify: FALSE
pwdGraceAuthNLimit: 5
pwdLockoutDuration: 120
objectClass: pwdPolicy
objectClass: person
objectClass: top
objectClass: pwdPolicyChecker
pwdMaxFailure: 3
pwdAllowUserChange: TRUE
pwdMinLength: 5
cn: default
pwdAttribute: userPassword
pwdMinAge: 5
pwdLockout: TRUE
pwdCheckQuality: 2
pwdInHistory: 5
sn: default policy
pwdMustChange: FALSE
pwdExpireWarning: 600

Modificado todo esto se reinicia el LDAP.

Chequeos de password

Este es un modulo para chequear o establecer dificultades a los passwords.

Hay que agregar el objectClass 'pwdPolicyChecker' con el atributo del modulo LDPA ej 'check_password.so' dentro de las politicas.

Parametros de configuración :

useCracklib: integer. Usar o no CrackLib

minPoints: integer. Puntaje minimo, cada punto se asigna por cada clase de caracter en el password.

minUpper: integer. Cantidad minima de mayusculas

minLower: integer. Cantidad minima de minusculas

minDigit: integer. Cantidad minima de digitos

minPunct: integer. Cantidad minima de signos

Default : check_password.conf

useCracklib 1
minPoints 3
minUpper 0
minLower 0
minDigit 0
minPunct 0

Mensaje de error ldappasswd

Result: Constraint violation (19)
Additional info: Password fails quality checking policy

Ref.:

http://ltb-project.org/wiki/documentation/openldap-ppolicy-check-password

http://www.symas.com/blog/?page_id=66

En los clientes

El NSS (Name Service Switch) provee una interface para configurar y acceder a diferentes bases de datos de cuentas de usuarios y claves como /etc/passwd, /etc/group, /etc/hosts, LDAP , etc.

nsswitch.conf

Un sistema configurado por defecto generalmente usa NSS y su archivo de configuración etc/nsswitch.conf para resolver nombres de usuario o grupo, este archivo se compone de llamados a bases de datos como passwd, shadow y group, y de otras fuentes como archivos locales, directorios de datos OpenLDAP, nis (Network Information Service), nisplus (NIS+), bases de datos PostgreSQL o MySQL.

passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files ldap

En el mismo orden en que son listadas seran utilizadas al momento de resolver las peticiones.

NSS es la implementación de una Biblioteca estándar de C que llama a las funciones getpwent o getgrent dependiendo del modulo NSS, exiten modulos LDAP, PostgreSQL, MySQL o MDNS.

Diagrama de funcionamiento :

Diagrama de funcionamiento con NSCD :

NSCD es un demonio que gestiona las búsquedas en «passwd», «group» y «host» para los programas en ejecución y guarda los resultados para la siguiente consulta, es para servicios lentos como LDAP, NIS o NIS+.

Ref.: http://code.google.com/p/nsscache/wiki/BackgroundOnNameServiceSwitch

Notas

Para configurar el HASH por default del servidor, deberemos agregar dentro del archivo slapd.conf

password-hash {crypt}