I-openldap: (0.03) (potato) *EN DESARROLLO* Instalando un servidor LDAP (directorio ligero) Ejemplo como libro de direcciones común en una Intranet Cambios: 0.00 26/1/01 Empiezo a trastear... 0.01 28/1/01 primera versión 0.02 29/1/01 algunas dudas despejadas, BASE es vital 0.03 18/2/01 descripción de atributos para LDAPv3 en RFC2256 ***POR HACER:*** ¿Necesario index? ¿Que se pone por defecto? Netscape pone el objectclass: top (además del person) a las entrada ¿necesario? Modo estricto: schemacheck on (solo atributos definidos en los objetos) libpam-ldap + libnss-ldap = /etc/* ¿sustituto de NIS? ANTES DE EMPEZAR: Hay dos servidores LDAP en potato openldapd y umichldapd, openldap es una evolución de umichldapd con mejoras y correcciones de bugs. Puedes convertir un libro de direcciones de Netscape en un archivo LDIF válido para LDAP, lee más abajo la sección "Exportar un libro de direcciones Netscape" Desde Netscape no se pueden añadir entradas al libro de direcciones en el servidor LDAP... (Idea para desarrolladores: visual-tcl + libtcl-ldap) 1) Instalar los paquetes - openldapd Servidor - openldap-utils Clientes - openldap-gui Guia de LDAP HTML, PS, y texto - ldap-rfc Documentos RFC relacionados con LDAP - GQ Visor LDAP gráfico (GTK) algo verde Estilo de sufijo: - domain or host: (dc=host,dc=dominio,dc=es) - location: (o=empresa,c=es) LDAP database directory - Por defecto /var/lib/openldap Fuente de entradas - auto (se generan unas entradas para poder añadir manualmente) - archivo ldif de backup Nombre de administrador - nombre del admin: (sugiero root) - password: 2) Editar /etc/openldap/ldap.conf -+------ -|# IMPORTANTE: ***Para poder conectar con el servidor LDAP*** -|# Añadir una entrada BASE que es un "dn base" por defecto al realizar -|# operaciones LDAP desde clientes LDAP: ldapsearch, Netscape -|BASE ou=libro, o=empresa, c=es -+------ 3) Editar /etc/openldap/slapd.conf -+------ -|# Comentar referral, no deseamos que se hagan consultas al exterior, -|# de los elementos que no estan en nuestra base de datos -|#referral ldap://ldap.four11.com -+------ OPCIONAL: -+------ -|# Acceso total a un superusuario -|# Las lineas rootXX no son precisas si ya tenemos el usuario -|# root-People-empresa-es con un userPassword en la base de datos de LDAP -|rootdn "cn=root,ou=People,o=empresa,c=es" -|rootpw "password" -| -|# La linea access es indispensable para poder escribir -|access to * by dn="cn=root,ou=People,o=empresa,c=es" write -+------ OPCIONAL: ¿necesario? ¿añadir también indices o,ou? -+------ -|# Añadir indices -|index cn,sn,uid -|index objectclass pres,eq -|index default none -+------ CREAR LIBRO DE DIRECCIONES PARA NETSCAPE DE LECTURA A TODO EL MUNDO 1) Añadir la estructura libro a las entradas - dn: ou=libro, o=empresa ,c=es - objectClass: top - objectCLass: organizationalUnit - ou: libro 2) Autorizar usuarios al libro de direcciones Añade estas lineas a /etc/openldap/slapd.conf ¿necesario? (solo para leer no) - access to dn=".*, ou=libro, o=empresa, c=es" - by * search - ¿o read? 3) Releer configuración: /etc/init.d/openldapd restart INTRODUCIR ENTRADAS A MANO ? Vamos a usar la definición de objectclass person ¿inetOrgPerson? (buscala en /etc/openldap/slapd.oc.conf) EXPORTAR UN LIBRO DE DIRECCIONES NETSCAPE - Seleccionar el libro - File -> Export - Ponerle el nombre libro-netscape (esto guarda libro-netscape.ldif) - Se exporta en LDIF pero hay que retocar todos los "dn:" para eliminar el mail=.* y poner una "base" válida LDAP, usa mi script I-openldap-conversor COPIAS DE SEGURIDAD 1) Generar un archivo de intercambio LDIF ldbmcat /var/lib/openldap/id2entry.dbb > backup.ldif 2) Restaurar una copia de seguridad de la base de datos LDAP ATENCION: Sobreescribe la base de datos que ya tienes /etc/init.d/openldapd stop # Detengo servidor LDAP ldif2ldbm -i archivo-ldif /etc/init.d/openldapd start # Arranco servidor LDAP ADMINISTRACION: 1) Cambiar contraseña de administrador LDAP ldappasswd -H md5 -D cn=root,ou=People,o=empresa,c=es -W # -H md5 = cifrar con md5 (y codificar en base64) # -D dn = acceder con esta identidad # -W = pedir la contraseña LDAP en la consola Enter LDAP password: New password: Re-enter new password: USO DESDE NETSCAPE Crear un nuevo directorio - File -> New Directory CONFIG: - Description = NOMBRE-DEL-SERVIDOR-LDAP - LDAP Server = 192.168.0.1 - Server Root = ou=libro,o=empresa,c=es ATENCION: Al pulsar sobre el directorio _NO_ se muestra ninguna entrada del libro hasta que se hace un [Search for...] de por ejemplo Nombre "*" ACTIVAR BUSQUEDA EN EL DIRECTORIO: - Edit -> Preferences -> Mail&Newgroups -> Addressing - (x) Directory server - Seleccionar el NOMBRE-DEL-SERVIDOR-LDAP en el desplegable PRUEBA: - Escribe un correo nuevo a "*Parte-de-Apellido" se buscan las entradas de LDAP que lo contienen ¿guapo eh? DETALLES: Atributos de los Campos en Netscape (para las busquedas): o=Organization ou=Department cn=Name mail=Email telephonenumber=Phone Number l=city *ATENCION*: NO USAR locality=City street=Address *ATENCION*: NO USAR streetaddress=Street/Address CLIENTE openldap-utils trae: ldapsearch, ldapmodify, ldapdelete, ldapmodrdn, ldappasswd, ud-openldap, ldapadd CLIENTES GRAFICOS LDAP - GQ cliente GTK para LDAP: Va bien para hechar un vistazo y modificar entradas pero está algo verde... SEGURIDAD: - OpenLDAP corre como root (MAL) - Escucha en el puerto "ldap" (389) en todos los interfaces (MAL) - No hay binarios suid root (BIEN) Puede que fuera buena idea arrancar LDAP desde xinetd (restricción de interface) *POR PROBAR* Crear usuario ldap y correr servicio como ese usuario... PRUEBAS: 1) Monitorizar servidor LDAP: ldapsearch -s base -b cn=monitor 'objectclass=*' 2) Consulta de entradas: ldapsearch -b "o=empresa,c=es" "cn=*" cn mail # -h 192.168.0.1 = usar esta IP # -p 389 = usar este PUERTO (389 por defecto) # -b = utilizo este searchbase # "cn=*" es la condición de busqueda # cn mail = es lo que queremos ver de esas entradas 3) Pruebas de modificación - Crear archivo-ldapmodify con: -+------ -|dn: cn=Nombre Apellido, ou=libro, o=empresa, c=es -|changetype: modify -|replace: sn -|sn: Apellido-nuevo -+------ ldapmodify -D cn=root,ou=People,o=empresa,c=es -f archivo-ldapmodify -W # -D dn = acceder con esta identidad # -f archivo = usar el contenido de este archivo para hacer las modificaciones (no hay modo interactivo) # -W = pedir la contraseña LDAP en la consola SOLUCION DE PROBLEMAS: 1) Consulta desde cliente ldapsearch "cn=*" ldapsearch -b "o=empresa,c=es" "cn=*" 2) Acceso directo a la base de tados (sin usar slapd) ldbmtest # le = buscar en id2entry, pide el dnid (numero de entrada) 3) Para volver a configurar el paquete Debian *POR PROBAR* - /usr/share/doc/openldapd/slapd.conf.example -> /etc/openladp/slapd.conf - /var/lib/dpkg/info/openldapd.config *POR PROBAR* MENSAJES DE ERROR - BASE en /etc/ldap.conf no definido o incorrecto Mensaje de Netscape al intentar autenticar para conectar al servidor LDAP: Please enter your Email and password for access to SERVIDOR-LDAP User ID: Password: "Mail id invalid or not unique, cannot resolve to directory authorization entry" POR DENTRO: Parece que: - Las contraseñas en ldap se apoyan en las reglas de access - Las reglas de access determinan lo que realmente puede hacer un usuario UN POCO DE TEORIA Atributos extraidos de RFC2256 para un libro de direcciones: c=es # Country -> Pais en dos letras (ISO3166) o=empresa # Organization -> Organización ou=departamento # OrganizationalUnit -> Unidad de organización # (People, Roaming..., departamento) cn=Manel Marin # Common Name -> Nombre Completo givenName=Manel # Nombre de pila sn=Marin # SurName -> Apellido initials=MM title=currante o=empresa ou=departamento businessCategory=Empresa fabricante de tornillos mail=quien@donde.es userCertificate= cACertificate= description=Esto es una entrada del libro de direcciones seeAlso= (labeledURL=http://pagina.web.com _NO DEFINIDO EN RFC2256_) facsimileTelephoneNumber=123456789 telephoneNumber=12346789 (mobile=123456789 _NO DEFINIDO EN RFC2256_) (pager= _NO DEFINIDO EN RFC2256_) internationaliDSNNumber= telexNumber= teletexTerminalIdentifier= street=dirección l=ciudad st=USstate/provincia postalAddress=dirección postal postalCode=código postal postOfficeBox= physicalDeliveryOfficeName= preferredDeliveryMethod= registeredAddress=Dirección con acuse de recibo Terminos: RDN es "cn=Manel Marin" (Relative DN) DN es "cn=Manel Marin,o=empresa,c=es" (Distinguished Name) SISTEMA ALTERNATIVO: dc=dominio,dc=es # DomainComponent -> Componente de dominio Algunas clases de objetos (objectClass), mira /etc/openldap/slapd.oc.conf para ver las definiciones... - top - organization (puede tener userPassword) - organizationalUnit (puede tener userPassword) - organizationalPerson (puede tener userPassword) - person (puede tener userPassword) *DEFINICION SIMPLE* - inetOrgPerson (¿para Libro de Direcciones de Netscape?) ARCHIVOS: /etc/openldap/slapd.conf Configuración /var/lib/openldap Directorio (por defecto) de la base de datos /etc/openldap/slapd.oc.conf Clases de objetos (define atributos por objeto) DEFICIENCIAS: BUGS: NETSCAPE: Es curioso que Netscape exporte la ciudad como "locality:" y la calle como "streetaddress" y que al buscar en directorio LDAP busque ciudad como "l:" y calle como "street:" (que por cierto son lo estandard según RFC1779) A PROBAR MAS: MAS AYUDA: LDAP-HOWTO file:/usr/doc/openldap-guide/guide.html/index.html (de openldap-guide) man slapd.conf # Archivo de configuración man ldap.conf RFCs del paquete ldap-rfc (en /usr/doc/ldap-rfc/rfc) RFC2256 A Summary of the X.500(96) User Schema for use with LDAPv3 - Descripción de atributos/objetos para LDAPv3 RFC1309 Technical Overview of Directory Services Using the X.500 Protocol - Explicación de clases de objetos y del espacio de nombres X.500 (que son los que usa LDAP) RFC1779 A String Representation of Distinguished Names - Incluye tabla con palabras llave estandar (CN,L,ST,O,OU,C,STREET) RFC1558 A String Representation of LDAP Search Filters - Formato de cadena de filtro para busquedas LDAP (muy técnico) http://www.openldap.org How to make OpenLDAP accessible from Netscape? - http://www.openldap.org/faq/data/cache/422.html How does Netscape Communicator LDAP authentication work? - http://www.openldap.org/faq/data/cache/514.html CUSTOMIZING LDAP SETTINGS FOR COMMUNICATOR 4.5 - http://developer.netscape.com/docs/manuals/communicator/ldap45.htm Anexo-I archivo LDIF de ejemplo para libro de direcciones de Netscape ---8<--- dn: c=es objectClass: top objectClass: country c: es dn: o=empresa, c=es objectClass: top objectClass: organization o: empresa dn: ou=People, o=empresa, c=es objectClass: top objectClass: organizationalUnit ou: People dn: cn=root, ou=People, o=empresa, c=es objectClass: top userPassword: {crypt}xxxxxxxxxxxxx cn: root dn: ou=libro, o=empresa ,c=es objectClass: top objectCLass: organizationalUnit ou: libro dn: cn=Manel Marin, ou=libro, o=empresa, c=es objectClass: person cn: Manel sn: Marin title: currante o: Empresa ou: Departamento l: Ciudad street: Calle y número mail: manel@proveedor.es uid: mmarin --->8---