LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero/Simplificado de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también se considera
una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.

Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres (personas u organizaciones) que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos. Para entender mejor, es un libro o carpeta, en la cual se escriben nombres de personas, teléfonos y direcciones, y se ordena alfabéticamente.

Crea dos máquinas virtuales en el sistema que prefieras que tengan comunicación por red entre ambas, llamémoslas servidor y cliente para que sean más claros todos los puntos.

Configurar un servidor LDAP

Instalación LDAP

Instalamos el siguiente paquete apt install slapd

Asignamos contraseña al Administrador

Para ello instalamos el paquete apt install ldap-util el cual nos permite usar las diferentes opciones de ldap

Para ver la estructura del arbol ejecutamos lo siguiente ldapsearch -x -h localhost podemos ver que esta vacio para ello vamos a asignar un nuevo nombre de dominio DNS y una contraseña vamos a rellenarlos de la siguiente forma dpkg-reconfigure -plow slapd:

		1º Dominio DNS: 	jlramirez.gonzalonazareno.org
		2º Nombre organizacion: juanlu
		3º Contraseña:		**********
		4º Motor BD:		MDB
		5º Borrar datos al borrar slapd: si
		6º Mover BD antigua: 	si
		7º Permitir protocolo LDAPv2: no
Info! El nombre de dominio, el nombre de la organización y la contraseña puede variar según a nuestros intereses.

Creamos una unidad organizativa

Creamos un directorio mkdir LDAP y dentro un fichero con extension .ldif y se llamara unidadorganizativa.ldif

dn: ou=People,dc=jlramirez,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: organizationalUnit
ou:People

dn: ou=Group,dc=jlramirez,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Group

Lanzamos el fichero .ldif

root@servidorldap:/home/vagrant/LDAP# ldapadd -x -D 'cn=admin,dc=jlramirez,dc=gonzalonazareno,dc=org' -W -f unidadorganizativa.ldif
Enter LDAP Password: 
adding new entry "ou=People,dc=jlramirez,dc=gonzalonazareno,dc=org"

adding new entry "ou=Group,dc=jlramirez,dc=gonzalonazareno,dc=org"

Configuración grupos y usuarios

Creamos otro fichero .ldif el cual se va a guardar la configuración de los grupos

Grupos

dn: cn=grupo1,ou=Group,dc=jlramirez,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixGroup
gidNumber: 2000
cn: grupo1

Usuarios

Procedemos ahora a agregar un usuario a «People», para ello vamos a generar una contraseña en «SSHA» con el siguiente comando:

root@servidorldap:/home/vagrant/LDAP# slappasswd 
New password: 
Re-enter new password: 
{SSHA}AGTUjU6fJAUUalS30Ps7NZnW7d5JOzOw

Y creamos el fichero usuario.ldif

dn: uid=usuario,ou=People,dc=jlramirez,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: person
cn: usuario1
uid: usuario1
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/users/pruebausuario
loginShell: /bin/bash
userPassword: {SSHA}AGTUjU6fJAUUalS30Ps7NZnW7d5JOzOw
sn: apellido
mail: pruebausuario@prueba.com
givenName: pruebausuario

Lanzamos los fichero .ldif(Usuarios y Grupos)

Usuarios

root@servidorldap:/home/vagrant/LDAP# ldapadd -x -D "cn=admin,dc=jlramirez,dc=gonzalonazareno,dc=org" -W -f usuario.ldif
Enter LDAP Password: 
adding new entry "uid=usuario,ou=People,dc=jlramirez,dc=gonzalonazareno,dc=org"
root@servidorldap:/home/vagrant/LDAP# ldapadd -x -D "cn=admin,dc=jlramirez,dc=gonzalonazareno,dc=org" -W -f grupos.ldif
Enter LDAP Password: 
adding new entry "cn=grupo1,ou=Group,dc=jlramirez,dc=gonzalonazareno,dc=org"

Y podemos observar en «Apache Directory» que ya tenemos el árbol completo creado:

Instalar y configurar un servidor NFS

NFS depende de varios paquete por tanto vamos a instalarlos todos

portmap

El servicio portmap es un demonio de asignación de puertos dinámico para servicios RPC, tales como NIS y NFS. Tiene mecanismos de autenticación débiles y la habilidad de asignar un amplio rango de puertos para los servicios que controla. Por estas razones, es difícil de asegurar.

Instalamos portamap apt install portmap

NFS y sus dependencias

El Network File System (Sistema de archivos de red), o NFS, es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales.

Instalamos nfs y sus dependencias en la maquina que va actuar como servidor apt install nfs-common nfs-kernel-server

Ahora procedemos a realizar las configuraciones necesarias para su funcionamiento:

Configuracion NFS

Lo primero sera crear una carpeta donde vamos a alojar todos los «homes» de los usuarios y asignamos los permisos y propietarios necesarios:

root@servidorldap:/home/vagrant# mkdir /home/users/
root@servidorldap:/home/vagrant# mkdir /home/users/pruebausuario
root@servidorldap:/home/vagrant# chown 2001:2000 /home/users/pruebausuario

Despues editamos el fichero con la ruta para que sepa llegar a la ruta del directorio para ello modificamos el fichero /etc/exports y añadimos la siguiente linea:

/home/users/    192.168.100.0/24(rw,fsid=0,subtree_check)
Info! En caso de venir alguna linea, borrala o modificala para que quede igual que la anterior.

E iniciamos el servicio /etc/init.d/nfs-kernel-server start

Ya solo nos queda exportar el sistema de archivos exportfs -av

Podremos comprobar que el servidor esta funcionando para ello ejecutamos lo siguiente rpcinfo -p

oot@servidorldap:/home/vagrant# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  52307  status
    100024    1   tcp  34711  status
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049
    100227    3   tcp   2049
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049
    100227    3   udp   2049
    100021    1   udp  44938  nlockmgr
    100021    3   udp  44938  nlockmgr
    100021    4   udp  44938  nlockmgr
    100021    1   tcp  37994  nlockmgr
    100021    3   tcp  37994  nlockmgr
    100021    4   tcp  37994  nlockmgr
    100005    1   udp  48316  mountd
    100005    1   tcp  33501  mountd
    100005    2   udp  46715  mountd
    100005    2   tcp  40560  mountd
    100005    3   udp  60158  mountd
    100005    3   tcp  34461  mountd

Nos dirigimos al cliente y montamos la unidad y creamos un fichero para su comprobacion:

root@clienteldap:/home/vagrant# mount -t nfs 192.168.100.1:/home/users/pruebausuario /home/vagrant/prueba/
root@clienteldap:/home/vagrant# cd prueba/
root@clienteldap:/home/vagrant/prueba# ls -l
total 0
root@clienteldap:/home/vagrant/prueba# touch prueba.txt
root@clienteldap:/home/vagrant/prueba# ls -l
total 0
-rw-r--r-- 1 nobody nogroup 0 Oct 24 08:28 prueba.txt
root@clienteldap:/home/vagrant/prueba# 

Info! Podemos observar en la foto que el usuario y el grupo no son reconocidos y es porque hemos creado ese fichero con un usuario que no tiene permisos sobre ese directorio ya que no tenemos LDAP en el cliente (Paso que procedemos a configurar ahora)

Configura PAM de cliente y servidor

Para esto vamos a utilizar libpam-ldapd para que los usuarios del LDAP puedan hacer login en ambas máquinas utilizando nombre de usuario y contraseña.

Cliente

Instalamos los siguientes paquetes apt install libnss-ldapd libpam-ldapd nscd

Y configuramos asi:

Por ultimo modificamos el fichero /etc/ldap/ldap.conf para que quede asi

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

BASE    dc=jlramirez,dc=gonzalonazareno,dc=org
URI     ldap://192.168.100.1

SIZELIMIT       12
TIMELIMIT       15
DEREF           never

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt
Info! Como he dicho antes los datos depende de tu entorno.

Y nos logueamos login

root@clienteldap:/home/vagrant# login
clienteldap login: usuario1
Password: 
Last login: Mon Oct 24 17:29:06 GMT 2016 on pts/0
Linux clienteldap 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No directory, logging in with HOME=/
usuario@clienteldap:/$ 

Servidor

Realizamos los mismo pasos que para el Cliente | e intentamos loguearnos login

root@servidorldap:/home/vagrant# login
servidorldap login: usuario1
Password: 
Linux servidorldap 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
usuario@servidorldap:~$ 

Podemos observar que si nos logueamos desde el servidor el home ya esta montado, pero si nos logueamos desde el cliente no tenemos «home»

Configura nsswitch

Con ayuda de la biblioteca libnss-ldapd para que tanto cliente como servidor reconozcan los UIDs y GIDs de los usuarios del LDAP (ten la precaución de que estos valores no solapen con los usuarios de cada sistema)

Vamos a proceder a configurar nsswitch para que se reconozcan los UIDs yGIDs, para ello vamos a añadir ldap:

Info! Puede ser que ya venga añadido ldap, sino es asi añadelo para que quede asi.
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
gshadow:        files

hosts:          files dns ldap
networks:       files ldap

protocols:      db files ldap
services:       db files ldap
ethers:         db files ldap
rpc:            db files ldap

netgroup:       nis ldap
aliases:        ldap

Si necesitaramos reconfigurar el libpam-ldapd ejecutamos un dpkg-reconfigure libpam-ldapd:

Por ultimo montamos la carpeta creada para que el usuario tenga acceso a ella y la monte como directorio:

root@clienteldap:/home/users# mount -t nfs 192.168.100.1:/home/users/ /home/users/

Tambien podemos hacerlo de forma permanente, solo con añadir la siguiente linea en el fichero «/etc/fstab»

192.168.100.1:/home/users      /home/users        nfs     rw      0       0

Y ahora al acceder al usuario de ldap observamos que ya tiene el directorio «home» montado en «pruebausuario».

root@clienteldap:/home/users# login
clienteldap login: usuario1
Password: 
Last login: Mon Oct 24 17:31:31 GMT 2016 on pts/0
Linux clienteldap 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
usuario@clienteldap:~$ pwd
/home/users/pruebausuario
usuario@clienteldap:~$ 

Configura libpam-mkhomedir

Este paquete comprueba si no existe el home del usuario, sino es asi se cree al vuelo la primera vez que entre.

Añadimos la siguiente linea en etc/pam.d/common-session al final del fichero

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

Podemos observar que al iniciar sesión en el usuario creado nuevo, nos da un Permiso denegado.

Para ello nos vamos a /etc/exports y añadimos lo siguiente no_root_squash:

Y quedara asi:

/home/users/    192.168.100.0/24(rw,fsid=0,subtree_check,no_root_squash)

Reiniciamos el servicio /etc/init.d/nfs-kernel-server restarty exportamos el fichero exportfs -av:

Por ultimo comprobamos que al iniciar sesión se crea automáticamente la carpeta:

root@clienteldap:/home/vagrant# login 
clienteldap login: usuario3
Password: 
Last login: Mon Oct 24 19:15:28 GMT 2016 on pts/0
Linux clienteldap 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Creating directory '/home/users/usuario3'.
usuario3@clienteldap:~$ pwd
/home/users/usuario3
usuario3@clienteldap:~$