Cómo configurar OpenLDAP con 2 hosts en modo espejo
OpenLDAP es una implementación gratuita de código abierto del Protocolo ligero de acceso a directorios (LDAP) desarrollado por OpenLDAP Project. En otras palabras, es un protocolo para administrar información relacionada desde una ubicación centralizada mediante el uso de una jerarquía de archivos y directorios.
Funciona de manera similar a una base de datos relacional en ciertas formas y puede usarse para organizar y almacenar cualquier tipo de información. LDAP se usa comúnmente para la autenticación centralizada. En este artículo, consideraremos la configuración de OpenLDAP con dos hosts en modo espejo.
OpenLDAP tiene tres componentes principales:
– slapd – demonio LDAP autónomo y módulos y herramientas asociados
– bibliotecas que implementan el protocolo LDAP y las reglas básicas de codificación
– software cliente: ldapsearch, ldapadd, ldapdelete y otros.
Antes de empezar
LDAP es un protocolo de Internet que utilizan el correo electrónico y otros programas para buscar información de contacto desde un servidor. Se lanza bajo licencia pública OpenLDAP, está disponible para todas las principales distribuciones de Linux, AIX, Android, HP-UX, OS X, Solaris, Windows yz / OS.
LDAP no se limita a almacenar la información, también se utiliza como base de datos de back-end para «inicio de sesión único», donde una contraseña para un usuario se comparte entre muchos servicios. En este tutorial, instalaremos y configuraremos OpenLDAP junto con la replicación en modo espejo en CentOS 6.8.
1) Instalación de Openldap
En CentOS y RedHat, use yum install como se muestra a continuación, para instalar los paquetes relacionados con openldap.
yum -y install openldap openldap-servers openldap-clients
-y marca: asume que sí si se le solicita
openldap-servers: este es el servidor LDAP principal
openldap-clients: contiene todas las utilidades de cliente LDAP necesarias
openldap: este paquete contiene las bibliotecas de soporte LDAP
Nota: Para la interfaz de usuario web, debe instalar el paquete phpldapadmin. Suponemos que el demonio httpd ya está instalado en la máquina. De lo contrario, instálelo para acceder a la interfaz de usuario web.
phpLDAPadmin (también conocido como PLA) es un cliente LDAP basado en web. Proporciona una administración en varios idiomas fácil de acceder desde cualquier lugar para su servidor LDAP.
Su visor de árbol jerárquico y la funcionalidad de búsqueda avanzada hacen que navegar y administrar su directorio LDAP sea intuitivo. Dado que es una aplicación web, este navegador LDAP funciona en muchas plataformas, lo que hace que su servidor LDAP sea fácilmente administrable desde cualquier ubicación.
Para concluir, phpLDAPadmin es el navegador LDAP perfecto tanto para profesionales como para principiantes de LDAP. Su base de usuarios se compone principalmente de profesionales de la administración LDAP. Para instalarlo, debe ejecutar el siguiente comando:
yum -y install phpldapadmin
2) Configuración Ldap
Para empezar, actualizaremos el archivo /etc/openldap/ldap.conf. El archivo de configuración ldap.conf se utiliza para establecer los valores predeterminados de todo el sistema que se aplicarán al ejecutar clientes ldap. Los usuarios pueden crear un archivo de configuración opcional, ldaprc o .ldaprc, en su directorio de inicio que se utilizará para anular el archivo de valores predeterminados de todo el sistema.
Para la configuración básica, necesitamos cambiar solo 2 parámetros: BASE y URI. Puede utilizar cualquier editor a su conveniencia. En este ejemplo usaremos vi.
vi /etc/openldap/ldap.conf
BASE dc=example,dc=com URI ldap://localhost
BASE: especifica el DN base predeterminado que se utilizará al realizar la operación ldap. La base debe especificarse como un nombre distinguido en formato LDAP.
URI: especifica los URI de un servidor LDAP al que debe conectarse la biblioteca LDAP. El esquema de URI puede ser cualquiera de ldap, ldaps o ldapi, que se refieren a LDAP sobre TCP, LDAP sobre SSL (TLS) y LDAP sobre IPC (sockets de dominio Unix), respectivamente. El nombre de cada servidor se puede especificar como un nombre de estilo de dominio o un literal de dirección IP. Opcionalmente, el nombre del servidor puede ir seguido de un ‘:’ y el número de puerto en el que está escuchando el servidor LDAP. Si no se proporciona ningún número de puerto, se utiliza el puerto predeterminado para el esquema (389 para ldap: //, 636 para ldaps: //). Para LDAP sobre IPC, el nombre es el nombre del socket y no se requiere ni se permite ningún puerto.A continuación, debemos copiar el archivo slapd.conf.obsolete al directorio / etc / openldap /.
Más adelante actualizaremos este archivo.
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
El archivo slapd.conf consta de tres tipos de información de configuración: global, específica del backend y específica de la base de datos. La información global se especifica primero, seguida de la información asociada con un tipo de backend particular, que luego es seguida por la información asociada con una instancia de base de datos en particular. Las directivas globales se pueden anular en las directivas de backend y / o de base de datos, y las directivas de backend se pueden anular mediante directivas de base de datos.
Las líneas en blanco y las líneas de comentarios que comienzan con un carácter «https://linoxide.com/linux-how-to/install-openldap-2-different-hosts-configure-mirror-mode/#» se ignoran. Si una línea comienza con un espacio en blanco, se considera una continuación de la línea anterior (incluso si la línea anterior es un comentario).
Nota: este paso es opcional.
Parece que cada vez más, el consejo de OpenLDAP es utilizar DB_CONFIG en lugar de otros atributos de configuración o directivas slapd.conf. Cuando esto sea posible, se indicará en cada directiva.
La decisión de usar o no un archivo DB_CONFIG es simple: si le importa el rendimiento, úselo. Si no te importa, olvídalo. PERO si elige no usar un DB_CONFIG, DEBE usar una directiva de punto de control. Cada vez más, el consejo de OpenLDAP parece ser utilizar DB_CONFIG en lugar de pasar los parámetros a través de slapd.conf.
cp /usr/share/openldap-servers/DB_CONFIG.example /etc/openldap/DB_CONFIG
Luego, necesitamos generar nuestra contraseña de root LDAP con el comando slappasswd. Simplemente ejecute:
slappasswd
Slappasswd se usa para generar un valor userPassword adecuado para usar con ldapmodify, slapd.conf rootpw directiva de configuración o la slapd-config olcRootPW directiva de configuración. Una vez que ejecute el comando y le solicite la contraseña, verá la contraseña SSHA. Usaremos esta contraseña de root a través de este artículo. Así que tome nota de esto y déjelo a un lado.
Ahora, necesitamos enmendar el archivo /etc/openldap/slapd.conf con su DN y contraseña que acaba de generar. Básicamente, habría 2 filas donde necesita su nombre de dominio:
vi /etc/openldap/slapd.conf
navegue a la sección «definiciones de la base de datos» y actualice el sufijo y rootdn con su DN y pegue la contraseña SSHA completa junto al rootpw
suffix "dc=example,dc=com" rootdn "cn=manager,dc=example,dc=com" rootpw {SSHA}gHuk69PP7Hxh4mglbRdkg47GQrfBhlt6
En el siguiente paso, modificaremos el archivo /etc/phpldapadmin/config.php para acceder a la GUI web. Busque las siguientes filas y actualícelas de la siguiente manera:
// $servers->setValue('login','attr','dn'); $servers->setValue('login','attr','uid'); → $servers->setValue('login','attr','dn'); // $servers->setValue('login','attr','uid');
Aquí estamos especificando un atributo para usar al iniciar sesión. De forma predeterminada, phpLDAPadmin buscará uid = username (si inicia sesión como nombre de usuario). Si lo deja en blanco o especifica ‘dn’ como acabamos de hacer, phpLDAPadmin usará el DN completo (que proporcionamos en slapd.conf).
Además, descomente la siguiente línea y agregue la dirección IP:
$servers->setValue('server','host','127.0.0.1');
Lo último que debemos hacer para acceder a la interfaz de usuario web de phpLDAPadmin es actualizar el archivo /etc/httpd/conf.d/phpldapadmin.conf para enumerar las direcciones IP que pueden conectarse a la interfaz de usuario web. De forma predeterminada, el archivo debería tener el siguiente aspecto:
# # Web-based tool for managing LDAP servers # Alias /phpldapadmin /usr/share/phpldapadmin/htdocs Alias /ldapadmin /usr/share/phpldapadmin/htdocs Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from ::1
Si no es así, actualice como se describe arriba.
3) Probar y ejecutar
Ejecute el siguiente conjunto de comandos para realizar una prueba completa de configuración:
rm -rf /etc/openldap/slapd.d/* chown -R ldap. /etc/openldap/slapd.d/ chown -R ldap. /var/lib/ldap/ slaptest -u slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
Si la prueba se ejecutó correctamente, continúe con el siguiente paso: habilitar LDAP para el inicio automático del servicio en el inicio del sistema y el inicio del servicio LDAP
chkconfig slapd on service httpd restart service slapd restart
Puede verificar si LDAP se está ejecutando con el comando netstat:
netstat -antup | grep -i 389
Ahora, necesitamos crear algunos objetos en nuestro LDAP. Cree varios archivos .ldif con el siguiente contenido:
Organization.ldif dn: dc=example,dc=com dc: corp o: corp objectclass: dcObject objectclass: organization Department.ldif dn: ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: hadoop Groups.ldif dn: ou=groups,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: groups System_admin.ldif dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com cn: system_admin gidnumber: 502 memberuid: admin1 memberuid: admin2 objectclass: posixGroup objectclass: top Users.ldif dn: ou=users,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: users Admin1.ldif dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password Admin2.ldif dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
Ahora, debe agregar estos objetos a su servidor LDAP ejecutando el siguiente comando para cada archivo:
ldapadd -x -W -D “cn=manager,dc=example,dc=com” -f
4) replicación en modo espejo
El modo espejo es una configuración híbrida que proporciona todas las garantías de coherencia de la replicación de un solo maestro, al mismo tiempo que proporciona la alta disponibilidad de varios maestros. En el modo espejo, dos proveedores están configurados para replicarse entre sí (como una configuración multimaestro), pero se emplea una interfaz externa para dirigir todas las escrituras a solo uno de los dos servidores. El segundo proveedor solo se utilizará para escrituras si el primer proveedor falla, momento en el que la interfaz cambiará para dirigir todas las escrituras al segundo proveedor. Cuando un proveedor bloqueado se repara y reinicia, se pondrá al día automáticamente con cualquier cambio en el proveedor en ejecución y se resincronizará.
Argumentos para el modo espejo
Proporciona una solución de alta disponibilidad (HA) para escrituras de directorio (las réplicas manejan las lecturas).
Siempre que un proveedor esté operativo, las escrituras se pueden aceptar de forma segura.
Los nodos de proveedor se replican entre sí, por lo que siempre están actualizados y pueden estar listos para asumir el control (espera activa).
Syncrepl también permite que los nodos del proveedor se vuelvan a sincronizar después de cualquier tiempo de inactividad.
Argumentos en contra del modo espejo
El modo espejo no es lo que se denomina una solución multimaestro. Esto se debe a que las escrituras deben ir a solo uno de los nodos espejo a la vez.
El modo espejo se puede denominar activo-activo en espera, por lo tanto, se necesita un servidor externo (slapd en modo proxy) o un dispositivo (equilibrador de carga de hardware) para administrar qué proveedor está activo actualmente.
Las copias de seguridad se administran de forma ligeramente diferente.
Antes de que podamos iniciar el modo espejo, debe realizar los mismos pasos de instalación y configuración que se proporcionan en este artículo (excepto la parte con la parte * .ldif, todos los objetos se replicarán después de configurar el modo espejo) en otro host; lo llamaremos – host esclavo.
Una vez que haya instalado y configurado correctamente LDAP en el host esclavo, debe actualizar el archivo /etc/openldap/slapd.conf del maestro (primer host configurado) de la siguiente manera:
una. Descomentar modueload syncprov.la
B. Agregue la siguiente configuración al archivo:
##### Mirror Mode serverID 001 # Consumer syncrepl rid=001 provider=ldap://slave.example.com bindmethod=simple binddn="cn=manager,dc=example,dc=com" credentials="slave_userPassword_from_slappasswd" searchbase="dc=example,dc=com" attrs="*,+" type=refreshAndPersist interval=00:00:01:00 retry="60 +" # Provider overlay syncprov syncprov-checkpoint 50 1 syncprov-sessionlog 50 mirrormode on
Luego, debe actualizar los esclavos /etc/openldap/slapd.conf de la siguiente manera:
una. Descomentar moduleload syncprov.la
B. Agregue la siguiente configuración al final del archivo:
##### Mirror Mode serverID 002 # Consumer syncrepl rid=001 provider=ldap://master.example.com bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials="master_userPassword_from_slappasswd" searchbase="dc=example,dc=com" attrs="*,+" type=refreshAndPersist interval=00:00:01:00 retry="60 +" # Provider overlay syncprov syncprov-checkpoint 50 1 syncprov-sessionlog 50 mirrormode on
¡Eso es! Ejecute la prueba completa con el conjunto de comandos proporcionado y verifique sus objetos esclavos.
Conclusión
Ahora tendrá una arquitectura de directorio que proporciona todas las garantías de coherencia de la replicación de un solo maestro, al mismo tiempo que proporciona la alta disponibilidad de la replicación de varios maestros. Realmente es simple; cada nodo del modo espejo se configura exactamente igual, excepto que el ID de servidor es único, y cada consumidor apunta al otro servidor.