PROYECTO V2.0 PARTE 2: Instalación y configuración del servidor OpenLDAP en Debian Wheezy

Indice del proyecto

Saludos!

Después de instalar nuestro sistema base vamos a instalar y configurar el servicio de directorio con OpenLDAP.

He estado probando OpenLDAP en Wheezy y desde la versión que hay en Squeeze la forma de configurar OpenLDAP cambió me dio algunos dolores de cabeza pero encontré la forma de hacerlo funcionar y hasta ahora no he tenido problemas.

LDAP va a ser el servicio que utilizaremos para guardar la información de los usuarios de nuestra red, los mas importante sus nombres de usuario y contraseñas que se usaran para autenticarse en los demás servicios que se prestaran en nuestra red así como la autenticación en las estaciones de trabajo ya sean estas Linux o Windows.

Para los que no saben que es LDAP aqui les dejo la pagina de wikipedia que explica que es y para que se usa LDAP.

La implementación que usaremos sera OpenLDAP en la versión que esta en los repositorios de Wheezy.

Iniciaremos desde la instalación base que hicimos en el post pasado, recuerden que lo único que le instalamos fue el servidor de ssh OpenSSH asi que vamos a instalar el servidor OpenLDAP cuyo paquete se llama slapd también instalaremos las utilidades de ldap ldap-utils

root@DEBIAN-PDC:~#apt-get install slapd ldap-utils

Nos pedirá que asignemos la contraseña para el servidor LDAP, como contraseña usaremos palabra password:

openldap1

openldap2

Después de esto ya se encontrara instalado el servicio de slapd en nuestro servidor con una configuración básica, como comente antes desde la versión de OpenLDAP de Squeeze la forma de configuración cambió, antes se usaba el archivo slapd.conf para realizar la configuración del directorio, pero en las nuevas versiones la configuración se hace dentro del mismo directorio permitiendo configuraciones y modificación de esquemas en caliente esto es bueno para sistemas en producción que no nos podemos dar el lujo de dar de baja para hacer configuraciones pero para este proyecto, en mi caso particular no necesito esta característica y me siento mas cómodo configurando el directorio desde el archivo slapd.conf por esta razón voy a configurar slapd para que tome la configuración del directorio desde este archivo.

Detenemos el servicio de slapd:

root@DEBIAN-PDC:~#/etc/init.d/slapd stop

Eliminamos la base de datos LDAP creada durante la instalación de slapd:

root@DEBIAN-PDC:~#rm -rf /var/lib/ldap/*

Reconfiguramos slapd:

root@DEBIAN-PDC:~#dpkg-reconfigure -plow slapd

Cuando reconfiguramos nos harán una serie de preguntas, mas de las que nos hicieron cuando instalamos slapd:

Nos pregunta que si deseamos omitir la configuración del servidor OpenLDAP, por supuesto seleccionamos que no.

openldap3

Nos preguntará el nombre de nuestro dominio el cual es winterfell.org.

openldap4

Nos pregunta por el nombre de nuestra organización el cual se utilizara para crear el DN del directorio, usaremos nuestro dominio de nuevo winterfell.org.

 openldap5

Nos preguntara por la contraseña del administrador del directorio igual que en la instalación de slapd como contraseña colocamos password.

openldap6

openldap7

Nos preguntará por el motor de base de datos a utilizar,  las opciones son BDB o HDB y recomienda el uso de HDB la verdad la diferencia entre los 2 no son muchas así que nos quedamos con la recomendación de dpkg HDB.

openldap8

Nos pregunta que si deseamos borrar la base de datos del directorio cuando se purge el paquete slapd (apt-get purge slapd), es aconsejable decirle que no pues si por algún motivo purgamos slapd por error, la base de datos del directorio quedara intacta y podremos recuperar nuestro directorio facilmente y si necesitamos borrar la base de datos pues lo podemos hacer forma manual como lo hicimos anteriormente.

openldap9

Nos pregunta si deseamos habilitar el soporte para la versión 2 del protocolo LDAP, seleccionamos no ya que la versión 2 ya esta obsoleta y prácticamente no se usa.

openldap10

Con esto terminamos con la reconfiguración de slapd.

Hora guardamos una copia de seguridad del directorio, la usaremos mas adelante:

root@DEBIAN-PDC:~#slapcat > /root/backup.ldap

Detenemos el servicio de slapd:

root@DEBIAN-PDC:~#/etc/init.d/slapd stop

Borramos el directorio de configuración de slapd:

root@DEBIAN-PDC:~#rm -rf /etc/ldap/slapd.d

Copiamos el ejemplo del archivo slapd.conf que se encuentra en la documentacion de slapd en el directorio /etc/ldap/.

root@DEBIAN-PDC:~#cp /usr/share/doc/slapd/examples/slapd.conf /etc/ldap/

Editamos el archivo de configuración /etc/default/slapd:

root@DEBIAN-PDC:~#nano /etc/default/slapd

Buscamos la linea donde diga SLAPD_CONF= y la dejamos como esta a continuación:

SLAPD_CONF="/etc/ldap/slapd.conf"

openldap11

Ahora vamos a copiar el esquema de Samba ya que lo vamos a necesitar para que los clientes windows se puedan autenticar en nuestro servidor.

Instalamos el paquete samba-doc

root@JARDIN-SERVER:~#apt-get install samba-doc

Luego copiamos el esquema de samba a el directorio /etc/ldap/schema/

root@JARDIN-SERVER:~#zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema

Con esto ya podemos configurar nuestro OpenLDAP como se hacía antes modificando el archivo slapd.conf, manos a la obra, abrimos el archivo /etc/ldap/slapd.conf y lo modificamos

root@JARDIN-SERVER:~#nano /etc/ldap/slapd.conf

Buscamos al comienzo del archivo, veremos unas lineas que comienzan con include esta lineas son las que cargan los schemas que se usaran en el directorio, el archivo ya trae los esquemas principales para trabajar con usuarios unix debemos agregar el esquema de samba justo debajo de la ultima linea que comience por include:


# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema

openldap12

Con la ayuda de nano vamos a usar la función de buscar y reemplazar, primero vamos buscar @BACKEND@ y los vamos a reemplazar por hdb recuerden que este es el motor de base de datos que seleccionamos cuando reconfiguramos slapd.

Luego buscamos @SUFFIX@ y los reemplazamos por dc=winterfell,dc=org, este sera el DN de nuestro directorio.

Buscamos @ADMIN@ lo reemplazamos por cn=admin,dc=winterfell,dc=org este sera el usuario administrador del directorio.

Buscamos la linea #rootdn “cn=admin,dc=winterfell,dc=org” y la descomentamos quiere decir que solamente le borramos el símbolo #.

Ahora debemos asignar una contraseña para el usuario admin, esa contraseña debe ir cifrada y nunca en texto plano para eso utilizaremos la herramienta slappasswd.

Abrimos otra terminal en el servidor y ejecutamos:

root@DEBIAN-PDC:~#slappasswd

Nos pedirá la contraseña, al igual que lo hicimos antes utilizaremos password como nuestra contraseña.

Luego nos pedirá que la escribamos nuevamente y nos devolverá la contraseña cifrada con SSHA:

openldap13

La contraseña cifrada queda {SSHA}k4J6AzqgwfwVhOy8QDvN7Lo66I/6Qzmb y es esta cadena de caracteres la que utilizamos en el archivo slapd.conf, justo debajo de la linea rootdn “cn=admin,dc=eljardin.co,dc=co”, agregamos la linea rootpw {SSHA}k4J6AzqgwfwVhOy8QDvN7Lo66I/6Qzmb quedando así:


# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
rootdn "cn=admin,dc=eljardin,dc=co"
rootpw {SSHA}k4J6AzqgwfwVhOy8QDvN7Lo66I/6Qzmb

openldap14

Ahora vamos agregar unos indices, los indices son ayudas que definimos para que la base de datos pueda encontrar los registros mas rápidamente, buscando solamente el dato necesario, si no los asignamos el motor buscara por toda la base de datos un registro especifico causando que las respuestas a las consultas sean muy lentas.

Buscamos la linea index objectClass eq la comentamos (le agregamos el símbolo # al comienzo de la linea) y justo debajo agregamos los indices que vamos a usar:

index objectClass eq,pres
index ou,cn,sn,mail,givenname eq,pres,sub

index loginShell eq,pres
index uid pres,sub,eq
index displayName pres,sub,eq
index nisMapName,nisMapEntry eq,pres,sub
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub
index uniqueMember eq
index sambaGroupType eq
index sambaSIDList eq

openldap15

Ahora vamos a definir los permisos que los usuarios van a tener en el directorio.

Buscamos las siguientes lineas:

access to attrs=userPassword,shadowLastChange
  by dn="cn=admin,dc=eljardin,dc=co" write
  by anonymous auth
  by self write
  by * none

y las dejamos asi:

access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
 by self write
 by anonymous auth
 by * none

Hora buscamos la linea access to dn.base=”” by * read y la comentamos, deberá quedar así:

#access to dn.base="" by * read

justo debajo agregamos las siguientes lineas:

access to attrs=shadowLastChange,shadowMax
 by self write
 by * read

Con esto estamos asignando los permisos a los usuarios para que puedan cambiar su propia contraseña.

Por ultimo buscamos las lineas:

access to *
 by dn="cn=admin,dc=example,dc=com" write
 by * read

y las dejamos así:

access to *
 by * read

Con esto asignamos los permisos para que cualquier usuario pueda leer y solo leer cualquier registro.

Aquí les dejo como debería quedar el archivo completo:

# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.

#######################################################################
#Global Directives:

# Features to permit
#allow bind_v2

# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile /var/run/slapd/slapd.args

# Read slapd.conf(5) for possible values
loglevel none

# Where the dynamically loaded modules are stored
modulepath /usr/lib/ldap
moduleload back_hdb

# The maximum number of entries that is returned for a search operation
sizelimit 500

# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1

#######################################################################
# Specific Backend Directives for hdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend hdb

#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend

#######################################################################
# Specific Directives for database #1, of type hdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database hdb

# The base of your directory in database #1
suffix "dc=winterfell,dc=org"

# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
rootdn "cn=admin,dc=winterfell,dc=org"
rootpw {SSHA}k4J6AzqgwfwVhOy8QDvN7Lo66I/6Qzmb

# Where the database file are physically stored for database #1
directory "/var/lib/ldap"

# The dbconfig settings are used to generate a DB_CONFIG file the first
# time slapd starts. They do NOT override existing an existing DB_CONFIG
# file. You should therefore change these settings in DB_CONFIG directly
# or remove DB_CONFIG and restart slapd for changes to take effect.

# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0

# Sven Hartge reported that he had to set this value incredibly high
# to get slapd running at all. See http://bugs.debian.org/303057 for more
# information.

# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500

# Indexing options for database #1
#index objectClass eq
index objectClass eq,pres
index ou,cn,sn,mail,givenname eq,pres,sub
index uidNumber,gidNumber,memberUid eq,pres
index loginShell eq,pres
index uid pres,sub,eq
index displayName pres,sub,eq
index nisMapName,nisMapEntry eq,pres,sub
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub
index uniqueMember eq
index sambaGroupType eq
index sambaSIDList eq

# Save the time that the entry gets modified, for database #1
lastmod on

# Checkpoint the BerkeleyDB database periodically in case of system
# failure and to speed slapd shutdown.
checkpoint 512 30

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
#access to attrs=userPassword,shadowLastChange
# by dn="cn=admin,dc=eljardin,dc=co" write
# by anonymous auth
# by self write
# by * none

access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
  by self write
  by anonymous auth
  by * none

# Ensure read access to the base for things like
# supportedSASLMechanisms. Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
#access to dn.base="" by * read

access to attrs=shadowLastChange,shadowMax
  by self write
  by * read

# The admin dn has full write access, everyone else
# can read everything.
#access to *
# by dn="@ADMIN@" write
# by * read

access to *
  by * read

# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
# by dn="@ADMIN@" write
# by dnattr=owner write

#######################################################################
# Specific Directives for database #2, of type 'other' (can be hdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database

# The base of your directory for database #2
#suffix "dc=debian,dc=org"

Listo terminamos de modificar nuestro archivo slapd.conf ahora vamos a probar si tiene algún error para eso utilizamos el comando slaptest:

root@DEBIAN-PDC:~#slaptest -v -u

openldap16

Una vez que comprobamos que no hay ningún error en el archivo slapd.conf detenemos el servicio:

root@DEBIAN-PDC:~#/etc/init.d/slapd stop

y borramos nuevamente la base de datos de OpenLDAP para generarla nuevamente con los nuevos ajustes:

root@DEBIAN-PDC:~#rm -rf /var/lib/ldap/*

Iniciamos el servicio:

root@DEBIAN-PDC:~#/etc/init.d/slapd start

y los detenemos nuevamente:

root@DEBIAN-PDC:~#/etc/init.d/slapd stop

con esto ya creamos la base de datos con los nuevos ajustes. Restauramos la copia de seguridad que sacamos antes:

root@DEBIAN-PDC:~#slapadd < /root/backup.ldap

Iniciamos de nuevo el servicio:

root@DEBIAN-PDC:~#/etc/init.d/slapd start

Por ultimo cambiamos el propietario de los archivos de la base de datos ya que se me presento un problema con dos de los archivos cuyo propietario era el usuario root y me daba error al realizar operaciones en el directorio:

root@DEBIAN-PDC:~#chown -R openldap.openldap /var/lib/ldap/*

Con esto ya tenemos funcionando nuestro servidor OpenLDAP ahora vamos a instalar una interfaz web para administrar nuestros usuarios, el que he escogido por su facilidad de uso es el LDAP Account Manager o LAM que esta en los repositorios de Wheezy:

root@JARDIN-SERVER:~#apt-get install ldap-account-manager

Abrimos el navegador de su preferencia y vamos a la dirección ip del servidor:

http://direccion-ip-del-servidor/lam

Se abrirá la siguiente pagina:

openldap17

Ingresamos en la opcion LAM Configuration que se encuentra en la esquina superior derecha y no lleva a la siguiente pagina:

openldap18

Seleccionamos Edit server profiles y nos llevara a la siguiente pagina:

openldap19

Nos pedirá la contraseña para poder continuar la cual es lam:

openldap20

En esta pagina esta la configuración concerniente a la conexión con el servidor OpenLDAP, en el apartado de Server settings lo único que cambiamos es la opción Tree Suffix y le ponemos el DN de nuestro servidor dc=winterfell,dc=org

En el apartado Languaje Settings escojemos Español (España) para que la interfaz aparezca en español.

En el apartado Security Settings cambiamos la opción List valid users y ponemos el DN de nuestro usuario administrador del directorio para que nos podamos loguear con el cn=admin,dc=winterfell,dc=org

La configuración debió haber quedado así:

openldap21

Ahora nos dirigimos a la pestaña Account types

openldap22

Debemos cambiar los LDAP suffix de todos los apartados para que utilicen el DN de nuestro directorio:

Users
LDAP suffix: ou=People,dc=winterfell,dc=org

Groups
LDAP suffix: ou=group,dc=winterfell,dc=org

Hosts
LDAP suffix: ou=machines,dc=winterfell,dc=org

El ultimo apartado Samba domains como aun no hemos configurado Samba lo eliminamos dando click en el botón Remove this account type mas tarde lo agregaremos de nuevo cuando configuremos el servidor samba.

La configuración debería quedar así:

openldap23

Luego nos vamos a la pestaña Modules

openldap24

Y eliminamos todo lo que diga Samba ya que no esta instalado el servidor samba nos puede dar problemas a la hora de hacer las primeras pruebas de nuestro servidor.

La configuración debería quedar así:

openldap25

En la ultima pestaña Module settings se encuentra la configuración para la creación de usuarios con respecto a su UID para mi caso los números que están ahí son mas que suficientes así que no modificare nada pero ustedes lo pueden adaptar a sus necesidades

openldap26

Con esto hemos terminado la configuración de LAM le damos click al botón Save y no mandara a la siguiente pagina:

openldap27

El usuario es admin que ya aparece ahí y es el usuario administrador del directorio y la contraseña es la que le asignamos cuando configuramos el directorio password

Al loguearnos aparece un mensaje diciendo que los suffix no pueden encontrarse y si desea que LAM los cree por usted:

openldap28

Recuerden que nuestro directorio esta vació así que le damos al botón Create para que LAM cree los suffix por nosotros:

openldap29

Listo ahora vamos a crear nuestro primer usuario.

Primero vamos a la pestaña groups

openldap30

Damos click en el botón New group, creamos un grupo el cual llamaremos usuarios:

openldap31

dejamos el campo GDI number vacío para que LAM lo genere automáticamente. Damos click en Save

openldap32

Ahora vamos a la pestaña Users

openldap33

y damos click en el botón New user

openldap34

Estos son lo campos de la información personal por ahora solo llenaré el nombre y el apellido, pero cuando empecemos a crear los usuarios reales del sistema es aconsejable llenar la mayor cantidad de campos posible, utilizare como nombre Prueba y como apellido igualmente Prueba

openldap35

Ahora vamos a la pestaña unix

openldap36

Cambiamos el campo User name y colocamos prueba el resto lo podemos dejar como esta, fíjense que ya seleccionó el grupo usuarios por que es el único que hemos creado ademas asignó automáticamente el UID.

openldap37

Ahora asignaremos una contraseña dando click en el botón Set password y le asignamos la palabra prueba como contraseña, también tenemos la opción de generar una contraseña aleatoria por si quieren usar ese método.

openldap38

Damos click en el botón Ok y luego en el botón Save

openldap39

Vamos a la pestaña Users y vemos que nuestro usuario ha sido creado.

openldap40

Ya tenemos el servicio de directorio instalado y configurado, ahora vamos a configurar el servidor para que tome la información de los usuarios del sistema desde el directorio.

Primero vamos a instalar los paquetes necesarios en nuestro sistema.

Los paquetes que vamos a utilizar son:


libnss-ldap
libpam-ldap
nscd

Instalamos los paquetes mencionados

root@DEBIAN-PDC:~#apt-get install libnss-ldap libpam-ldap nscd

Nos preguntara el URI de nuestro servidor LDAP, como estamos en el mismo servidor deben colocar la siguiente URI: ldap://localhost.

openldap41

Ahora nos preguntara el DN de nuestro directorio el cual es dc=winterfell,dc=org

openldap42

Ahora nos preguntara la versión del protocolo LDAP, recuerden que cuando configuramos el servidor seleccionamos que solo funcionara con la version 3 y esa será la versión con que trabajara también el cliente.

openldap43

Nos pregunta cual es la cuenta con privilegios de root de nuestro directorio, recuerden que es cn=admin,dc=winterfell,dc=org.

openldap44

Nos preguntara cual es la contraseña de la cuenta administrador de nuestro directorio, recuerden que le colocamos la palabra password  como contraseña.

openldap45

Luego nos indica que el archivo nsswitch.conf no se configura automaticamente y que debemos hacerlo nosotros mismos.

openldap46

Ahora nos preguntara si deseamos que el administrador del directorio se comporte como administrador local en el cliente, seleccionamos que si.

openldap47

Nos pregunta si hace falta un usuario para acceder a la base da datos LDAP, seleccionamos que no ya que cuando instalamos el servidor OpenLDAP lo configuramos para que no necesitara algún usuario.

openldap48

Nos vuelve a preguntar por la cuenta de administrador del directorio cn=admin,dc=winterfell,dc=org.

openldap49

Por ultimo pregunta por la contraseña de la cuenta de administrador la cual es password.

openldap50

Ahora vamos a modificar el archivo /etc/nsswitch.conf

root@DEBIAN-PDC:~#nano /etc/nsswitch.conf

Buscamos las siguientes lineas:

passwd: compat
group: compat
shadow: compat

y las dejamos así:

passwd: files ldap
group: files ldap
shadow: files ldap

openldap51

Con esto le estamos diciendo que las bases de datos de usuarios, contraseñas y grupos serán buscadas primero en los archivos locales (/etc/passwd, /etc/shadow, /etc/group) y si no encuentra la información allí entonces que busque en el directorio LDAP.  Guardamos los cambios.

Ahora vamos a modificar el archivo /etc/ldap/ldap.conf

root@DEBIAN-PDC:~#nano /etc/ldap/ldap.conf

y lo dejamos así:

openldap52

Modificamos el archivo /etc/libnss-ldap.conf

root@DEBIAN-PDC:~#nano /etc/libnss-ldap.conf

Buscamos la linea que diga:

#bind_policy hard

y la descomentamos y la dejamos así:

bind_policy soft

openldap53

Buscamos la siguiente linea:

#pam_filter objectclass=account

la descomentamos y la dejamos así:

pam_filter objectclass=posixAccount
openldap54

buscamos la siguiente linea:

#pam_login_attribute uid

y la descomentamos

pam_login_attribute uid

openldap55

buscamos la linea:

#pam_password crypt

la descomentamos:

pam_password crypt

openldap56

buscamos las lineas:

#nss_base_passwd ou=People,dc=padl,dc=com?one
#nss_base_shadow ou=People,dc=padl,dc=com?one
#nss_base_group ou=Group,dc=padl,dc=com?one

las descomentamos y las dejamos así:

nss_base_passwd ou=People,dc=winterfell,dc=org?one
nss_base_shadow ou=People,dc=winterfell,dc=org?one
nss_base_group ou=group,dc=winterfell,dc=org?one

openldap57

Guardamos los cambios y copiamos el archivo que acabamos de modificar y le colocamos como nombre /etc/pam_ldap.conf

root@DEBIAN-PDC:~#cp /etc/libnss-ldap.conf /etc/pam_ldap.conf

Reiniciamos el servicio nscd

root@DEBIAN-PDC:~#/etc/init.d/nscd restart

y listo con esto ya nuestro servidor debería poder obtener información de los usuarios creados en el directorio, probemos con el usuario prueba que creamos en el tutorial anterior, para eso usamos el comando id

root@DEBIAN-PDC:~#id prueba

deberia salir algo como esto:

uid=10000(prueba) gid=10000(usuarios) grupos=10000(usuarios)

openldap58

Revisemos que también aparece nuestro usuario prueba en la base de datos passwd, esto lo hacemos con el comando getent

root@DEBIAN-PDC:~#getent passwd | grep prueba

les deberá salir algo como esto:

prueba:*:10000:10000:Prueba Prueba:/home/prueba:/bin/bash

openldap59

Ahora vamos a configurar el modulo PAM

Primero sacamos una copia de seguridad de los archivos de configuración por si nos equivocamos en algo y luego no nos podemos loguear

root@DEBIAN-PDC:~#cp -r /etc/pam.d /etc/pam.d.bk

primero vamos a modificar el archivo /etc/pam.d/common-password

root@DEBIAN-PDC:~#nano /etc/pam.d/common-password

Buscamos la siguiente linea:

password [success=2 default=ignore] pam_unix.so obscure sha512

y la dejamos así:

password [success=2 default=ignore] pam_unix.so obscure crypt

instantánea21

ahora abrimos el archivo /etc/pam.d/common-session

root@DEBIAN-PDC:~#nano /etc/pam.d/common-session

y al final del archivo agregamos la siguiente linea:

session required pam_mkhomedir.so

esa linea lo que hará es crear el directorio HOME del usuario con el cual nos logueamos si este directorio no existe.

Por ultimo abrimos el archivo /etc/pam.d/common-session-noninteractive y agregamos la misma linea anterior al final del archivo

session required pam_mkhomedir.so

y eso es todo ahora lo que nos queda es logueranos en con el usuario prueba recuerden que la contraseña que le colocamos es también prueba y debería entrar al sistema sin problemas

openldap60

Si notan que aparece un mensaje que dice Creating directory ‘/home/prueba’ eso quiere decir que el modulo pam_mkhomedir.so esta funcionando bien y nos crea el directorio HOME de nuestro usuario.

Con esto ya podemos crear, modificar y eliminar usuarios para nuestro directorio pero hay un problema, LAM no puede crear el directorio Home para los usuarios nuevos así que vamos a configurar LAM con Lamdaemon para que pueda crear los directorios Home de los usuarios automáticamente.

Instalamos el paquete ldap-account-manager-lamdaemon


root@DEBIAN-PDC:~#apt-get install ldap-account-manager-lamdaemon

Para poder usar correctamente lamdaemon debemos cambiar el usuario administrador del directorio en nuestro caso ese usuario es cn=admin,dc=winterfell,dc=org por uno que también sea un usuario del sistema ya que el usuario cn=admin,dc=winterfell,dc=org no es un usuario del sistema y no nos podemos loguear en el servidor con el,  así que vamos a crear un nuevo usuario admin que también sea usuario del sistema, lo haremos desde LAM.

openldap61

Nos logueamos en LAM, recuerden que la contraseña es la palabra password.

openldap62

Le damos click en el botón New user

En el campo Last name ponemos admin.

openldap63

Nos vamos a la pestaña Unix.

openldap65

Le ponemos una contraseña al usuario dando click en el botón Set password, en nuestro caso sera la misma que hemos venido manejando password.

openldap64

Por ultimo guardamos los cambios dando click en el botón Save.

openldap66

 

Ahora vamos a configurar el nuevo usuario como administrador del directorio, en una consola en el servidor detenemos el servicio slapd


root@DEBIAN-PDC:~#/etc/init.d/slapd stop

Abrimos el archivo /etc/ldap/slapd.conf


root@DEBIAN-PDC:~#nano /etc/ldap/slapd.conf

Buscamos la linea rootdn y le cambiamos el DN cn=admin,dc=eljardin,dc=co por el DN de nuestro nuevo usuario uid=admin,ou=People,dc=winterfell,dc=org


rootdn: "uid=inadmin,ou=People,dc=winterfell,dc=org"

openldap67

Como la contraseña que le colocamos al usuario es la misma que tenia el administrador del directorio (password) entonces no necesitamos cambiar la linea rootpw, si por alguna razón le colocaron otra contraseña o la quieren cambiar deberán cambiar este campo con la ayuda del comando slappasswd.

Iniciamos el servicio slapd de nuevo


root@DEBIAN-PDC:~#/etc/init.d/slapd start

Ya cambiamos el usuario administrador del directorio por un usuario que también esta creado en el sistema pero debemos cambiar las configuración de los módulos nss y pam del servidor  y también de LAM

Vamos a cambiar primero los módulos nss y pam, abrimos el archivo /etc/libnss-ldap.conf y buscamos la linea rootbinddn y la dejamos así:


rootbinddn uid=admin,ou=People,dc=winterfell,dc=org

openldap68

Los mismo hacemos en el archivo pam_ldap.conf recuerden que los archivos son exactamente iguales, dejamos la linea igual que en el archivo anterior:


rootbinddn uid=admin,ou=People,dc=winterfell,dc=org

Si cambiaron la contraseña deberán cambiar los archivos /etc/libnss-ldap.secret y/etc/pam_ldap.secret en donde se guarda la contraseña del administrador del directorio en texto plano, CUIDADO CON LOS PERMISOS DE ESTOS ARCHIVOS.

Reiniciamos el servicio nscd


root@DEBIAN-PDC:~#/etc/init.d/nscd restart

Ahora vamos a configurar LAM, ingresamos a LAM desde el navegador.

openldap69

Ingresamos al enlace de LAM Configuration.

openldap70

Luego al enlace Edit server profile.

openldap71

Ingresamos la contraseña de LAM, recuerden que es lam si no la han cambiado.

openldap72

Bajamos hasta el final de la pagina y en el modulo Security settings cambiamos el campo List of valid users y los dejamos así:


List of valid users uid=admin,ou=People,dc=winterfell,dc=org

En el modulo Lamdaemon settings, en el campo Server list ponemos la dirección 127.0.0.1, en el campo Path to external script escribimos la siguiente ruta /usr/share/ldap-account-manager/lib/lamdaemon.pl

openldap73

Guardamos la configuración dando click en el botón Save.

openldap74

Vamos a loguearnos en el servidor con el usuario admin para probar si quedaron bien las configuraciones y para que se cree el directorio Home del usuario.

openldap75

ahora volvemos a una terminal con el usuario root, abrimos el archivo /etc/sudoers

root@DEBIAN-PDC:~#nano /etc/sudoers

Al final del archivo agregamos la siguiente linea:

admin ALL=NOPASSWD: /usr/share/ldap-account-manager/lib/lamdaemon.pl

openldap76

Nos logueamos en LAM con el nuevo usuario administrador del directorio admin.

openldap77

En la parte superior derecha le damos click al menú Tools luego nos ubicamos con el ratón sobre Tests y damos click en Lamdaemon test.

openldap78

Damos click en el botón Ok y debe aparecer la siguiente pagina:

openldap79

Crearemos un nuevo usuario para probar se LAM crea el directorio de usuario correctamente.

Nos vamos a la pestaña Users y damos click en el boton New User, colocamos como apellido usuario1.

openldap80

Damos click en la pestaña Unix y marcamos la opción Create home directory.

openldap81

Asignamos una contraseña la cual será usuario1.

openldap82

Damos click en el botón Ok y luego en el botón Save.

openldap83

Vemos que LAM creo correctamente el directorio Home del nuevo usuario.

Y con esto hemos terminado la instalación y configuración de un servidor de directorio basado en OpenLDAP, el siguiente paso será configurar un cliente Linux para que se autentifique contra nuestro servidor de directorio.

cualquier duda la pueden dejar en los comentarios prometo responderla lo mas pronto posible, igualmente pueden contactarme en mi correo electrónico: alexanderlopezp@gmail.com, mi whatsapp:+57 317 855 7010, twitter: @lexTheLoneWolf, BBM PIN: 7B213F70.

Anuncios

23 comentarios en “PROYECTO V2.0 PARTE 2: Instalación y configuración del servidor OpenLDAP en Debian Wheezy

  1. Verdaderamente excelente! para ser sincero de una no me anduvo y del enojo hasta borre la maquina. Luego la cree de nuevo y anda todo bien pero….
    en el utlimo paso cuando tildamos que cree el directorio en 127.0.0.1 desde lam me dice lo siguiente:
    Was unable to create DN: uid=usuario1,ou=People,dc=miorv,dc=com,dc=ar.
    Insufficient access
    vos comentas que hay que tener cuidado con los permisos del archivo asi que seguramente algo paso…. me podras indicar????

    muchas gracias!

    1. Estoy justo en el mismo punto, no me deja crear el usuario1, me dice:
      “Imposible crear el DN: uid=usuario1,ou=People,dc=dominio,dc=com.
      Insufficient access”. Tampoco me deja borrar!

      Nos puedes ayudar? gracias, saludos.

  2. Muy buen tutorial. Llevo varias pruebas en un entorno de test en Proxmox y va de fábula. He encontrado algún problema que he subsanado y pongo por si alguien se puede encontrar con él:

    1. Al indicar en la URI de ldap://localhost no me funcionaba. Mirando en /var/log/auth.log era problema de conexión al servidor local, pero cambiando a ldap://127.0.0.1 ya todo perfecto.

    Ahora me estoy peleando con el lamdaemon, que al conectarse por SSH para poder usar la cuenta local de usuario, si tienes cambiado el puerto por uno diferente al 22, el test da error y la creación de nuevos usuarios también falla.

    De nuevo, gracias por recopilar toda esta información y compartirla!

    1. Me respondo a mi mismo…

      Para el tema de usar un puerto diferente en lamdaemon, hay que ir a LAM Configuration -> Edit Server Profiles -> Landaemon Settings. Hay que añadir en la lista de servidores (usando el ejemplo de este tutorial) la IP 127.0.0.1 una “coma” y luego el puerto, quedando así si usaramos el puerto 2222 en el SSH:

      127.0.0.1,2222

      1. tengo una duda, cuando intento loguearme en LAM con el nuevo usuario administrador del directorio admin, marca error a la contraseña, supongo que el usuario en LAM sigue siendo admin, cierto?

      2. Hola que tal Jordi, el problema Unix account Your LAM admin user (uid=admin,ou=People,dc=cuetin,dc=org) must be a valid Unix account to work with lamdaemon! Se resuelve con la especificacion del Puerto ssh en la configuración del lamdaemon 127.0.0.1,22 ? Gracias…

  3. Increible este post. Muchas felicidades. Me ha sido muy útil. A mi no me hizo falta hacer los ultimos pasos porque asigné el administrador ldap a un usuario del sistema desde el comienzo.

    La verdad que hay que tocar diferentes ficheros y demás pero está muy bien explicado. Un problema que tambien me surgio fue al hacer el slaptest ya que me daba error por dejar comentada la siguiente linea:
    access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
    by dn=”cn=gotham,dc=gotham,dc=local” write –>esta
    by self write
    by anonymous auth
    by * none
    Estuve un rato dandole vueltas pero al final conseguí ver el problema.
    De nuevo gracias por el tuto.

    1. hola me puedes ayudar con esta falla que halle n el tutorial
      y no logro salir de este bache

      al hacer el landaemon test me sale esto

      Unix account Your LAM admin user (uid=admin,ou=People,dc=cuetin,dc=org) must be a valid Unix account to work with lamdaemon!

  4. excelente Alexander, soy un tocayo, me interesaría saber si sabes de que forma se puede respaldar la base de datos del ldap, para poder restaurarla en cualquier instalación, te explico mejor tengo un server montado ya con ldap, pero necesito quitar ese por que tengo que cambiarle el nombre de dominio al ldap y a todas las configuraciones, por eso ya configure otro server, solo me falta agregar los usuario y comenzar a conectar los equipos, pero como son 150 usuarios mas las maquinas y grupos quería saber si hay alguna forma de respaldar la base de datos y subirla en el nuevo server para automatizar un poco el trabajo y también hacerlo mas rápido

    1. Ya vi el error es de esta parte :

      nano /etc/ldap/slapd.conf

      Buscamos la linea rootdn y le cambiamos el DN cn=admin,dc=eljardin,dc=co por el DN de nuestro nuevo usuario uid=admin,ou=People,dc=winterfell,dc=org

      rootdn: “uid=inadmin,ou=People,dc=winterfell,dc=org”

      es que la linea deberia decir “admin” no “inadmin”

      rootdn: “uid=inadmin,ou=People,dc=winterfell,dc=org”

      De todos modos lo acabo de intentar y ahora me dice

      “Unable to connect to remote server!

      127.0.0.1”

  5. Buenas, tengo una duda, si quiero hacer un respaldo de todos los usuarios y grupos que cree a traves de “lam” (ldap-account-manager) . para volver a crear el servidor desde 0 , pero sin necesidad de volver a crear cada grupo y usuario de OpenLDAP .

    Como le hago un respaldo , y luego como lo importo ???

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s