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 utilizando 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 admin contraseña.
# 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
Se ha instalado el paquete OpenLDAP 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 reconfigurar OpenLDAP
→ ¿Omitir la configuración del servidor OpenLDAP?
→ Nombre de dominio DNS: linoxide.com
→ Nombre de la organización: linoxido
→Enter contraseña y confírmela: contraseña
→ Backend de base de datos para usar: HDB
→ ¿Quiere que se elimine la base de datos cuando se depure slapd?
→ ¿Mover la base de datos antigua?
→ ¿Permitir el protocolo LDAPv2?
Reiniciar OpenLDAP
# systemctl restart slapd
Puedes cambiar el admin contraseña para OpenLDAP en una etapa posterior con el siguiente comando.
# ldappassword
En esta etapa, hemos instalado y reconfigurado el servidor OpenLDAP. Para encontrar la entrada para admin en la base de datos OpenLDAP, usaremos el comando ldapsearch. ldapsearch solicitará admin contraseña 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 esto example, 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 OU
# 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 de forma predeterminada. 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 https: // 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 le 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 base de datos raíz local admin:
→ ¿La base de datos LDAP requiere inicio de sesión?
→ Cuenta LDAP para root: cn =admin, dc = linóxido, 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 [email protected]
Otra forma de obtener el caparazón de mike es usando sudo en la máquina del 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 = linóxido, dc = com “Este valor admin emparejado con el admin grupo que está allí en Ubuntu por defecto. Los usuarios LDAP que hemos creado para admin el grupo tendrá acceso a la sudo comando ya que hay una entrada para él en el archivo / etc / sudoers como a continuación-
%admin ALL=(ALL) ALL
Para revocar el acceso a sudo Para el admin grupo, comente la línea anterior colocando un hash al principio de la línea. También puedes otorgar sudo acceso 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 a los 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.