Servicio de Directorio con LDAP [5]: OpenLDAP (II)

Continuemos, no sin antes consultar:

En este post veremos:

Autenticación local de usuarios

Después que tenemos en servidor OpenLDAP funcionando, si queremos probar o tener autenticación local de los usuarios registrados -o que registraremos- en el Directorio, debemos instalar y configurar los paquetes necesarios.

En Squeeze, los paquetes involucrados son:

libnss-ldap: Provee el Servicio de Intercambio de Nombre (NSS Name Service Switch) que permite al servidor LDAP actuar como un servidor de nombre.

Significa brindar la información sobre Cuentas de Usuarios, ID de Grupos, información sobre el host, Alias, NetGroups, y básicamente cualquier otro dato que normalmente se obtiene de los archivos de texto plano como el /etc/passwd/etc/group, etcétera, o de un servicio NIS.

libpam-ldap: “Pluggable Authentication Module for LDAP“, o Módulo PAM para el LDAP. Provee una interfaz entre el servidor LDAP y el sistema de autenticación mediante PAM.

nscd: “Name Service Cache Daemon“, o Demonio para la Caché del Servicio de Nombre. Maneja la búsqueda de contraseñas, grupos y hosts y almacena los resultados de las búsquedas en la caché para futuras consultas.

:~# aptitude install libnss-ldap finger

La instalación del paquete libnss-ldap, que además instala como dependencias a libpam-ldap y a el demonio nscd, nos llevará a través de un Asistente para la Configuración, cuyas preguntas debemos responder adecuadamente:

libnss-01

libnss-02

libnss-03

libnss-04

libnss-05

libnss-06

libpam-01

libpam-02

libpam-03

libpam-04

Si queremos volver a configurar los paquetes libnss-ldap y/o libpam-ldap, debemos ejecutar:

:~# dpkg-reconfigure libnss-ldap
:~# dpkg-reconfigure libpam-ldap

Posteriormente modificamos el archivo /etc/nsswitch.conf y lo dejamos con el siguiente contenido:

:~# nano /etc/nsswitch.conf
# /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

hosts:          files dns
networks:       files

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

netgroup:       nis

Para que los cambios realizados al archivo /etc/nsswitch.conf surtan efecto, reiniciamos el servicio nscd:

:~# service nscd restart

Detalle importante es modificar el archivo /etc/pam.d/common-session para que se cree la carpeta de usuario en el servidor local cuando inicie una sesión en él, un usuario registrado en el Directorio:

:~# nano /etc/pam.d/common-session
[----]
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
### La línea anterior se debe incluir ANTES de
# here are the per-package modules (the "Primary" block)
[----]

Poblar la base de datos

Para poblar la base de datos del Directorio o iniciarla, debemos adicionar las Unidades Organizativas principales, registrar al menos un Grupo de Usuarios, y añadir un usuario. Para ello, creamos un archivo en formato LDIF, el cual lo añadiremos posteriormente al Directorio, con el siguiente contenido:

:~# nano content.ldif
dn: ou=People,dc=amigos,dc=cu
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=amigos,dc=cu
objectClass: organizationalUnit
ou: Groups

dn: cn=anillos,ou=Groups,dc=amigos,dc=cu
objectClass: posixGroup
cn: anillos
gidNumber: 10000

dn: uid=frodo,ou=People,dc=amigos,dc=cu
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: frodo
sn: Bagins
givenName: Frodo
cn: Frodo Bagins
displayName: Frodo Bagins
uidNumber: 10000
gidNumber: 10000
userPassword: frodo
mail: frodo@amigos.cu
gecos: Frodo Bagins
loginShell: /bin/bash
homeDirectory: /home/frodo

Adicionamos el contenido del archivo al Directorio:

:~# ldapadd -x -D cn=admin,dc=amigos,dc=cu -W -f content.ldif
Enter LDAP Password: 
adding new entry "ou=People,dc=amigos,dc=cu"
adding new entry "ou=Groups,dc=amigos,dc=cu"
adding new entry "cn=anillos,ou=Groups,dc=amigos,dc=cu"
adding new entry "uid=frodo,ou=People,dc=amigos,dc=cu"

Realizamos las comprobaciones pertinentes:

:~# id frodo
uid=10000(frodo) gid=10000(anillos) grupos=10000(anillos)

:~# getent passwd | grep frodo
frodo:x:10000:10000:Frodo Bagins:/home/frodo:/bin/bas

:~# finger frodo
Login: frodo          			Name: Frodo Bagins
Directory: /home/frodo              	Shell: /bin/bash
Never logged in.
No mail.
No Plan.

:~# ldapsearch -Y EXTERNAL -H ldapi:/// -b uid=frodo,ou=People,dc=amigos,dc=cu

Ahora tenemos un Servicio de Directorio que debemos administrar !!!. Desarrollaremos dos vías: la primera mediante el paquete ldapscripts, y la segunda, que abordaremos en el próximo artículo, será mediante elLdap Account Manager.

También debemos decir que el paquete ldap-utils, aporta toda una serie de comandos útiles para administrar el Directorio. Para conocer cuales son esos comandos, ejecutamos:

:~# dpkg -L ldap-utils | grep /bin
/usr/bin
/usr/bin/ldapmodrdn
/usr/bin/ldapurl
/usr/bin/ldapdelete
/usr/bin/ldapwhoami
/usr/bin/ldapexop
/usr/bin/ldappasswd
/usr/bin/ldapcompare
/usr/bin/ldapsearch
/usr/bin/ldapmodify
/usr/bin/ldapadd

Para conocer más acerca de cada comando, recomendamos ejecuten man <comando>. Dar una explicación de cada uno haría muy largo el artículo.

Administrar la base de datos mediante utilidades de consola

Seleccionamos el paquete ldapscripts para tal tarea. El procedimiento de instalación y configuración es el siguiente:

:~# aptitude install ldapscripts

:~# cp /etc/ldapscripts/ldapscripts.conf \
/etc/ldapscripts/ldapscripts.conf.original

:~# cp /dev/null /etc/ldapscripts/ldapscripts.conf

:~# nano /etc/ldapscripts/ldapscripts.conf
SERVER=localhost
BINDDN='cn=admin,dc=amigos,dc=cu'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=amigos,dc=cu'
GSUFFIX='ou=Groups'
USUFFIX='ou=People'
#MSUFFIX='ou=Computers'
GIDSTART=10001
UIDSTART=10001
#MIDSTART=10000
# OpenLDAP client commands
LDAPSEARCHBIN="/usr/bin/ldapsearch"
LDAPADDBIN="/usr/bin/ldapadd"
LDAPDELETEBIN="/usr/bin/ldapdelete"
LDAPMODIFYBIN="/usr/bin/ldapmodify"
LDAPMODRDNBIN="/usr/bin/ldapmodrdn"
LDAPPASSWDBIN="/usr/bin/ldappasswd"
GCLASS="posixGroup"
# UTEMPLATE="/etc/ldapscripts/ldapadduser.template"
PASSWORDGEN="echo %u"

### Observen que los scripts utilizan los comandos del
### paquete ldap-utils

:~# sh -c "echo -n 'tupassowrd' > \
/etc/ldapscripts/ldapscripts.passwd"

:~# chmod 400 /etc/ldapscripts/ldapscripts.passwd

:~# cp /usr/share/doc/ldapscripts/examples/ldapadduser.template.sample \
/etc/ldapscripts/ldapadduser.template

:~# nano /etc/ldapscripts/ldapadduser.template
dn: uid=<user>,<usuffix>,<suffix>
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: <user>
sn: <ask>
givenName: <ask>
displayName: <ask>
uid: <user>
uidNumber: <uid>
gidNumber: <gid>
homeDirectory: <home>
loginShell: <shell>
mail: <ask>
gecos: <user>
description: Cuenta de Usuario

:~# nano /etc/ldapscripts/ldapscripts.conf
## eliminamos el comentario
UTEMPLATE="/etc/ldapscripts/ldapadduser.template"

Probemos a adicionar el usuario Trancos El Rey al grupo de usuarios anillos y comprobemos los datos introducidos:

:~# ldapadduser trancos anillos
[dn: uid=trancos,ou=People,dc=amigos,dc=cu] Enter value for "sn" : El Rey
[dn: uid=trancos,ou=People,dc=amigos,dc=cu] Enter value for "givenName" : Trancos
[dn: uid=trancos,ou=People,dc=amigos,dc=cu] Enter value for "displayName" : Trancos El Rey
[dn: uid=trancos,ou=People,dc=amigos,dc=cu] Enter value for "mail" : trancos@amigos.cu
Successfully added user trancos to LDAP
Successfully set password for user trancos

root@mildap:~# ldapfinger trancos
dn: uid=trancos,ou=People,dc=amigos,dc=cu
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: trancos
sn: El Rey
givenName: Trancos
displayName: Trancos El Rey
uid: trancos
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/trancos
loginShell: /bin/bash
mail: trancos@amigos.cu
gecos: trancos
description: Cuenta de Usuario
userPassword:: e1NTSEF9UnlmcWxCem5iUzBuSzQzTkM3ZFRFcTUwV2VsVnBqRm8=

Declaremos una contraseña al usuario Frodo, listemos los “DN” de los usuarios registrados, y borremos al recién creado usuario Trancos:

:~# ldapsetpasswd frodo
Changing password for user uid=frodo,ou=People,dc=amigos,dc=cu
New Password: 
Retype New Password: 
Successfully set password for user uid=frodo,ou=People,dc=amigos,dc=cu

:~# lsldap -u | grep dn
dn: uid=frodo,ou=People,dc=amigos,dc=cu
dn: uid=trancos,ou=People,dc=amigos,dc=cu

:~# ldapfinger frodo
dn: uid=frodo,ou=People,dc=amigos,dc=cu
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: frodo
sn: Bagins
givenName: Frodo
cn: Frodo Bagins
displayName: Frodo Bagins
uidNumber: 10000
gidNumber: 10000
mail: frodo@amigos.cu
gecos: Frodo Bagins
loginShell: /bin/bash
homeDirectory: /home/frodo
userPassword:: e1NTSEF9TnI4ZXN3YXA1VnplK1ZIZXZzbFZKaWF1SVdWeU5oVjA=

:~# ldapdeleteuser trancos
Successfully deleted user uid=trancos,ou=People,dc=amigos,dc=cu from LDAP

:~# lsldap -u | grep dn
dn: uid=frodo,ou=People,dc=amigos,dc=cu

Comprobemos que la Autenticación Local funciona correctamente:

:~# ssh frodo@mildap
frodo@mildap's password: 
Linux mildap 2.6.32-5-686 #1 SMP Fri May 10 08:33:48 UTC 2013 i686
[---]
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Feb 18 18:54:01 2014 from mildap.amigos.cu
frodo@mildap:~$ pwd
/home/frodo
frodo@mildap:~$ 

Son muchos los ejemplos que podemos escribir, pero lamentablemente el artículo sería muy largo. Siempre decimos que nosotros damos un punto de entrada a los temas de los servicios en general. Es imposible sustituir la amplia documentación existente en un solo post.

Para conocer más sobre el paquete ldapscripts y sus comandos, favor y consulte man ldapscripts.

Hasta ahora, nuestro Sencillo Servicio de Directorio basado en OpenLDAP funciona correctamente.

Resumen hasta aquí…

Muchos encargados de los servicios en las redes empresariales, cuando se hacen cargo de una con servicios basados en productos Microsoft, si desean migrar hacia Linux, se plantean la migración de los Controladores de Dominio entre otros servicios más.

Sino eligen un producto de terceros como el ClearOS o el Zentyal, o si por otros motivos desean independizarse, entonces se dan a la afanosa tarea de hacerse su propio Controlador de Dominio, o a partir de Samba 4 su propio Directorio Activo.

Entonces es que comienzan los problemas y algunas que otras desilusiones. Errores de funcionamiento. No dan con la localización de los problemas para poderlos solucionar. Intentos de instalación en repetidas ocasiones. Funcionamientos parciales de los servicios. Y un largo etcétera de problemas.

La Base de cualquier Controlador de Dominio o Directorio Activo en Linux, basado en OpenLDAP más Samba, pasa obligadamente por el conocimiento básico de ¿qué es un servidor LDAP, cómo se instala, cómo se configura y administra, etcétera?. Los que han leído la frondosa documentación de Samba, sabrán bien a que nos referimos.

Precisamente a responder esa pregunta hemos escrito toda la serie de artículos hasta éste, y continuaremos con los que sean necesarios. Esperamos les sean de utilidad.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

      vidagnu dijo

    Execelentes tus post Fico, una consulta, con OpenLDAP ¿se pueden crear politicas de dominio? para aplicarlas a los usuarios conectados, como por ejemplo que el screen saver se active despues de 5 minutos sin actividad, configurar el wallpaper, que no se ejecuten ciertas aplicaciones, configurar scripts de inicio, etc.

    Saludos,
    Oscar

         federico dijo

      Gracias por comentar !!!. Oscar, recuerda que esas políticas, en Linux, se implementan de forma diferente cuando se trata de clientes Linux. GNOME trae una herramienta para lograrlo que ahora no recuerdo su nombre. Si se que podemos establecer políticas de las cuentas de usuarios directamente en el OpenLDAP. Muchos me hacen la misma pregunta y siempre respondo más o menos parecido. 🙂 Esas políticas de seguridad solo se aplican a clientes Microsoft, NO a clientes Linux. Son dos filosofías diferentes. Un Active Directory es una aplicación propietaria basada en OpenLDAP, un Kerberos personal de Microsft y el Administrador de redes, que no se como le llaman ahora. Antes, era en Lan Manager. No podemos pensar en emular solamente con el LDAP a un Active Directory. Tendríamos que integrar Samba o usar Samba 4 a ver si se puede lograr. Y amigo, al Samba 4 no le he echado aun ni un sólo vistazo. 🙂 Tampoco conozco si el Zentyal con Directorio Activo las puede aplicar… pero ese software no es solamente OpenLDAP. Es OpenLDAP + Samba + Kerberos + otras cosas que no conozco bien. 🙂 En ésta serie sólo trato con el OpenLDAP, y si la sigues verás que en el compendio que estoy escribiendo de toda la serie, más otros servicios imprescindibles, todo se basa en la autenticación contra el Directorio OpenLDAP.

      Saludos