El servicio de directorio es uno de los pilares básicos en la infraestructura informática de una pequeña – gran empresa ya que permite acceder de forma centralizada desde cualquier ordenador de la empresa. En una estructura de software propietario como Windows la solución a implementar se llama Active Directory, siendo una de las principales soluciones escogidas por su facilidad de uso e implementación así como su potencia. Sin embargo para una estructura de software libre existen posibilidades que ofrecen servicios similares. El primero de ellos es el uso del servicio SAMBA promocionado como controlador de dominio. Esta solución no es más que una replica de un controlador de dominio Windows Server llevado a Linux. La opta posibilidad es utilizar el protocolo LDAP es un vertiente libre, cuyo nombre es OpenLDAP.

Para poder implementar esta solución se necesitan configuraciones tanto en el servidor como en el cliente. Para este ejemplo se utilizarán las siguientes máquinas:

  • Ubuntu Server 16.04 LTS con nombre de red srv-ldap e ip 10.0.0.2
  • Ubuntu Desktop 18.04 LTS con nombre eq-ldap e ip 10.0.0.10

Configuraciones en el servidor

Lo primero que se debe hacer es instalar los paquetes salpd y ldap-utils. El primero de ellos representa el demonio ldap. El segundo paquete son las herramientas necesarias para administrar los objetos que formarán parte de la estructura del servicio

sudo apt-get -y install slapd ldap-utils

En la instalación del demonio slapd se pedirán son datos para la creación de la estructura de directorio y las bases de datos. Si una vez creada se quiere cambiar se puede realizar de nuevo la configuración mediante el comando dpkg-reconfigure slapd. Los datos que se deben indicar son:

  • Nombre DNS del dominio: en el ejemplo se utilizará develop.local
  • Nombre de la organización: coincidirá con la primera parte del nombre del dominio. en el ejemplo será develo
  • Contraseña del administrador del dominio
  • Tipo de base de datos: en el ejemplo se utilizará MDB
  • Permitir el uso del protocolo LDAPv2: se indicará que no ya que en la actualizad se utiliza la versión 3

Una vez terminadas las configuraciones se podrá comprobar la correcta creación de la estructura ejecutando el comando slapcat, el cual muestra todos los objetos del dominio así como el nombre principal.

Por último hay que comprobar que el archivo de configuraciones de ldap /etc/ldap/ldap.conf ha guardado bien la dirección URI, así como el distinguished name del dominio. Lo que debe incluir este fichero es lo siguiente:

URI ldap://10.0.0.2
BASE dc=develop,dc=local

Adicionalmente se puede comprobar que el servicio está emitiendo mediante tcp por el puerto 389 y activarlo. Para ello se ejecutan los siguientes comandos:

netstat -pltn
systemctl enable slapd

Configuraciones en el cliente

Para poder utilizar un cliente como parte del dominio y que un usuario registrado se pueda logear en el, se deben instalar una serie de paquetes que permitan la conexione entre máquinas y la modificación de algunos archivos para la autenticación.

Lo primero que hay que tener en cuenta es si se utiliza un servidor DNS para la resolución de nombres. En el caso de contar con uno simplemente se debe apuntar a él en la configuración de red. En el caso contrario se debe editar el archivo /etc/hosts y asociar la dirección ip del servidor ldap con su nombre red red completo

127.0.0.1     localhost
127.0.1.1     eq-ldap
10.0.0.2      srv-ldap.develop.local     srv-ldap
10.0.0.10     eq-ldap.develop.local      eq-ldap

Esto servirá para que se realice de forma efectiva la traducción de nombres. El siguiente paso será instalar los siguientes paquetes:

apt install libnss-ldap libpam-ldap ldap-utils -y
  • libnss-ldap: facilita a NSS (Name Service Switch) la resolución de nombres de forma correcta.
  • libpam-ldap: facilita la autenticación con LDAP a los usuarios que utilizan la interfaz PAM (Pluggable Authentication Modules).
  • ldap-utils: permite un manejo de los objetos de ldap por comandos. No es obligatorio pero si recomendable si se quieren realizar búsquedas, inserciones, etc… desde el equipo cliente

La instalación del segundo y tercer paquete no pide información adicional en el momento, sin embargo en la instalación del primer paquete se deben indicar:

  • URI del servicio ldap: en el ejemplo ldap://10.0.0.2
  • DistinguishedName del dominio: en el ejemplo dc=develop,dc=local
  • Versión de ldap a utilizar: 3
  • DN para la cuenta de root de LDAP: en el ejemplo cn=admin,dc=develop,dc=local
  • Contraseña del root de LDAP

En el caso de querer cambiar alguna de estas configuraciones se deberá ejecutar el comando dpkg-reconfigure ldap-auth-config

Lo siguiente que se debe realizar es la modificación del archivo /etc/nsswitch, para indicar que las fuentes de la autenticación sean también ldap. Para ello se incluye la opción de ldap en la linea de passwd, group y shadow

passwd:     compact systems ldap
group:      compact systems ldap
shadow:     compact systems ldap

El siguiente paso es modificar el archivo /etc/pam.d/common-password. Este archivo indica las reglas PAM para la comprobación de las contraseñas. Se debe editar la linea 26 eliminando la regla de use_authtok, la cual impide que se utilice un segundo método de autenticación cuando el primer método falla.

sudo vi /etc/pam.d/common-password

El último archivo de configuraciones que hay que modificar es el de /etc/pam.d/common-session. Este archivo guarda las reglas que se deben cumplir en el inicio de sesión. La linea que se debe incluir es la regla para la creación del directorio del usuario tras el inicio de sesión. Para ello se incluye la siguiente linea al final del archivo donde el usuario que inicia sesión tenga permisos rwx

session optional       pam_mkhomedir.so skel=/etc/skel umask=077

Adicionalmente se puede forzar a la resolución de autenticaciones por ldap mediante los comandos

auth-client-config -t nss -p lac_ldap
pam-auth-update

Para comprobar que todo funciona se puede realizar una búsqueda de los objetos LDAP desde el cliente mediante los siguientes comandos

#realiza una búsqueda de todos los objetos del ldap 10.0.0.2
ldapsearch -x -LLL -H ldap://10.0.0.2 -b dc=develop,dc=local
# muestra todos los usuarios que pueden iniciar sesión desde las fuentes de
# datos indicados en el fichero /etc/nsswitch
getent passwd

Adicionalmente se creará un archivo .ldif (los cuales manejan los objetos del servicio ldap) para definir un usuario. Se creará un archivo (sudo nano usuario.ldif) el cual tendrá el siguiente contenido

dn: uid=develop,dc=develop,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: develop
sn: system
givenName: develop
cn: develop system
displayName: develop system
uidNumber: 1000
gidNumber: 10000
userPassword: contrasenia
loginShell: /bin/bash
homeDirectory: /home/develop 
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: develop@develop.com
postalCode: 28900

Cada una de las lineas configura un atributo de la entrada del usuario que se creará. Estos atributos se verán en las siguientes entradas de ldap. Para poder agregar el usuario indicado en el archivo se utiliza el comando ldapadd, indicando el dn del administrador y el archivo que define el objeto:

ldapadd -x -D cn=admin,dc=develop,dc=local -W -f usuario.ldif

Con estas configuraciones el cliente podrá iniciar sesión en mediante los usuarios creados en la base de datos ldap. En el momento de iniciar sesión se creará el directorio home asignado. En el caso de utilizar un sistema inferior a Ubuntu 17.04 se deberá editar el fichero de configuraciones de la interfaz de entrada, en el cual se deberá indicar que se permita la opción de poner un nombre de inicio de sesión diferente a los locales. Para ello se debe modificar el archivo usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf e incluir la última linea del archivo que se indica a continuación, lo que permite un login manual

[SeatDefaults]
user-session=ubuntu
greeter-show-manual-login=true