Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Configuración de OpenLDAP como servidor de autenticación.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

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.

Introducción.

Por favor, leer el documento titulado «Introducción a OpenLDAP

Equipamiento lógico necesario.

  • openldap-clients-2.x
  • openldap-servers-2.x
  • authconfig
  • authconfig-gtk (opcional)
  • migrationtools

Instalación a través de yum.

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 authconfig authconfig-gtk \
    migrationtools

Nota.

Si utiliza CentOS 5 o Red Hat™ Enterprise Linux 5, ejecute lo siguiente para instalar o actualizar el equipamiento lógico necesario:

yum -y install openldap openldap-clients openldap-servers \
    nss_ldap authconfig authconfig-gtk

Procedimientos.

SELinux y el servicio ldap.

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.

Certificados para TLS/SSL.

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.

Genere el directorio /etc/openldap/cacerts:

mkdir -p /etc/openldap/cacerts

Cambie al directorio /etc/openldap/cacerts:

cd /etc/openldap/cacerts

OpenLDAP requiere primero genera una nueva autoridad certificadora. Ejecute lo siguiente:

echo "01" > ca.srl

openssl genrsa -aes128 2048 > cacert.key

openssl req -utf8 -new -key cacert.key -out cacert.csr

openssl x509 -req -in cacert.csr -out cacert.pem \
    -signkey cacert.key -days 3650

De este juego de archivos se debe compartir cacert.pem con todos los clientes LDAP que se conectarán al servidor. Copie este archivo dentro del directorio raíz del servidor HTTP o FTP y configure los permisos de acceso para que sea accesible desde estos servicios.

cp cacert.pem /var/www/html/

chmod 644 /var/www/html/cacert.pem

A continuación genere el certificado y firma digital para el servidor. Cabe señalar que la forma digital que será utilizada por OpenLDAP será una tipo RSA sin contraseña en formato PEM generada a partir de una firma digital con contraseña. Ejecute lo siguiente:

openssl genrsa -aes128 2048 > key.pem

openssl req -utf8 -new -key key.pem -out slapd.csr

openssl x509 -req -in slapd.csr -out cert.pem \
    -CA cacert.pem -CAkey cacert.key -days 3650 openssl rsa -in key.pem -out key.pem

Configure todos los permisos necesarios para que sólo root y el grupo ldap puedan hacer uso de los certificados y firma digital. Ejecute lo siguiente

cacertdir_rehash /etc/openldap/cacerts

Genere los enlaces necesarios para el directorio /etc/openldap/cacerts:

chown -R root:ldap /etc/openldap/cacerts

chmod -R u=rwX,g=rX,o= /etc/openldap/cacerts

Edite el archivo /etc/sysconfig/ldap:

vi /etc/sysconfig/ldap

Alrededor de la línea 20, localice #SLAPD_LDAPS=no:

#SLAPD_LDAPS=no

Elimine la almohadilla (#) y cambie no por yes, de modo que quede como SLAPD_LDAPS=yes.

SLAPD_LDAPS=yes

Creación de directorios.

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

chmod 700 /var/lib/ldap/autenticar

Se requiere copiar el archivo DB_CONFIG.example dentro del directorio /var/lib/ldap/autenticar/, como el archivo DB_CONFIG. Es decir, 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:

cp /etc/openldap/DB_CONFIG.example \
    /var/lib/ldap/autenticar/DB_CONFIG

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

Creación de claves de acceso para LDAP.

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 Manager, quien tendrá todos los privilegios sobre el directorio.

Archivo de configuración /etc/openldap/slapd.conf.

Se debe crear /etc/openldap/slapd.conf como archivo nuevo:

touch /etc/openldap/slapd.conf
vim /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
include         /etc/openldap/schema/pmi.schema

Se deben habilitar las opciones TLSCACertificateFile, TLSCertificateFile y TLSCertificateKeyFile estableciendo como valores de éstas las rutas hacia el certificados y firma digital.

TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/cacerts/cert.pem
TLSCertificateKeyFile /etc/openldap/cacerts/key.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 las siguientes opciones, 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=Manager,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
include         /etc/openldap/schema/pmi.schema

TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/cacerts/cert.pem
TLSCertificateKeyFile /etc/openldap/cacerts/key.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=Manager,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

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
chmod 600 /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/*

Es necesario crear los archivos base para el contenido del directorio /var/lib/ldap/autenticar, por tanto ejecute lo siguiente:

echo "" | slapadd -f /etc/openldap/slapd.conf

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 de los directorios /etc/ldap/slapd.d y /var/lib/ldap/autenticar deben pertenecer al usuario y grupo ldap. Ejecute lo siguiente:

chown -R ldap:ldap \
    /etc/openldap/slapd.d \
    /var/lib/ldap/autenticar

Restablezca los contextos de SELinux para los directorios /etc/ldap/slapd.d y /var/lib/ldap/autenticar ejecutando lo siguiente:

restorecon -R \
    /etc/openldap/slapd.d \
    /var/lib/ldap/autenticar

Inicio del servicio.

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
chkconfig slapd on

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:

service ldap start
chkconfig ldap on

Migración de cuentas existentes en 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:

vim /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:

/usr/share/openldap/migration/migrate_base.pl > base.ldif

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=Manager,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
/usr/share/migrationtools/migrate_passwd.pl \
    /etc/passwd passwd.ldif

Nota.

Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, ejecute los siguientes dos mandatos:

/usr/share/openldap/migration/migrate_group.pl \
    /etc/group group.ldif
/usr/share/openldap/migration/migrate_passwd.pl \
    /etc/passwd passwd.ldif

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=Manager,dc=dominio,dc=tld' \
    -h 127.0.0.1 -f group.ldif
ldapadd -x -W -D 'cn=Manager,dc=dominio,dc=tld' \
    -h 127.0.0.1 -f passwd.ldif

Comprobaciones.

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

Configuración de clientes.

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:

yum -y install authconfig openldap-clients nss_ldap

Defina los valores para las opciones 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.

vim /etc/ldap.conf

Para fines prácticos, el valor de la opción uri corresponde al nombre del servidor LDAP, previamente resuelto por un DNS y el valor de la opción base debe ser el mismo que se especificó en el archivo /etc/openldap/slapd.conf para la opción 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/
base dc=dominio,dc=tld
ssl start_tls
tls_checkpeer no
pam_password md5

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  --passalgo=sha512 --enablelocauthorize \
    --enablemkhomedir --enableldap --enableldapauth \
    --ldapserver=servidor.dominio.tld \
    --ldapbasedn=dc=dominio,dc=tld --enableldaptls \
    --ldaploadcacert=http://servidor.red-local.net/cacert.pem \
    --update

Al terminar, debe iniciar y agregar a los servicios de arranque del sistema al servicio nslcd.

chkconfig nslcd on
service nslcd start

Administración.

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 herramienta de administración de directorios LDAP más sencilla de utilizar pudiera ser PHP LDAP Admin.

Respaldo de datos.

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.

service ldap stop

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.

slapcat -v -f /etc/openldap/slapd.conf \
    -l respaldo-$(date +%Y%m%d).ldif

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.

service ldap start

Restauración de datos.

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:

service ldap stop

Deben eliminarse los datos del directorio a restaurar.

rm -f /var/lib/ldap/autenticar/*

Vuelva a copiar el archivo DB_CONFIG.example dentro del directorio /var/lib/ldap/autenticar/, como el archivo DB_CONFIG. Es decir, ejecute lo siguiente:

cp /usr/share/openldap-servers/DB_CONFIG.example \
    /var/lib/ldap/autenticar/DB_CONFIG

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.

slapadd -v -c \
    -l respaldo-20110911.ldif \
    -f /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:

service ldap start

Modificaciones necesarias en el muro cortafuegos.

Es necesario abrir los puertos 389/TCP (ldap) y 636/TCP (ldaps).

Servicio iptables.

Ejecute lo siguiente para anexar las reglas de iptables correspondientes:

iptables -A INPUT -m state \
    --state NEW -m tcp -p tcp \
    --dport 389 -j ACCEPT

iptables -A INPUT -m state \
    --state NEW -m tcp -p tcp \
    --dport 636 -j ACCEPT

Ejecute lo siguiente para guardar los cambios:

service iptables save

O bien añada lo siguiente al archivo /etc/sysconfig/iptables:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT

Y reinicie el servicio iptables:

service iptables restart

Shorewall.

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,636
#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

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 15/07/2013, 10:08|Hits: 138,053 Ver la versión para imprimir