sábado, 21 de julio de 2007

OpenLDAP HOWTO RHEL 5

HOWTO OpenLDAP RHEL 5

OpenLDAP Howto

Autor: Cristhian Nunez


Introducción

LDAP (Lightweight Directory Access Protocol) es un protocolo para consulta y modificación de servicios de directorio que se desempeñan sobre TCP/IP. LDAP utiliza el modelo X.500 para su estructura, es decir, se estructura árbol de entradas, cada una de las cuales consiste de un conjunto de atributos con nombre y que a su vez almacenan valores.

Paquetes Requeridos

openldap
openldap-clients
openldap-servers

Procedimientos

Crear la clave de acceso que se asignará en LDAP para el usuario administrador del directorio. Basta ejecutar desde una terminal:
slappasswd
Lo anterior debe dar como salida un criptograma como lo mostrado a continuación:

{SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Se edita el fichero /etc/openldap/slapd.conf y se verifica que los ficheros de esquema mínimos requeridos estén presentes. De tal modo, debe quedar algo así:

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema

Se editan los siguientes parametros, si no existen crearlos:

database bdb
suffix "dc=codigolibre,dc=org"
rootdn "cn=Administrador,dc=codigolibre,dc=org"
rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
directory /var/lib/ldap/

Inicie el servicio de LDAP y añada éste al resto de los servicios que arrancan junto con el sistema:

service ldap start
chkconfig ldap on

Edite el fichero /usr/share/openldap/migration/migrate_common.ph y modifique los los valores de las variables $DEFAULT_MAIL_DOMAIN y $DEFAULT_BASE a fin de que queden del siguiente modo:

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "codigolibre.org";
# Default base
$DEFAULT_BASE = "dc=codigolibre,dc=org";

A continuación hay que crear el objeto que a su vez contendrá el resto de los datos en el directorio. Genere un fichero base.ldif del siguiente modo:

/usr/share/openldap/migration/migrate_base.pl > base.ldif

Se utilizará ldapadd para insertar los datos necesarios. Las opciones utilizadas con este mandato son las siguientes:

-x autenticación simple
-W solicitar clave de acceso
-D binddn Nombre Distinguido (dn) a utilizar
-h anfitrión Servidor LDAP a acceder
-f fichero fichero a utilizar

Una vez entendido lo anterior, se procede a insertar la información generada en el directorio utilizando lo siguiente:

ldapadd -x -W -D 'cn=Administrador, dc=codigolibre, dc=org' -h 127.0.0.1 -f base.ldif

Una vez hecho lo anterior, se podrá comenzar a poblar el directorio con datos. Lo primero será importar los grupos y usuarios existentes en el sistema. Realice la importación de usuarios utilizando los guiones correspondientes del siguiente modo:

/usr/share/openldap/migration/migrate_group.pl /etc/group group.ldif
/usr/share/openldap/migration/migrate_passwd.pl /etc/passwd passwd.ldif
Lo anterior creará los ficheros group.ldif y passwd.ldif, los cuales incluirán la información de los grupos y cuentas en el sistema, incluyendo las claves de acceso. Los datos se podrán insertar en el directorio LDAP utilizando lo siguiente:

ldapadd -x -W -D 'cn=Administrador, dc=codigolibre, dc=org' -h 127.0.0.1 -f group.ldif
ldapadd -x -W -D 'cn=Administrador, dc=codigolibre, dc=org' -h 127.0.0.1 -f passwd.ldif

Comprobaciones.

Antes de configurar el sistema para utilizar LDAP para autenticar, es conveniente verificar que todo funciona correctamente.

El siguiente mandato verifica que directorios disponibles existen en el servidor 127.0.0.1.
ldapsearch -h 127.0.0.1 -x -b '' -s base '(objectclass=*)' namingContexts
Lo anterior debe devolver una salida similar a lo siguiente:

# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (objectclass=*)
# requesting: namingContexts
#

#
dn:
namingContexts: dc=su-red-local,dc=com
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

El siguiente mandato debe devolver toda la información de todo el directorio solicitado (dc=codigolibre,dc=org).

ldapsearch -x -b 'dc=codigolibre,dc=org' '(objectclass=*)'

Otro ejemplo es realizar una búsqueda específica para un usuario en particular. Suponiendo que en el sistema se tiene un usuario denominado fulano, puede ejecutarse lo siguiente:
ldapsearch -x -b 'uid=fulano,ou=People,dc=codigolibre,dc=org'

Lo anterior debe regresar algo como lo siguiente:

# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (objectclass=*)
# requesting: ALL
#



# fulano, People, linuxparatodos.net
dn: uid=fulano,ou=People,dc=codigolibre,dc=org
uid: fulano
cn: fulano
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: xxxxxxxxxxxx
shadowLastChange: 12594
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 505
gidNumber: 505
homeDirectory: /home/fulano

# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Configuración de clientes.

Defina los valores para los parámetros host y base a fin de establecer hacia que servidor y a que directorio conectarse. Para fines prácticos, el valor del parámetros base debe ser el mismo que se especificó en el fichero /etc/openldap/slapd.conf para el parámetro suffix.

# Your LDAP server. Must be resolvable without using LDAP.
# Multiple hosts may be specified, each separated by a
# space. How long nss_ldap takes to failover depends on
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).

host 192.168.0.1

# The distinguished name of the search base.
base dc=codigolibre,dc=org

Configuración de clientes Ubuntu

Asumiendo que tenemos instalado el servidor LDAP procederemos a configurar los clientes en ubuntu.

Instalar los siguientes paquetes:
#apt-get install libnss-ldap libpam-ldap nscd
Responder todas las preguntas de la siguiente manera:
LDAP Account for root: cn=admin,dc=codigolibre=org
Password: XXXX
Make local root database admin: yes
Database require logging in: No
Root login account: cn=admin,dc=codigolibre,dc=org
Root login password: XXXX
Libnss-ldap te permitira utilizar te permite utilizar ldap como un servicio de nombres, libpam-ldap permite accionar para autenticar los usuarios a traves de ldap y finalmente nscd es un demonio como especie de cache.

Editar los archivos :

#vi /etc/libnss-ldap.conf
host ldap
base dc=codigolibre,dc=org
rootbinddn cn=admin,dc=codigolibre,dc=org
#vi /etc/libnss-ldap.secret
XXXXX
#vi /etc/pam_ldap.conf
host ldap
base dc=suredlocal=com
rootbinddn cn=admin,dc=codigolibre,dc=org
#vi /etc/pam_ldap.secret
XXXXX
Editar los archivos necesarios en /etc/pam.d/ para la autenticacion
#vi /etc/pam.d/common-account
account sufficient pam_ldap.so
account required pam_unix.so
#Si deseas que se cree automaticamente el home user
#session required pam_mkhomedir.so umask=0022 skel=/etc/skel/ silent
#vi /etc/pam.d/common-auth
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
#vi /etc/pam.d/common-password
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5
#vi /etc/pam.d/common-session
session sufficient pam_ldap.so
session required pam_unix.so
session optional pam_foreground.so

Finalmente editamos /etc/nsswitch.conf y agregamos la directiva ldap
# vim /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap

Entornos Graficos

Instalar phpldapadmin

Descargar la ultima version de http://phpldapadmin.sourceforge.net/download.php
Guia Instalacion http://wiki.phpldapadmin.info/tiki-index.php?page=es.Documentation&bl



Bibliografia

Alcance Libre
http://www.alcancelibre.org/staticpages/index.php/como-ldap-auth
Joel Barrios
Jaime M. Tan Nozawa
http://www.debuntu.org/book/export/html/158