Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2011 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son, y los autores no asumirán responsabilidad alguna si el usuario, o lector, hace mal uso de éstos.
El inicio de la operación StartTLS en un servidor LDAP, establece la comunicación TLS (Transport Layer Security, o Seguridad para Nivel de Transporte) a través del mismo puerto 389 por TCP. Provee confidencialidad en el transporte de datos e protección de la integridad de datos. Durante la negociación, el servidor envía su certificado con estructura X.509 para verificar su identidad.
URL: http://en.wikipedia.org/wiki/LDAP
RSA, acrónimo de los apellidos de sus autores, Ron Rivest, Adi Shamir y Len Adleman, es un algoritmo para el ciframiento de claves públicas que fue publicado en 1977, patentado en EE.UU. en 1983 por el el Instituto Tecnológico de Michigan (MIT). RSA es utilizado ampliamente en todo el mundo para los protocolos destinados para el comercio electrónico.
URL: http://es.wikipedia.org/wiki/RSA
X.509 es un estándar ITU-T (estandarización de Telecomunicaciones de la International Telecommunication Union ) para infraestructura de claves públicas (PKI, o Public Key Infrastructure). Entre otras cosas, establece los estándares para certificados de claves públicas y un algoritmo para validación de ruta de certificación. Este último se encarga de verificar que la ruta de un certificado sea válida bajo una infraestructura de clave pública determinada. Es decir, desde el certificado inicial, pasando por certificados intermedios, hasta el certificado de confianza emitido por una Autoridad Certificadora (CA, o Certification Authority).
URL: http://es.wikipedia.org/wiki/X.509OpenSSL es una implementación libre, de código abierto, de los protocolos SSL (Secure Sockets Layer o Nivel de Zócalo Seguro) y TLS (Transport Layer Security, o Seguridad para Nivel de Transporte). Está basado sobre el extinto proyecto SSLeay, iniciado por Eric Young y Tim Hudson, hasta que éstos comenzaron a trabajar para la división de seguridad de EMC Corporation.
Si utiliza CentOS 6, o Red Hat™ Enterprise Linux 6, ejecute lo siguiente para instalar, o actualizar, el equipamiento lógico necesario:
yum -y install openldap openldap-clients openldap-servers nss-pam-ldapd |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat™ Enterprise Linux 5, ejecute lo siguiente para instalar o actualizar el equipamiento lógico necesario:
|
El servicio slapd funcionará perfectamente con SELinux activo en modo de imposición (enforcing).
Todo el contenido del directorio /var/lib/ldap debe tener contexto tipo slapd_db_t.
chcon -R -t slapd_db_t /var/lib/ldap |
Lo anterior solo será necesario si se restaura un respaldo hecho a partir de un sistema sin SELinux.
Es muy importante utilizar TLS/SSL cuando se configura el sistema para fungir como servidor de autenticación, por lo cual el siguiente procedimiento es obligatorio. Si utiliza CentOS 6, o Red Hat™ Enterprise Linux 6, requerirá al menos openldap-2.4.23-16.el6, debido a que la versiones anteriores tienen roto el soporte para TLS/SSL.
Cambie al directorio /etc/pki/tls/certs:
cd /etc/pki/tls/certs |
La creación de la firma digital y certificado requiere utilizar una firma digital con algoritmo RSA de 2048 octetos, y estructura x509. De modo predeterminado se establece una validez por 365 días (un año) para el certificado que se creará.
rm -f slapd.pem |
Lo anterior solicitará se ingresen varios datos:
La salida sería similar a la siguiente:
Generating a 2048 bit RSA private key
................++++++
.++++++
writing new private key to 'dovecot.key'
-----
You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name
or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:MX
State or Province Name (full name) [Berkshire]:Distrito Federal
Locality Name (eg, city) [Newbury]:Mexico
Organization Name (eg, company) [My Company Ltd]:
Mi empresa, S.A. de C.V.
Organizational Unit Name (eg, section) []:Direccion Comercial
Common Name (eg, your name or your server's hostname) []:
servidor.dominio.tld
Email Address []:webmaster@dominio.tld
|
El certificado solo será válido cuando el servidor LDAP sea invocado con el nombre definido en el campo Common Name. Es decir, sólo podrá utilizarlo cuando se defina como nombre de anfitrión, es decir servidor.dominio.tld. Para que esto funcione, será indispensable que un servidor DNS se encargue de la resolución del nombre de anfitrión del servidor LDAP para toda la red de área local.
Es indispensable que el archivo que contiene la firma digital y el certificado tenga permisos de acceso de lectura y escritura para el usuario root, y permisos de acceso de sólo lectura para el grupo ldap:
chown root:ldap /etc/pki/tls/certs/slapd.pem |
Con fines de organización se creará un directorio específico para este directorio y se configurará con permisos de acceso exclusivamente al usuario y grupo ldap.
mkdir /var/lib/ldap/autenticar |
Se requiere copiar el archivo DB_CONFIG.example dentro del directorio /var/lib/ldap/autenticar/, como el archivo DB_CONFIG. Ejecute lo siguiente:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/autenticar/DB_CONFIG
|
Nota. | |
|
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, ejecute lo siguiente:
|
Todo el contenido del directorio /var/lib/ldap/autenticar debe pertenecer al usuario y grupo ldap. Ejecute lo siguiente:
chown -R ldap:ldap /var/lib/ldap/autenticar |
Para crear la clave de acceso que se asignará en LDAP para el usuario administrador del directorio, ejecute lo siguiente:
slappasswd |
Lo anterior debe devolver como salida un criptograma, similar al mostrado a continuación:
{SSHA}LnmZLFeE1/zebp7AyEF09NlGaT1d4ckz
|
Copie y respalde este criptograma. El texto de la salida será utilizado más adelante en el archivo /etc/openldap/slapd.conf y se definirá como clave de acceso para el usuario Administrador, quien tendrá todos los privilegios sobre el directorio.
Se debe crear /etc/openldap/slapd.conf como archivo nuevo:
touch /etc/openldap/slapd.conf |
Nota. |
|
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, el archivo /etc/openldap/slapd.conf ya existe, e incluye contenido de ejemplo. Puede reemplazar todo el contenido en su totalidad, por el ejemplificado a continuación. |
El archivo /etc/openldap/slapd.conf debe de tener definidos todos los archivos de esquema mínimos requeridos. De tal modo, el inicio del archivo debe contener algo similar a lo siguiente:
include /etc/openldap/schema/corba.schema include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/duaconf.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/java.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema include /etc/openldap/schema/ppolicy.schema include /etc/openldap/schema/collective.schema |
Se deben habilitar los parámetros TLSCACertificateFile, TLSCertificateFile y TLSCertificateKeyFile estableciendo las rutas hacia el certificado y clave.
TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt TLSCertificateFile /etc/pki/tls/certs/slapd.pem TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem |
A fin de permitir conexiones desde clientes con OpenLDAP 2.x, establecer el archivo de número de proceso, y el archivo de argumentos de LDAP, deben estar presentes los siguientes parámetros, con los correspondientes valores:
allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args |
Para concluir con el /etc/openldap/slapd.conf, se añade lo siguiente, que tiene como finalidad el definir la configuración del nuevo directorio que en adelante se utilizará para autenticar a toda la red de área local:
database bdb suffix "dc=dominio,dc=tld" rootdn "cn=Administrador,dc=dominio,dc=tld" rootpw {SSHA}LnmZLFeE1/zebp7AyEF09NlGaT1d4ckz directory /var/lib/ldap/autenticar # Indices a mantener para esta base de datos index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub |
En resumen, el archivo /etc/openldap/slapd.conf debiera quedar de modo similar al siguiente:
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
TLSCertificateFile /etc/pki/tls/certs/slapd.pem
TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem
allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
suffix "dc=dominio,dc=tld"
rootdn "cn=Administrador,dc=dominio,dc=tld"
rootpw {SSHA}LnmZLFeE1/zebp7AyEF09NlGaT1d4ckz
directory /var/lib/ldap/autenticar
# Indices a mantener para esta base de datos
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
# Habilitar supervisión
database monitor
# Permitir solo a rootdn ver la supervisión
access to *
by dn.exact="cn=Administrador,dc=dominio,dc=tld" read
by * none
|
Por seguridad, el archivo /etc/openldap/slapd.conf deberá tener permisos de lectura y escritura, sólo para el usuario ldap.
chown ldap:ldap /etc/openldap/slapd.conf |
Nota. |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, o bien versiones de openldap anteriores a la 2.4, omita los siguientes tres pasos. |
Elimine el conjunto de archivos y directorios que componen los configuración predeterminada:
rm -rf /etc/openldap/slapd.d/* |
Convierta el archivo /etc/openldap/slapd.conf en el nuevo subconjunto de archivos ldif que irán dentro del directorio /etc/ldap/slapd.d:
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d |
Todo el contenido del directorio /etc/ldap/slapd.d debe pertenecer al usuario y grupo ldap. Ejecute lo siguiente:
chown -R ldap:ldap /etc/openldap/slapd.d |
Inicie el servicio slapd, y añada éste al resto de los servicios que arrancan junto con el sistema, ejecutando los siguientes dos mandatos:
service slapd start |
Nota. | |
|
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, inicie el servicio slapd, y añada éste al resto de los servicios que arrancan junto con el sistema:
|
Edite el archivo /usr/share/migrationtools/migrate_common.ph:
vim /usr/share/migrationtools/migrate_common.ph |
Nota. | |
|
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, edite el archivo /usr/share/openldap/migration/migrate_common.ph:
|
Modifique los los valores de las variables $DEFAULT_MAIL_DOMAIN y $DEFAULT_BASE a fin de que queden del siguiente modo:
# Default DNS domain $DEFAULT_MAIL_DOMAIN = "dominio.tld"; # Default base $DEFAULT_BASE = "dc=dominio,dc=tld"; |
A continuación, hay que crear el objeto que a su vez contendrá el resto de los datos en el directorio, utilizando migrate_base.pl para generar el archivo base.ldif.
Genere el archivo base.ldif, ejecutando lo siguiente:
/usr/share/migrationtools/migrate_base.pl > base.ldif |
Nota. | |
|
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, puede generar el archivo base.ldif ejecutando lo siguiente:
|
Utilice el mandato ldapadd para insertar los datos necesarios. Las opciones utilizadas con este mandato son las siguientes:
-x autenticación simple -W solicitar clave de acceso -D binddn Nombre Distinguido (dn) a utilizar -h anfitrión Servidor LDAP a acceder -f archivo archivo a utilizar |
Una vez entendido lo anterior, se procede a insertar la información generada en el directorio utilizando lo siguiente:
ldapadd -x -W -D 'cn=Administrador, dc=dominio, dc=tld' -h 127.0.0.1 -f base.ldif
|
Una vez hecho lo anterior, se podrá comenzar a poblar el directorio con datos. Lo primero será importar los grupos y usuarios existentes en el sistema. Realice la importación de usuarios creando los archivos group.ldif y passwd.ldif, utilizando migrate_group.pl y migrate_passwd.pl.
Ejecute los siguientes dos mandatos:
/usr/share/migrationtools/migrate_group.pl /etc/group group.ldif
|
Nota. | |
|
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, ejecute los siguientes dos mandatos:
|
Lo anterior creará los archivos group.ldif y passwd.ldif, los cuales incluirán la información de los grupos y cuentas en el sistema, incluyendo las claves de acceso. Los datos se podrán insertar en el directorio LDAP utilizando lo siguiente:
ldapadd -x -W -D 'cn=Administrador, dc=dominio, dc=tld' -h 127.0.0.1 -f group.ldif
|
Antes de configurar el sistema para utilizar LDAP para autenticar, es conveniente verificar que todo funciona correctamente.
El siguiente mandato verifica que directorios disponibles existen en el servidor 127.0.0.1.
ldapsearch -h 127.0.0.1 -x -b '' -s base '(objectclass=*)' namingContexts
|
Lo anterior debe devolver una salida similar a lo siguiente:
# extended LDIF # # LDAPv3 # base <> with scope base # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=dominio,dc=tld # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 |
El siguiente mandato debe devolver toda la información de todo el directorio solicitado (dc=dominio,dc=tld).
ldapsearch -x -b 'dc=dominio,dc=tld' '(objectclass=*)'
|
Otro ejemplo es realizar una búsqueda específica, para un usuario en particular. Asumiendo que en el directorio existe el usuario denominado fulano, ejecute lo siguiente:
ldapsearch -x -b 'uid=fulano,ou=People,dc=dominio,dc=tld'
|
Lo anterior debe regresar algo similar a lo siguiente:
# extended LDIF # # LDAPv3 # base uid=fulano,ou=People,dc=dominio,dc=tld with scope sub # filter: (objectclass=*) # requesting: ALL # # fulano, People, dominio.tld dn: uid=fulano,ou=People,dc=dominio,dc=tld uid: fulano cn: fulano objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword:: xxxxxxxxxxxx shadowLastChange: 12594 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 505 gidNumber: 505 homeDirectory: /home/fulano # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 |
Los clientes CentOS 6, y Red Hat Enterprise Linux 6, requieren tener instalados los paquetes nss-pam-ldap, authconfig y openldap-clients-2.4.23-16.el6 (las versiones anteriores de este último tienen roto el soporte para TLS/SSL):
yum -y install authconfig openldap-clients nss-pam-ldapd |
Nota. | |
|
Los clientes CentOS 5 y Red Hat Enterprise Linux 5 requieren tener instalados los paquetes nss_ldap, authconfig y openldap-clients:
|
Defina los valores para los parámetros host y base, a fin de establecer hacia que servidor y a que directorio conectarse, en el archivo /etc/pam_ldap.conf.
vim /etc/pam_ldap.conf |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat™ Enterprise Linux 5, defina lo anterior en el archivo /etc/ldap.conf.
|
Para fines prácticos, el valor del parámetro uri corresponde al nombre del servidor LDAP, previamente resuelto por un DNS, y el valor del parámetro base debe ser el mismo que se especificó en el archivo /etc/openldap/slapd.conf para el parámetro suffix. Considerando que el nombre de anfitrión del servidor LDAP está resuelto por un servidor DNS, como servidor.dominio.tld, puede definir lo siguiente:
uri ldap://servidor.dominio.tld/ |
Asumiendo que el servidor LDAP tiene definido como nombre de anfitrión servidor.dominio.tld, previamente resuelto en un servidor DNS, ejecute lo siguiente:
authconfig --useshadow --enablemd5 --enablelocauthorize \
|
Si utiliza CentOS 6, o Red Hat™ Enterprise Linux 6, con openldap-clients-2.4.23-15.el6, y versiones anteriores, utilice --disableldaptls, en lugar de --enableldaptls.
Existen muchos programas para acceder y administrar servidores LDAP, pero la mayoría sólo sirven para administrar usuarios y grupos del sistema, como el módulo de LDAP de Webmin. La mejor herramienta de administración de directorios LDAP que puedo recomendar es PHP LDAP Admin.
El procedimiento requiere detener el servicio slapd.
service slapd stop |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, debe detenerse el servicio ldap antes de proceder con el respaldo de datos.
|
Utilice el mandato slapcat del siguiente modo, definiendo el directorio de configuración /etc/openldap/slapd.d.
slapcat -v -F /etc/openldap/slapd.d -l respaldo-$(date +%Y%m%d).ldif |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, se utiliza la herramienta slapcat, definiendo el archivo de configuración /etc/openldap/slapd.conf.
|
Inicie de nuevo el servicio slapd.
service slapd start |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, inicie de nuevo el servicio ldap.
|
El procedimiento requiere detener el servicio. Ejecute lo siguiente:
service slapd stop |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, ejecute lo siguiente:
|
Deben eliminarse los datos del directorio a restaurar.
rm -f /var/lib/ldap/autenticar/* |
Utilice la herramienta slapadd para cargar los datos del respaldo desde un archivo *.ldif.
slapadd -v -c -l respaldo-20110911.ldif -F /etc/openldap/slapd.d |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, slapadd se utiliza definiendo el archivo de configuración /etc/openldap/slapd.conf.
|
Para regenerar los índices LDAP, ejecute el mandato slapindex:
slapindex |
Inicie de nuevo el servicio, ejecutando lo siguiente:
service slapd start |
Nota. | |
|
Si utiliza CentOS 5, o Red Hat Enterprise Linux 5, ejecute lo siguiente:
|
Si se utiliza un cortafuegos con políticas estrictas, como por ejemplo Shorewall, es necesario abrir el puerto 389 (ldap), por TCP.
Si utiliza Shorewall, edite el archivo /etc/shorewall/rules:
vim /etc/shorewall/rules |
Las reglas corresponderían a algo similar a lo siguiente:
#ACTION SOURCE DEST PROTO DEST SOURCE # PORT PORT(S)1 ACCEPT net fw tcp 389 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE |
Al terminar de configurar las reglas para Shorewall, reinicie el muro cortafuegos, ejecutando el siguiente mandato:
service shorewall restart |
Alcance Libre
http://www.alcancelibre.org/staticpages/index.php/como-ldap-auth
()