LDAP#
¿Qué es LDAP?#
LDAP es un protocolo que ofrece el acceso a un servicio de directorio implementado sobre un entorno de red, con el objeto de acceder a una determinada información. Puede ejecutarse sobre TCP/IP o sobre cualquier otro servicio de trasferencia orientado a la conexión.
LDAP son las siglas en inglés de Lightweight Directory Access Protocol (Protocolo Ligero de Acceso a Directorios) y podemos considerarlo como un sistema de almacenamiento de red (normalmente construido como una base de datos) al que se pueden realizar consultas.
¿Qué es OpenLDAP?#
OpenLDAP es un desarrollo del protocolo LDAP, implementado con la filosofía del software libre y código abierto. El proyecto OpenLDAP se inició en agosto de 1998 y está sustentado por una entidad sin ánimo de lucro llamada OpenLDAP Foundation, creada por el desarrollador estadounidense Kurt D. Zeilenga para coordinar las actividades del proyecto.
¿Cómo funcionan LDAP y OpenLDAP?#
El modelo de información de LDAP se basa en entradas, entendiendo por entrada un conjunto de atributos identificados por un nombre global único (Distinguished Name – DN), que se utiliza para identificarla de forma específica. Las entradas se organizan de forma lógica y jerárquica mediante un esquema de directorio, que contiene la definición de los objetos que pueden formar parte del directorio.
Entre los atributos que suelen emplearse habitualmente, encontramos los siguientes, aunque puede haber muchos más:
uid (user id): Identificación única de la entrada en el árbol.
objectClass: Indica el tipo de objeto al que pertenece la entrada.
cn (common name): Nombre de la persona representada en el objeto.
givenname: Nombre de pila.
sn (surname): Apellido de la persona.
o (organization): Entidad a la que pertenece la persona.
u (organizational unit): El departamento en el que trabaja la persona.
mail: dirección de correo electrónico de la persona.
Instalación del servidor LDAP#
Puedes seguir los pasos en el siguiente vídeo LDAP, vídeo LDAP+Ansible, vídeo LDAP+NFS+Autofs+Slurm
sudo apt-get install slapd ldap-utils
#contraseña slapd : alumno
NO
dominio DNS : ldap.tunombre.local
organización : tunombre
contraseña : alumno
HDB
#Si necesitamos reconfigurarlo
sudo dpkg-reconfigure slapd
Puedes chequear que se ha creado tu LDAP utilizando el comando:
sudo ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local"
Crear la estructura del directorio#
Una vez configurado el servidor, deberemos configurar la estructura básica del directorio. Es decir, crearemos la estructura jerárquica del árbol (DIT – Directory Information Tree).
Una de las formas más sencillas de añadir información al directorio es utilizar archivos LDIF (LDAP Data Interchange Format). En realidad, se trata de archivos en texto plano, pero con un formato particular que debemos conocer poder construirlos correctamente
El formato básico de una entrada es así:
# comentario
dn: <nombre global único>
<atributo>: <valor>
<atributo>: <valor>
...
<atributo> puede ser un tipo de atributo como cn o objectClass, o puede incluir opciones como cn;lang_en_US o userCertificate;binary.
Entre dos entradas consecutivas debe existir siempre una línea en blanco. Si una línea es demasiado larga, podemos repartir su contenido entre varias, siempre que las líneas de continuación comiencen con un carácter de tabulación o un espacio en blanco.
Por ejemplo, las siguientes líneas son equivalentes:
dn: uid=alumno1, ou=ldap, dc=tunombre,dc=local
dn: uid=alumno1, ou=ldap,
dc=tunombre,dc=es
Vamos insertar los siguientes objetos en el LDAP
$ sudo cat tunombre.ldif
dn: ou=usuarios, dc=ldap, dc=tunombre, dc=local
objectClass: organizationalUnit
ou: usuarios
dn: ou=grupos,dc=ldap, dc=tunombre, dc=local
objectClass: organizationalUnit
ou: grupos
Añadimos la información a la base de datos OpenLDAP. Con el comando ldapadd:
sudo ldapadd -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -W -f tunombre.ldif
Para comprobar que todo esta bien, podemos ejecutar:
sudo ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local"
Para añadir nuevos usuarios
$ sudo cat usuarios.ldif
dn: uid=tunombre1,dc=ldap,dc=tunombre,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: tunombre1
sn: sntunombre1
givenName: tunombre1
cn: tunombre1
displayName: tunombre1
uidNumber: 1010
gidNumber: 501
userPassword: tunombre1
loginShell: /bin/bash
homeDirectory: /home/tunombre1
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: tunombre1@ldap.tunombre.local
postalCode: 28027
Para cargar el nuevo usuario en el directorio.
sudo ldapadd -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -W -f usuarios.ldif
Para añadir un grupo
$ sudo cat grupo.ldif
dn: cn=tuapellido,ou=grupos,dc=ldap,dc=tunombre,dc=local
objectClass: posixGroup
cn: GA
gidNumber: 501
Para añadir la información al ldap
sudo ldapadd -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -W -f grupo.ldif
Cuando añadas nuevos usuarios, recuerda que los valores para los atributos uidNumber y homeDirectory deben ser diferentes para cada usuario.
Lo mismo ocurre con el atributo gidNumber de los grupos.
Además, los valores de los campos uidNumber y gidNumber no deben coincidir con el UID y GID de ningún usuario y grupo local.
Ahora podemos comprobar que el contenido anterior se ha añadido correctamente. Para lograrlo podemos utilizar, por ejemplo, el comando ldapsearch , que nos permite hacer una búsqueda en el directorio.:
sudo ldapsearch -xLLL -b "dc=ldap,dc=tunombre,dc=local" uid=tunombre1
Otra opción interesante para comprobar el contenido del directorio es utilizar el comando slapcat. Su cometido es mostrar el contenido completo del directorio LDAP. Además, esta información se obtiene en formato LDIF, lo que nos permitirá volcarla a un fichero y exportar la base de datos de un modo muy sencillo.
Editar Objetos:
$ cat change.ldif
dn: uid=tunombre4,dc=ldap,dc=tunombre,dc=local
changetype: modify
replace: uidNumber
uidNumber: 1014
$ sudo ldapmodify -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -f change.ldif -W
Añadir Objetos:
$ cat add.ldif
dn: uid=tunombre4,dc=ldap,dc=tunombre,dc=local
changetype: modify
add: homePhone
homePhone: 1234567
$ sudo ldapmodify -x -D cn=admin,dc=ldap,dc=tunombre,dc=local -f add.ldif -W
Para borrar por ejemplo el objeto tunombre1 :
sudo ldapdelete -x -W -D "cn=admin,dc=ldap,dc=tunombre,dc=local" "uid=tunombre1,dc=ldap,dc=tunombre,dc=local"
Cuando lo borramos, aunque no aparezca nada, si hacemos un ldapsearch veremos que no esta
sudo ldapsearch -xLL -b "dc=ldap,dc=tunombre,dc=local" uid=tunombre1
Para hacer copias de seguridad y restaurarlas utilizamos:
$ slapcat -l backup.ldif #hacemos un backup
#borramos los usuarios, por error ...
sudo ldapdelete -x -W -D "cn=admin,dc=ldap,dc=tunombre,dc=local" "uid=tunombre1......,dc=ldap,dc=tunombre,dc=local"
systemctl stop slapd.service #antes de restaurar paramos el servicio
rm -Rf /var/lib/ldap/* #limpiamos el directorio ldap
slapadd -v -c -l backup.ldif #restauramos
slapindex -v #rehacemos indices
chown -Rf openldap.openldap /var/lib/ldap/*
systemctl start slapd.service
Configuración de los clientes: Autenticación con OpenLDAP#
$ sudo apt-get install libnss-ldap libpam-ldap ldap-utils -y
ldap://172.16.0.10
dc=ldap,dc=tunombre,dc=local
LDAP version : 3
Yes
No
LDAP account for root: cn=admin,dc=ldap,dc=tunombre,dc=local
alumno
#reconfigurar : sudo dpkg-reconfigure ldap-auth-config
vi /etc/hosts
172.16.0.10 ldap.tunombre.local
vi /etc/ldap.conf
#Ponemos la siguiente linea al final: 172.16.0.10
sudo pam-auth-update #marcar que se cree el directorio automaticamente
Algunos de estos comandos ya no están actualizados o tienen problemas lo importante es:
/etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
para comprobarlo puedes utilizar el comando:
getent passwd
Hacer que funcione el caché de nombres
apt-get install nscd
Para poder cambiar el password
apt-get install libpam-cracklib