Cómo configurar el servidor OpenLDAP y autenticar la estación de trabajo del cliente

LDAP o el protocolo ligero de acceso a directorios permite a cualquier persona localizar y conectarse a organizaciones, personas y otros recursos como archivos y dispositivos en una red (pública / privada). LDAP sigue el estándar X.500, un estándar para el servicio de directorio en una red que normalmente usa el paradigma cliente / servidor habitual. LDAP es más ligero porque en su versión inicial no incluía funciones de seguridad. El uso principal de los servicios de directorio es almacenar usuarios y datos de objetos en un sistema central y hacer que estos datos estén disponibles para otras aplicaciones principalmente para autenticación o como una libreta de direcciones y podemos lograr esto usando un servidor OpenLDAP. Este artículo cubre cómo configurar el servidor OpenLDAP y autenticar la estación de trabajo del cliente mediante el protocolo ligero de acceso a directorios en Ubuntu 16.04
Este tutorial cubre cómo configurar el servidor OpenLDAP y autenticar la estación de trabajo del cliente mediante el protocolo ligero de acceso a directorios en Ubuntu 16.04.
Usos de LDAP
→ LDAP mantiene a los usuarios y otros objetos de red en una base de datos central.
→ LDAP almacena información como información de texto sin formato, imágenes, datos binarios, certificados de clave pública en la base de datos central.
→ LDAP proporciona servicios de autenticación y autorización como la gestión de inicio de sesión.
→ LDAP también puede almacenar registros DNS en su base de datos.
→ LDAP se puede utilizar como servicio de directorio de páginas amarillas para cualquier organización.
Terminología LDAP
Las terminologías LDAP son parte de la Especificación de directorio X.500, que define los nodos en un directorio LDAP.
CN commonName
L localityName
ST stateOrProvinceName
O nombre de la organización
OU organizationUnitName
C countryName
CALLE calle Dirección
Componente de dominio de DC
ID de usuario de UID
DN Nombre distinguido
El último, es decir, DN (nombre distinguido) es una serie de pares clave / valor separados por comas que se utilizan para identificar entradas de forma única en la jerarquía del directorio. El DN es en realidad el nombre completo de la entrada. Por ejemplo, la cadena «CN = India, OU = Grupos de distribución, DC = gp, DC = gl, DC = linóxido, DC = com» es una ruta de una estructura jerárquica llamada Árbol de información del directorio y debe leerse de derecha (raíz) a izquierda (hoja).
En este artículo, configuraremos el servidor OpenLDAP en Ubuntu 16 y configuraremos un cliente OpenLDAP que recuperará las credenciales de inicio de sesión del servidor y autenticará a los usuarios.
Dirección IP | |
Servidor OpenLDAP |
10.0.0.196 |
Cliente OpenLDAP |
10.0.0.33 |
Instalar el servidor OpenLDAP
Instale OpenLDAP y sus utilidades usando apt-get y habilítelo durante el inicio. Durante la instalación, le pedirá que proporcione la contraseña de administrador.
# sudo apt-get update # apt-get install slapd ldap-utils # systemctl enable slapd
Usando netstat, verifique si el slapd se está ejecutando en el puerto no 389
# netstat -pltn
Ubuntu 16 se envía con firewall UFW de forma predeterminada. Si UFW está habilitado, abra el puerto no 389 usando los siguientes comandos.
# sudo ufw allow 389/tcp # sudo ufw reload
El paquete OpenLDAP se ha instalado y ahora vamos a reconfigurar todos los valores predeterminados que se envían con ubuntu. Ejecute el siguiente comando para abrir la herramienta de configuración de paquetes.
# sudo dpkg-reconfigure slapd
La herramienta de configuración del paquete hará una serie de preguntas para volver a configurar OpenLDAP
→ ¿Omitir la configuración del servidor OpenLDAP?
→ Nombre de dominio DNS: linoxide.com
→ Nombre de la organización: linoxido
→ Ingrese la contraseña y confírmela: contraseña
→ Backend de base de datos para usar: HDB
→ ¿Desea que se elimine la base de datos cuando se purgue slapd?
→ ¿Mover la base de datos antigua?
→ ¿Permitir el protocolo LDAPv2?
Reiniciar OpenLDAP
# systemctl restart slapd
Puede cambiar la contraseña de administrador para OpenLDAP en una etapa posterior usando el siguiente comando.
# ldappassword
En esta etapa, hemos instalado y reconfigurado el servidor OpenLDAP. Para encontrar la entrada de administrador en la base de datos de OpenLDAP, usaremos el comando ldapsearch. ldapsearch solicitará la contraseña de administrador que hemos proporcionado durante la reconfiguración de OpenLDAP.
# ldapsearch -x -W -D cn=admin,dc=linoxide,dc=com -b dc=linoxide,dc=com -LLL Enter LDAP Password: dn: dc=linoxide,dc=com objectClass: top objectClass: dcObject objectClass: organization o: linoxide dc: linoxide dn: cn=admin,dc=linoxide,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e1NTSEF9MkdIK2p1enlxQ3hFNmtMSE56TUE5NzZzOFQxVGdxSUE=
Agregar unidad organizativa (OU)
Para agregar OU, crearemos un archivo LDIF (Formato de intercambio de datos LDAP) que es el formato de texto estándar diseñado para intercambiar información desde el servidor LDAP. Agrega una unidad organizativa con el nombre «grupos».
# vi ou_group.ldif dn: ou=groups,dc=linoxide,dc=com changetype: add objectClass: organizationalUnit objectClass: top ou: groups
Usaremos ldapadd para agregar la unidad organizativa anterior.
# ldapadd -W -D "cn=admin,dc=linoxide,dc=com" -f ou_group.ldif
Modificar la unidad organizativa (OU)
Para modificar una unidad organizativa, cree un archivo ldif con el siguiente contenido. En este ejemplo, estamos agregando una entrada para el código postal a la unidad organizativa existente.
# vi modify_ou.ldif dn: ou=groups,dc=linoxide,dc=com changetype: modify add: postalCode postalCode: 788109 -
Utilice ldapmodify para modificar la unidad organizativa
# ldapmodify -x -W -D "cn=admin,dc=linoxide,dc=com" -f modify_ou.ldif Enter LDAP Password: modifying entry "ou=groups,dc=linoxide,dc=com"
Eliminar unidad organizativa (OU)
Para eliminar una unidad organizativa, use ldapdelete especificando el nombre distinguido de la unidad organizativa
# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "ou=groups,dc=linoxide,dc=com" Enter LDAP Password:
Agregar grupos
Para agregar un grupo posix, crearemos un archivo LDIF para él.
# vi irc_users.ldif dn: cn=ircusers,ou=groups,dc=linoxide,dc=com objectClass: posixGroup objectClass: top cn: ircusers gidNumber: 4000
Use el comando ldapadd como antes para agregar el grupo
# ldapadd -x -W -D "cn=admin,dc=linoxide,dc=com" -f irc_users.ldif Enter LDAP Password: adding new entry "cn=ircusers,ou=groups,dc=linoxide,dc=com"
Modificar grupos
Defina el archivo ldif para modificar grupos, agregaremos ‘descripción’ para el grupo ircusers existente.
# vi modify_irc_users.ldif dn: cn=ircusers,ou=groups,dc=linoxide,dc=com changetype: modify add: description description: Groups under OU
Utilice ldapmodify para modificar el grupo
# ldapmodify -x -W -D "cn=admin,dc=linoxide,dc=com" -f modify_irc_users.ldif Enter LDAP Password: modifying entry "cn=ircusers,ou=groups,dc=linoxide,dc=com"
Eliminar grupos
Para eliminar un grupo, use ldapdelete especificando el nombre distinguido del grupo.
# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "cn=ircusers,ou=groups,dc=linoxide,dc=com" Enter LDAP Password:
Agregar usuario
Primero genere la contraseña SSHA para el usuario que usa slappasswd
# slappasswd -h {SSHA} -s mypass {SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT
A continuación, cree un archivo ldif para un usuario
# vi mike_user.ldif dn: uid=mike,ou=groups,dc=linoxide,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: mike sn: smith givenName: mike cn: mike uidNumber: 4000 gidNumber: 4000 userPassword: {SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT loginShell: /bin/bash homeDirectory: /home/mike
Asegúrese de proporcionar el número de identificación de grupo correcto (gidNumber) que es 4000 en nuestro caso. Agregue el usuario anterior usando el comando ldapadd.
# ldapadd -x -W -D "cn=admin,dc=linoxide,dc=com" -f mike_user.ldif Enter LDAP Password: adding new entry "uid=mike,ou=users,dc=linoxide,dc=com"
Borrar usuario
Para eliminar un usuario use el comando ldapdelete
# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "uid=mike,ou=groups,dc=linoxide,dc=com"
Verifique si la entrada ha sido eliminada usando el siguiente comando.
# ldapsearch -x -b "dc=linoxide,dc=com"
Modificar usuario
Para modificar un usuario, cree un archivo ldif y luego use ldapmodify para lograrlo.
# vi modify_mike.ldif dn: uid=mike,ou=groups,dc=linoxide,dc=com changetype: modify replace: smith sn: smt - add: title title: Grand Poobah - add: jpegPhoto jpegPhoto: /tmp/smith.png
Ahora ejecute el comando ldapmodify
# ldapmodify -x -W -D "cn=admin,dc=linoxide,dc=com" -f modify_mike.ldif Enter LDAP Password: modifying entry "uid=mike,ou=users,dc=linoxide,dc=com"
Buscar en la base de datos OpenLDAP
Desde el propio servidor, ahora puede verificar si puede leer la base de datos. El siguiente comando volcará el directorio completo.
# ldapsearch -x -LLL -H ldap:/// -b dc=linoxide,dc=com dn: dc=linoxide,dc=com objectClass: top objectClass: dcObject objectClass: organization o: linoxide dc: linoxide dn: cn=admin,dc=linoxide,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator dn: ou=groups,dc=linoxide,dc=com objectClass: organizationalUnit objectClass: top ou: groups dn: ou=users,dc=linoxide,dc=com objectClass: organizationalUnit objectClass: top ou: users dn: cn=dbagrp,ou=groups,dc=linoxide,dc=com objectClass: top objectClass: posixGroup gidNumber: 678 cn: dbagrp dn: cn=ircusers,ou=groups,dc=linoxide,dc=com objectClass: posixGroup objectClass: top cn: ircusers gidNumber: 4000 dn: uid=mike,ou=users,dc=linoxide,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: mike sn: smith givenName: mike cn: mike uidNumber: 4000 gidNumber: 4000 loginShell: /bin/bash homeDirectory: /home/mike
Usando phpMyAdmin
Hemos creado / editado / buscado OU, grupos, usuarios a través de la línea de comando. Sin embargo, puede hacer lo mismo utilizando una interfaz web llamada phpldapadmin. El phpldapadmin se envía junto con ubuntu por defecto. Utilice apt-get para instalarlo.
# sudo apt-get install phpldapadmin
Edite el archivo de configuración de phpldapadmin para reflejar la estructura de directorios que hemos creado anteriormente.
# vi /etc/phpldapadmin/config.php $servers->setValue('server','name','My LDAP Server'); $servers->setValue('server','host','LDAP-SERVER-IP'); $servers->setValue('server','base',array('dc=linoxide,dc=com')); $servers->setValue('login','auth_type','session'); $servers->setValue('login','bind_id','cn=admin,dc=linoxide,dc=com');
Ahora puede acceder a phpldapadmin a través de http: // LDAP-SERVER-IP / phpldapadmin. Inicie sesión con el usuario como estructura de directorio predeterminada y la contraseña como ‘contraseña’. Para proteger con contraseña la ubicación de phpldapadmin, cree un usuario usando apache utils htpasswd.
# sudo htpasswd -c /etc/apache2/htpasswd ldapadminuser New password: Re-type new password: Adding password for user ldapadminuser
Agregue la siguiente sección en el archivo de configuración principal de apache /etc/apache2/apache2.conf
# vi /etc/apache2/apache2.conf <Location /phpldapadmin> AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/apache2/htpasswd Require valid-user </Location>
Reiniciar Apache
# systemctl restart apache2
Actualice la página phpldapadmin, verá la solicitud de contraseña que configuró usando htpasswd utils.
Instalar el cliente OpenLDAP
Instalaremos algunos paquetes en la máquina cliente para que la autenticación funcione correctamente con un servidor OpenLDAP.
# apt-get install ldap-auth-client nscd
Se le hará una serie de preguntas similares a las que se hicieron durante la configuración del servidor.
→ Identificador uniforme de recursos del servidor LDAP: ldap: //10.0.0.196
→ Nombre distinguido de la base de búsqueda: dc = linoxide, dc = com
→ Versión LDAP: 3
→ Hacer administrador de base de datos raíz local:
→ ¿La base de datos LDAP requiere inicio de sesión?
→ Cuenta LDAP para root: cn = admin, dc = linoxide, dc = com
→ Contraseña de la cuenta raíz LDAP: contraseña
Siempre puede cambiar la configuración ejecutando el siguiente comando en la terminal.
# sudo dpkg-reconfigure ldap-auth-config
Configurar el cliente OpenLDAP
Necesitamos editar el archivo /etc/nsswitch.conf para informar a los archivos de autenticación sobre la presencia de un servidor OpenLDAP. Edite el archivo /etc/nsswitch.conf y modifique las líneas que comienzan con passwd, group, shadow para que se vean como se muestra a continuación.
# vi /etc/nsswitch.conf passwd: ldap compat group: ldap compat shadow: ldap compat
Edite /etc/pam.d/common-session y la siguiente línea al final del archivo.
# vi /etc/pam.d/common-session .................... .................... session required pam_mkhomedir.so skel=/etc/skel umask=0022
Configurar nss usando auth-client-config con ldap
# auth-client-config -t nss -p lac_ldap # cd /usr/share/pam-configs/ # vi mkhomedir Name: Create home directory on login for Linoxide Default: yes Priority: 0 Session-Type: Additional Session-Interactive-Only: yes Session: required pam_mkhomedir.so umask=0022 skel=/etc/skel
La última línea del archivo anterior creará un directorio de inicio en la máquina cliente cuando un usuario LDAP inicie sesión y no tenga un directorio de inicio. Ahora actualice la autenticación pam.
# pam-auth-update
Habilite la línea que dice «Crear directorio de inicio al iniciar sesión ……» y seleccione ‘Aceptar’. Reinicie nscd.
# /etc/init.d/nscd restart [ ok ] Restarting nscd (via systemctl): nscd.service.
Enumere la entrada del archivo de contraseña usando getent. La lista incluirá el usuario LDAP ‘mike’ que hemos creado anteriormente en el servidor.
# getent passwd mike:x:4000:4000:mike:/home/mike:/bin/bash
Si no ha instalado SSH anteriormente, instálelo usando SSH.
# apt-get install ssh
Asegúrese de haber configurado lo siguiente en sí en / etc / ssh / sshd_config
PermitRootLogin yes UsePAM yes
Conéctese al servidor LDAP mediante SSH
# ssh mike@10.0.0.33
Otra forma de obtener el shell de mike es usando sudo en la máquina cliente.
# su - mike mike@ip-10-0-0-33:~$
Al configurar el servidor OpenLDAP, hemos creado el administrador LDAP con el nombre distinguido «cn = admin, dc = linoxide, dc = com». Este valor admin coincide con el grupo de administradores que se encuentra en Ubuntu de forma predeterminada. Los usuarios de LDAP que hemos creado para el grupo de administración tendrán acceso al comando sudo ya que hay una entrada para él en el archivo / etc / sudoers como se muestra a continuación:
%admin ALL=(ALL) ALL
Para revocar el acceso a sudo para el grupo de administración, comente la línea anterior colocando un hash al principio de la línea. También puede otorgar acceso sudo a un usuario específico agregando% user ALL = (ALL) ALL al archivo / etc / sudoers.
Conclusión
Las ventajas de utilizar el servidor OpenLDAP es que la información de toda una organización se puede colocar en un depósito central. LDAP se puede utilizar como un directorio central accesible desde cualquier lugar de la red en lugar de administrar usuarios de cada grupo por separado. Además, LDAP admite Secure Sockets Layer (SSL) y Transport Layer Security (TLS), por lo que los datos confidenciales pueden protegerse de miradas indiscretas. Navegar Documentación de OpenLDAP para saber más sobre la administración de OpenLDAP.