Continuemos, no sin antes consultar:
- Servicio de Directorio con LDAP. Introducción.
- Servicio de Directorio con LDAP [2]: NTP y dnsmasq.
- Servicio de Directorio con LDAP [3]: Isc-DHCP-Server y Bind9.
- Servicio de Directorio con LDAP [4]: OpenLDAP (I)
En este post veremos:
- Autenticación local de usuarios
- Poblar la base de datos
- Administrar la base de datos mediante utilidades de consola
- Resumen hasta aquí…
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:
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.
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
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