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)
- http://wiki.debian.org/LDAP/NSS
- https://distroid.net/configure-ldap-server-client-linux-mint/
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
- El readme es bueno como instructivo para ponerlo a andar /usr/share/doc/openldap-servers-sql-2.3.43/rdbms_depend/README
- http://www.docunext.com/archives/noofs/ —
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
- Saque un dump (ldif) de LDAP .. ya sea con un search o desde phpldapadmin
- Baje LDAP y borre la base de datos en /var/lib/ldap
- Configure /etc/openldap/slapd.conf y /etc/ldap.con con el nuevo dominio ademas del archivo dump en donde debe cambiar el dominio tambien
- 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
- LDAP Linux HOWTO –
- LDAP Implementation HOWTO –
- http://www.linux-mag.com/depts/guru.html (ediciones de febrero, marzo y abril de 2002) –
- http://www.goa.es
- https://help.ubuntu.com/7.04/server/C/openldap-server.html –
- Como activar TLS en RedHat http://kbase.redhat.com/faq/docs/DOC-8655
- Activar TLS generico en OpenLDAP http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html#5.0
Como pegarlo con Active Directory
- http://linuxmafia.com/faq/Security/active-directory.html –
- http://enterprise.linux.com/enterprise/04/12/09/2318244.shtml?tid=102&tid=101&tid=100 –
- http://www.securityfocus.com/infocus/1563 –
Como hacer un arbol
- http://ldapman.org/articles/tree_design.htm –
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.