¡Esta es una revisión vieja del documento!
Tabla de Contenidos
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
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