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.
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 \ |
![]() | |
Si utiliza CentOS 5 o Red Hat™ Enterprise Linux 5, ejecute lo siguiente para instalar o actualizar el equipamiento lógico necesario:
|
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 \ |
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/ |
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 \ |
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 |
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 |
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 \ |
![]() | |
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 |
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 |
![]() |
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 |
![]() |
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 \ |
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 \ |
Restablezca los contextos de SELinux para los directorios /etc/ldap/slapd.d y /var/lib/ldap/autenticar ejecutando lo siguiente:
restorecon -R \ |
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 |
![]() | |
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:
|
Migración de cuentas existentes en el sistema.
Edite el archivo /usr/share/migrationtools/migrate_common.ph:
vim /usr/share/migrationtools/migrate_common.ph |
![]() | |
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 |
![]() | |
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=Manager,dc=dominio,dc=tld' \
|
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 \
|
![]() | |
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=Manager,dc=dominio,dc=tld' \
|
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 \ |
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 |
![]() | |
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 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 |
![]() | |
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 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/ |
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 \
|
Al terminar, debe iniciar y agregar a los servicios de arranque del sistema al servicio nslcd.
chkconfig nslcd on |
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 |
![]() | |
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 \ |
![]() | |
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 |
![]() | |
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, inicie de nuevo el servicio ldap.
|
Restauración de datos.
El procedimiento requiere detener el servicio. Ejecute lo siguiente:
service slapd stop |
![]() | |
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/* |
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 \ |
Utilice la herramienta slapadd para cargar los datos del respaldo desde un archivo *.ldif.
slapadd -v -c \ |
![]() | |
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 |
![]() | |
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, ejecute lo siguiente:
|
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 \ |
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 |