OpenLDAP < 2.3

Descripción

Servidor de Directorio, autenticacion, o Single Sign On

** todo lo aqui consignado sirve para openldap < 2.3 ..  para posteriores cambia radicalmente la estructura de archivos

Prerequistos

  • Servidor LDAP con un cliente colgado.
  • WWW: Servidor Web Apache (para el administrador con phpldapadmin)

Valores Agregados

  • phpldapadmin y gq: Para administracion 

Procedimiento

A. Instalación básica 

Instalacion de los rpms de ldap y las aplicaciones para la autenticación de usuarios, básicamente son (creo que tambien hay unas librerias, peroahi se verán si hay dependencias que faltan):

\tnss_ldap-

openldap-servers-

openldap-clients-

openldap-migration-

openldap-

pam_ldap-

En redhat no existe el pam_ldap, asi que toca copiarlo de otro paquete como el de Mandrake (en /usr/share/openldap/).

En Debian estan los paquetes muy parecidos, con excepcion de slapd.

Recuerde activar el servicio para cada vez que suba el equipo. 

B. Configuración

1. Configuración del Servidor Slapd

Editar el archivo de configuracion de OpenLDAP /etc/openldap/slapd.conf

a) Variables Globales

Se especifica la jerarquia inicial (raiz) del directorio, y se define cual es el superusuario y la base de datos a utilizar, en este caso “Manager”.
La utilización de nombres de dominio como skina.com.co es una convención, no es necesario que sea un dominio calificado (FQ0DN).

Definición de la raiz del arbol

\tsuffix\t\t“dc=skinatech,dc=com”

Linea opcional (no se usa)

\tsuffix\t\t“o=SkinaTech Ltda,c=CO”

Definición del super usuario

\trootdn\t\t“cn=Manager,dc=skinatech,dc=com”

b) Definicion del password del administrador.

Se utiliza el comando slappasswd para generar el password encriptado, en este caso se utilizó de la siguiente manera:

\t “slappasswd -s “

La respuesta por defecto utiliza el algoritmo SHA y debe ser copiada exacta (incluyendo {SSHA} frente a la directiva rootpw.

\trootpw\t\t{SSHA}zAss5kTtaeoRpEVeMXIAPZ9lArkMBQ9g

c) Definición de listas de control de acceso (ACLs)

Se deben definir como mí­nimo las siguientes Reglas con el fin de proteger los passwords de los usuarios y crear un usuario que no sea el manager pero que pueda hacer cosas sobre el arbol

access to attrs=userPassword
by self write
by anonymous auth
by dn=“cn=admin,dc=skinatech,dc=com” write
by * none

access to *
by dn=“cn=admin,dc=skinatech,dc=com” write
by * read

d) Antes de arrancarlo por primera vez

Antes de todo borre el contenido directorio /var/lib/ldap con excepcion de DB_CONFIG. Si no existe es prudente copiar uno que se encuentran en /etc/openldap

C. Prueba Funcionamiento

1. Basico linea de comandos

a) Ahora se debe ejecura el servicio de ldap para probar que la cosa quedo funcionando.

#>  /etc/init.d/ldap restart       ( o su equivalente segun distribucion)

b). Probar la inserción de información

Cree un archivo llamado test.ldif  (Anexo 1).  OJO  ldap es MUY exigente con la sintaxis, por eso no sedeben dejar espacios blanco al final de las lineas, ni lineas en blanco al comienzo del archivo.

Ahora adicionar esta información al directorio con el siguiente comando:

ldapadd -x -D “cn=Manager,dc=skinatech,dc=com” -W -f test.ldif

c) Ahora probar si la información se insertó, ejecutar:

\t ldapsearch -x -b 'dc=skinatech,dc=com' '(objectclass=*)'

(Con las nuevas versiones friega esta prueba)

2. Configuración del SO como cliente ldap

Si quiere que su sistema operativo use LDAP ya sea por pam o directamente.

2.1. Familia RedHat (Centos, Fedora, RedHat, etc)

Lo mejor de mundo es system-config-authentication .. si es en consola le toca primero setup y luego escoger la configuracion de Autenticaion

  • En la primera pantanlla escoja Informacion de Usuario –> Utilizar LDAP, y Authenticcion –> Usar autenticacion LDAP
  • En la segunda defina como se conecta: TLS no es necesario si es local y configure servidor y basedn .. y Listo ..

2.2. Familia Debian (Debian, Ubuntu, etc)

3. El momento de la verdad

Primero debe encomendar su alma al santo de su preferencia. Luego hacerle una promesa o ponerle una veladora.

Una vez superada la etapa mí­stica, es aconsejable monitorear el movimiento del log de ldap en el archivo /var/log/ldap/ldap.log.

Se puede usar tail -f /var/log/ldap/ldap.log para verificar si funciona basta ejecutar

#> su -

en el log de ldap debe verificarse que no haya ningun error del estilo “entry not found” (o algo similar)

O sea corra una prueba de identificación

#> id paginas
#> uid=1001(paginas) gid=100(users) grupos=1001(skina),100(users) context=user_u:system_r:unconfined_t:s0

Con esto ya debe funcionar.

*Es posible que para algunas aplicaciones como ssh deba modificar el archivo correspondiente en /etc/pam.d/

 

D. Addons

1. PhpLdapAdmin

a) La mejor herramienta de manejo de LDAP.

b) Descomprima el tar.gz en /var/www/html (o en el lugar adecuado). Existen rpms aunque toca buscar bien para conseguirlos actualizados y se instalan usualmente en /usr/share/phpldapadmin.

c) Dentro del directorio phpldapadmin edite el archivo config/config.php

$config→custom→session['blowfish'] = “a424ac9e342c61b43b2d04f8cb0b9dec”;

$ldapservers→SetValue($i,'login','timeout',300);

Este ultimo fue necesario en algunos casos con las ultimas versiones

d) Recomendado usar https con el rewrite. O sea mire la redireccion en el documento de Apache2.

e) Es posible que si aun asi no le funciona .. sea problema del tcpwrapers y entonces toque colocar en /etc/hosts.allow

ldapd slpad : ALL : ALLOW


f) OJO cuando cree cuentas .. Esta herramienta no hace todo, tiene varias cosas por hacer:

  • Tener un numero de UID valido
  • Crear el directorio
  • Agregar el atributo objectClass - Account para que la reconozca el correo (o PosixAccount)

Problema

E_STRICT: Declaration of AJAXTree::draw_dn() should be compatible with that of PLMTree::draw_dn()“  .. se resuelve en

https://bugs.launchpad.net/ubuntu/+source/phpldapadmin/+bug/446669

 

2. Servidor Replicante - Cluster LDAP - HA -->

 

3. Migración de usuarios (linux) a la base de datos.

a). Se ofrece un paquete para este proceso (sin garantias). MDK tiene un openldap-migration y redhat lo incluye y pone las herramientes en  /usr/share/openldap/migration. En caso de no tenerlas, se deben bajar las herramientas de migración de: http://www.padl.com/ son scripts de shell y perl.

Es necesario cambiar parametros en el archivo migrate_common.ph por  el dominio correcto.

# Default DNS domain

$DEFAULT_MAIL_DOMAIN = “skina.com.co”;



# Default base

$DEFAULT_BASE = “dc=skina,dc=com,dc=co”;

b) Hay dos formas de migrar la información, una manual y una automática  y a mi no me funciono la automática (como cosa rara).
Primero se debe preparar el directorio para la nueva información, para esto ejecutar:

\t./migrate_base.pl > base.ldif


lo que genera los servicios y clases base del sistema. Se suelen limpiar todo excepto lo básico: quite el primer registro. Solo se deja el encabezado del grupo, People, Grupo y quiza Alias.

Se adicionan con el comando sldapadd ya conocido.

NOTA:!! Edite el test.ldif y borre el primer grupo que asigna dc=com,dc=co  que normalmente no funciona.

c) Luego se debe sacar la información del passwd y shadow y adicionalmente de  los grupos, para esto se deben crear los correspondientes archivos ldif,
para esto usar:

\t./migrate_passwd.pl /etc/passwd passwd.ldif

./migrate_group.pl /etc/group group.ldif


Una vez creados estos archivos, es bueno limpiarlos del grupos y usuarios del sistema y dejar solo usuarios y grupos reales y a partir de ahi, solo resta adicionarlos a las base de datos, ejecutar:

\tldapadd -x -D “cn=Manager,dc=skina,dc=com,dc=co” -W -f passwd.ldif

ldapadd -x -D “cn=Manager,dc=skina,dc=com,dc=co” -W -f group.ldif


d) Para verificar que la información se incertó correctamente, ejecutar:

\tldapsearch -x -b 'ou=People,dc=skina,dc=com,dc=co' '(uid=*)'


esto debe desplegar los usuarios.

4. Usar MySQL - MariaDB como backend en vez de BDB

a) Primero instale el soporte  openldap-server-sql

b) Prepare la base de datos de MySQL - MariaDB

- Creela con usuario y contraseña

- El acceso se hace com ODBC asi que toca meterle mano a /etc/odbc.ini y a /etc/odbcinst para acceso a ella

- La estructura de la base de datos y algunos datos de ejemplos estan en el la documentacion (/usr/share/doc….)

b) Configure el server para usar el backend
 

 
modulepath    /usr/lib/openldapmoduleload    back_sql.labackend      sqldatabase     sqldbname       ldapdbuser       myldapdbpasswd     passwdrootsubtree_cond    "upper(ldap_entries.dn) LIKE CONCAT('%',?)"insentry_query  "INSERT INTO ldap_entries (dn,oc_map_id,parent,keval) VALUES (?,?,?,?)" has_ldapinfo_dn_ru      no

c) Configure la base de datos

He aqui el problema mas grande de esto, ..  cada schema requeire un mapeo (metadata) para que LDAP lo entienda. El ejemplo proveido sirve para un directorio con solo inetorgperson ..pero cualquier salida a otro ObjectClass .. se jode.

d) Referencias

 

Colgar Aplicaciones -->

 

Problemas y Trucos

0. Como configuro el SO para que lo use.  A MANO !!

a) Editar el archivo /etc/ldap.conf (si al hacer los cambios las cosas no funcionan, crear un link simbolico a ese archivo en /etc/openldap/ o viceversa).
el host donde está el servidor ldap (es preferible poner una dir IP)

<HTML><blockquote>

host 127.0.0.1

</blockquote></HTML> El nombre de la base para las búsquedas.

\tbase dc=skina,dc=com,dc=co

Las directivas para que PAM y NSS funcionen (hay MUCHAS más pero con estas es suficiente para que funcione) (OJO: funcione != seguro):

\tpam_filter objectclass=account

pam_login_attribute uid

pam_password crypt

nss_base_passwd ou=People,dc=skina,dc=com,dc=co?one

nss_base_shadow ou=People,dc=skina,dc=com,dc=co?one

nss_base_group ou=Group,dc=skina,dc=com,dc=co?one

Se hace necesario usar un usuario y contraseña si no permite acceso anonimo

<HTML><blockquote>

binddn cn=proxyuser,dc=example,dc=com bindpw secret 

</blockquote></HTML> - En familia RH pueden hacerse los cambios con system-config-authtentication

- Un buen documento para ubuntu para estos cambios 

Configuración de Autenticacion PAM

a) Es prudente (necesario) tener instalado el paquete pam_ldap.

c) Se deben modificar los archivos correspondientes a los servicios que utilizará ldap para su autenticación, se encuentran en el directorio /etc/pam.d/, el paquete pam_ldap trae ya preconfigurados algunos y los deja en /usr/share/doc/pam_ldap/pam.d/… .

Por ejemplo el archivo de login queda de la siguiente manera:

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_nologin.so
auth       sufficient   /lib/security/pam_ldap.so
auth       required     /lib/security/pam_unix_auth.so try_first_pass
account    sufficient   /lib/security/pam_ldap.so
account    required     /lib/security/pam_unix_acct.so
password   required     /lib/security/pam_cracklib.so
password   required     /lib/security/pam_ldap.so
password   required     /lib/security/pam_pwdb.so use_first_pass
session    required     /lib/security/pam_unimx_session.so
#session    optional     /lib/security/pam_console.so

En general se pueden copiar todos… ojo con “su” porque algunos servicios como postgresql no arrancaranEs prudente que saque backup de los archivitos que reemplaza .. por ejemplo en un directorio old en el mismo sitio donde estan los pam's de ldap.                     

 

c) Configuración del Name Server Switch (NSS)

Modificar el archivo /etc/nsswitch.conf . Como solo se va a manejar autenticación de usuarios hay que modificar las lineas correspondientes a passwd, shadow y group. deben quedar asi:

passwd: files ldap

shadow: files ldap

group: files ldap

Antiguamente dejabamos primero ldap que files, pero se ponia lento y ademas nunca bajaba la maquina correctamente. 


NOTA: EN RH y su familia hay un system-config-auth que genera estos pam y nsswitch

 

1. Logging (tipo Red Hat)

A. Por defecto, en RedHat, ldap viene sin hacer bitacoras, entonces se copia mucho de Mandrake que si las trae.

B. El archivo general de configuracion en /etc/sysconfig/ldap

\t# nice level for slapd

SLAPDNICE=“+2”



# debug level for slapd

SLAPDSYSLOGLEVEL=“2”

SLAPDSYSLOGLOCALUSER=“LOCAL0”



# SLAPD URL list

SLAPDURLLIST=“ldap:/// ldaps:///“



# nice level for slurp

SLURPNICE=”+2”

C. La linea anexa a syslog.conf

\t# added by openldap-2.0.27 rpm mar ago 19 15:50:47 GMT 2003

local0.* -/var/log/ldap/ldap.log

en Debian ponga local4

recuerde crear el directorio y ponerle permisos de openldap .. sino no funciona  

D. En logrotate.d copie el ldap

\t/var/log/ldap/ldap.log {

missingok

notifempty

compress

postrotate

# only restart if slapd is really running

if test -n “`ps acx|grep slapd`”; then

/sbin/service ldap restart

fi

endscript

}


E. Cambios al script de inicializacion de /etc.rc.d/inid.d/ldap, dentro
del start pongo un adicion al los parametros

if [ -n “$SLAPDSYSLOGLOCALUSER” ] ; then

  OPTIONS=“$OPTIONS -l $SLAPDSYSLOGLOCALUSER”

  if [ -n “$SLAPDSYSLOGLEVEL” ] ; then

    OPTIONS=“$OPTIONS -s $SLAPDSYSLOGLEVEL”

  fi

fi

F. Si desea borrar un usuario por linea de comandos

ldapdelete -x -D “cn=Manager,dc=skina,dc=com,dc=co” -W  “uid=usuario,dc=skina,dc=com,dc=co”

2. Cuando el arbol es muy profundo

No se van a encontrar las hojas (usuarios) entonces en el ldap.conf debe ser algo como

nss_base_passwd ou=People,dc=skina,dc=com,dc=co?sub

nss_base_shadow ou=People,dc=skina,dc=com,dc=co?sub

nss_base_group ou=Group,dc=skina,dc=com,dc=co?sub

 

3. Como me cuelgo a un AD

MSFU (Microsoft Services for UNIX)

4. Migrar el dominio ( Skina a Fiberglass por ejemplo)

La facil

  1. Saque un dump (ldif) de LDAP .. ya sea con un search o desde phpldapadmin
  2. Baje LDAP y borre la base de datos en /var/lib/ldap
  3. Configure /etc/openldap/slapd.conf y /etc/ldap.con con el nuevo dominio ademas del archivo dump en donde debe cambiar el dominio tambien
  4. Levante LDAP y cargue con ldapadd el archivo nuevo ldif y ya

Listo 

5. Se fue la luz y No sube LDAP

Cuando se va la luz o se apaga a lo marrano .. no sube LDAP. Eso suele ser que la
base de datos que se daño. Eso se arregla con

cd /var/lib/ldap

db_recover



o

slapd_db_recover

 

Si el comando no lo encuentra tiene que instalar el paquete db4-utils o db_tools 

5. Ldapsearch no bota mas de 500

Hay un parametro llamado SIZELIMIT que se pone en /etc/openldap/slapd.conf y que si se pone en cero supuestamente quita el limite, pero algunos clientes como squid se despelota .. es mejor ponerlo en 1000 o algo asi.

-

6.  Interfaz grafica de creacion de usuarios

 

7.  Clientes Linux y Windows

A. LINUX: instale un paquete que se llama “gq” 

B. WINDOWS: existe un programa de nombre “ldap browser” (www.ldapbrowser.com)

 

8.  Ldap consume demasiado procesador

1. Verifique que tenga instalado y activo el servidicio de nscd.

2. En el archivo de configuracion de ldap (/etc/openldap/slapd.conf  o /etc/ldap/slapd.conf ) adicione la siguientes lineas:

 
cachesize 1000000 dbcachesize 100000000 

9.  Ldapsearch limitado a 80 columnas 

Hace un wrap despues de la columna 80. El perl de a continuacion lo limpia

ldapsearch ….  | perl -p -0040 -e 's/\ //'

10. Optimizar Berkeley DB

aaaaaa
 

11. Autenticacion con SAMBA4 y ldaps:%%//%%

Toca poner en le /etc/ldap/ldap.conf

TLS_REQCERT never

 

12. Migracion de un lado a otro

Referencias

Como pegarlo con Active Directory

Como hacer un arbol

 

FIN

==============================================================
ANEXO 1   El archivo de prueba     test.ldif

# extended LDIF## LDAPv3# base <dc=skinatech,dc=com> with scope subtree# filter: (Objectclass=*)# requesting: ALL## skinatech.comdn: dc=skinatech,dc=comobjectClass: topobjectClass: dcObjectobjectClass: organizationo: Ikatta Directorydc: skinatech# admin, skinatech.comdn: cn=admin,dc=skinatech,dc=comobjectClass: simpleSecurityObjectobjectClass: organizationalRolecn: admindescription: LDAP administratoruserPassword:: e1NTSEF9VnpwY0VBOVpDVis2T210QTZPemVxLytoZnNnTEp0UVI=# Groups, skinatech.comdn: ou=Groups,dc=skinatech,dc=comobjectClass: organizationalUnitou: Groups# People, skinatech.comdn: ou=People,dc=skinatech,dc=comou: PeopleobjectClass: topobjectClass: organizationalUnit# Manager, skinatech.comdn: cn=Manager,dc=skinatech,dc=comobjectClass: organizationalRolecn: Manager# Aliases, skinatech.comdn: ou=Aliases,dc=skinatech,dc=comou: AliasesobjectClass: topobjectClass: organizationalUnit 


==============================================================                                                   
ANEXO 2 Script para crear ldiff                                                   

** Por aqui hay un script aun mas completo cree_usuario_ldap.sh
 

==============================================================

 

=============================================================
15-Marzo-2006 J.E.Gomez v1.0 Primera version wikiíltima modificación: V 1.2 08/08/2008 kurtdavis10
íltima modificación: V 1.2 29/05/2008 kurtdavis10
íltima modificación: V 1.2 16/12/2005 kasandra Incluye Replica
íltima modificación: V 1.1 11/08/2005 kasandra
íltima modificación: V 1.0 17/08/2004 kasandra
íltima modificación: V 0.9 24/04/2004 kasandra

íltima modificación: V 0.7 19/08/2003 kasandra

íltima modificación: V 0.5 10/04/2003 Daniel Torres Autor: Daniel Torres (daniel@paradoja.com)


Advertencia

Este documento es privado y es de uso exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.


 

Volver arriba