Informe Trinidad http://softlibre.unsa.edu.ar/trinidad Sistema de Instalción y Configuración de Esquema EKEKO - OpenLDAP - SAMBA - OpenWebMail Por Bernardo José Bongiovanni - Pérez Gastón Pablo Director - Diego Saravia INDICE 1 Introducción 4 1.1 Resumen del Contenido Temático 4 1.2 Orientación de este Documento 4 2 Licencia 4 3 Ekeko 5 3.1 Conceptos del Sistema Ekeko 5 3.2 Objetivos y tareas del Sistema Ekeko 5 3.3 Estructura General de Ekeko 5 4 LDAP 6 4.1 Un poco de historía 6 4.2 Conceptos de LDAP 6 4.2.1 Relación entre lecturas y escrituras 6 4.2.2 Extensibilidad 7 4.2.3 Replicación de la información 7 4.2.4 Rendimiento 7 4.2.5 Estandares 7 4.3 Arquitectura Cliente-Servidor del Servicio de Directorio 7 4.3.1 Esquema de Interacción entre Cliente y Servidor LDAP 7 4.4 Directorio Base o Raíz 8 4.5 Estructura y Objetos de LDAP 8 4.6 Backends, objetos y atributos en LDAP 8 4.7 Ventajas de LDAP 10 4.8 Modelo 10 5 OpenWebMail 10 5.1 Porque usar OpenWebMail (conceptos) 10 6 Esquema General de Servicios 10 6.1 Esquema de Meta-Sistema 10 6.2 Ekeko 11 6.3 OpenLDAP 11 6.4 OpenWebMail 12 6.5 Estructura de la Base de Datos Alias 13 6.5.1 Tablas 13 6.6 ODBC 15 6.7 SCHEMAS 16 6.8 Como Funciona nuestro esquema 16 6.9 Ventaja del Esquema 18 7 Manual de Protocolos de Instalación de Servicios Ekeko - OpenLDAP - OpenWebMail 18 8 Trinidad 18 9 Exportador de LDAP a Sistema /etc 19 10 Manual de Usuario Sistema de Registro Civil U.N.Sa. (Ekeko) 19 10.1 Principal (invitado) 19 10.2 Login 20 10.3 Principal (super) 20 10.4 Buscar 21 10.5 Sistema de Registro Civil 22 10.6 Ingresar Persona 22 10.7 Relacionar Identidad con Alias 23 10.8 Tipos de Identidad 24 10.9 Tipos de Documento 24 10.10 Edicion de Datos Personales 25 10.11 Edicion Insercion y Eliminación de Documentos 25 10.12 Ubicaciones 26 10.13 Datos de Alias 26 10.14 Datos de Login LDAP 27 10.15 Cambiar Clave 27 10.16 Principal (usuario real de sistema) 28 11 Manual de Usuario "Sistema de Autenticación LDAP" (Ekeko) 29 11.1 Sistema de Autenticación LDAP (menu principal) 29 11.2 Servidor LDAP 29 11.3 Servidores de Replicación LDAP 30 11.4 Añadir Replica 30 11.5 Grupos LDAP 30 11.6 Relacionar Grupos y Usuarios 32 11.7 Exportar Sistema Ekeko-LDAP a Sistema /etc 32 11.8 12 Conclusiones 32 13 Agradecimientos 33 14 Bibliografía 33 Introducción En el desarrollo de este informe se explicarán detalladamente los conceptos necesarios para comprender los motivos por los cuales se ha desarrollado este tema de seminario. Podemos decir en resumen que lo que en realidad se pretende es hacer funcionar varios sistemas, que funcionan muy bien independientemente, en un meta-sistema o sistema mas grande del cual formaran parte compartiendo informacion, para realizar varias tareas o mejor dicho para brindar diversos servicios básicos en una red; en este caso sera la red de la universidad. Los servicios que se pretenden brindar son basicamente: Informacion acerca de las personas y usuarios (Ekeko). Autenticacion de usuarios global, a travez de la red (LDAP). Homogenizacion para compartir archivos en cuanto a los sistemas operativos mas usados Windows - Linux (SAMBA). Correo electronico, rapido y eficiente, autenticado por el mismo sistema de autenticacion de red (OpenWebMail). Mantener la informacion pertinente a los usuarios y autenticacion en una sola base de datos libre (PostgreSQL). Resumen del Contenido Temático Tareas: Redactar Protocolos para. 1.Configurar servidores LDAP, tanto central como replicas con acceso a base de datos Postgres. 2.Configurar OpenWebMail con uso de LDAP. 3.Configurar clientes Linux/Windows con acceso a LDAP. Programación: 1.Desarrollar modulos Ekeko, tecnología que funciona a travez de web utilizando Perl, CGI, CSS y HTML; para interactuar con bases de datos Postgres usadas por LDAP y las del Registro Civil de la U.N.Sa. 2.Desarrollar interfaz Ekeko para administrar bases de datos Postgres de Registro Civil, a travez de Weblets. 3.Desarrollar esportador de estas bases para sistemas /etc. Orientación de este Documento En este documento se intenta no solo dar un informe de las tareas realizadas para este tema de seminario sino una detallada guia para aquellos que deben montar todo este esquema de trabajo o alguno de similares características. Vamos a intentar explicar como utilizar algunas herramientas que hemos creado para facilitar la instalacion pero tambien explicaremos los conceptos y pasos necesarios a seguir para hacerlo sin estas. Se explicara todo lo mas detalladamente posible pero cabe destacar que para poder comprender algunos conceptos será necesario tener minimos conocimientos en cuanto a bases de datos, redes y sistema operativo Linux o Unix, ya que no ahondaremos en ciertos aspectos que nos harán desviar del tema y supondremos conocidos; por supuesto estos no tendran que ver especificamente con nuestro tema a tratar. Otra cuestión a tener en cuenta es que tal vez en este documento nos dediquemos con mas esmero a cuestiones teóricas que practicas, ya que esto lo haremos en el "Manual de Protocolos de Instalación", al cual vamos a hacer referencia en varias oportunidades y el cual distribuimos conjuntamente con este informe, por lo que supondremos esta en sus manos tambien. Desde ahora nos referiremos al mismo como MPI por sus siglas. Licencia Todo el software desarrollado en este proyecto se distribuye bajo la licencia GPL Http://www.gnu.org, incluyendo los Modulos para el Ekeko, y Trinidad. La documentación bajo la licencia FDL. Ekeko Conceptos del Sistema Ekeko El Sistema EKEKO fue desarrollado por Diego Saravia; definido en un principio como un "Escritorio para Internet" con extensión para bases de datos; un ambiente que se incluye a si mismo editando/mostrando todos sus archivos. En conjunto con otros estudiantes y pasantes de la U.N.Sa (Universidad Nacional de Salta) y bajo la tutela de su creador se estan desarrollando sistemas de administración para la universidad. EKEKO pretende albergar información acerca de las personas y usuarios de la Universidad. Dicha información contendrá entre otras cosas; Nombre de usuarios, Login, cuenta de correo, clave de login, directorio en el servidor, etc. Toda esta información se almacenará en una base de datos de tipo PostgreSQL la cual maneja el sistema EKEKO, que a su vez es manejado a travez de interfaces web (weblets) por medio de un navegador. Los "Weblets" son programas escritos en lenguaje Perl que utilizan modulos Ekeko tambien creados con lenguaje Perl en los cuales se definen las variables y el proceso a seguir en una "pantalla" del sistema; estas variables son pasadas a los "Templates" de Ekeko que son los que dan la forma y el diseño de como el usuario verá esos datos. Cabe destacar que en estos Weblets, Templates y Modulos de Ekeko tambien estan involucradas otras tecnologias y lenguajes de programacion como ser CGI, CSS, Java, HTML y otras. Objetivos y tareas del Sistema Ekeko En el sistema Ekeko se crearan los sistemas de administracion de la Universidad entre los mismos, el "Sistema de Registro Civil" que es el que explicaremos detalladamente en este documento. Como mencionamos anteriormente Ekeko maneja una base de datos Postgres o mejor dicho maneja varias bases de datos Postgres ya que en Ekeko podemos tener varios sistemas y cada uno con su propia base de datos o bien un sistema con varias bases de datos, con esto queremos decir que podriamos tener varios sistemas de registro civil en un solo servidor, solo bastaria con definir distintos sistemas dentro de Ekeko y cada uno podria tener una base de datos igual, pero solo en cuanto a estructura; con diferentes datos. Los mismos sistemas de administracion para la universidad utilizaran distintas bases de datos. Por lo tanto a travez de Ekeko se mantendrá la base de datos de donde los demas sistemas que queremos montar obtendran los datos necesarios para trabajar. Para entender un poco mejor estos conceptos vamos a explicar un poco como es la estructura de Ekeko y como se maneja. Estructura General de Ekeko El Sistema completo se ubica en un directorio llamado "Ekeko" que por lo general se instala en el directorio /var/lib del sistema (depende de la distribucion que usemos). Luego tenemos la siguiente estructura de arbol: ekeko/ /raiz/ Raiz del sistema EKEKO. /SIS/ Directorio principal de sistema EKEKO. /bin Directorio de weblets. /db Definicion de las bases de datos que usa el sistema. /template Directorio de templates. /src/ Directorio de fuentes del EKEKO. /modules Modulos del Ekeko. /otro_sistema Otro Sistema dentro de Ekeko. Estos son los principales directorios del Ekeko aunque hay otros mas. El que mencionamos como "otro_sistema" es presisamente un directorio que define otro sistema dentro de Ekeko y para ser tal deberá tener en su interior otro directorio "SIS", valga la redundancia, el cual lo define como sistema y dentro de este tambien otro "db" que define a las bases de datos que utiliza, un "bin" para los weblets y un "template" para sus templates. Tambien vamos a encontrar otros archivos dispersos por el sistema los cuales sirven para determinar varios aspectos de Ekeko, por ejemplo: ekeko.conf generalmente ubicado en /etc (define algunos aspectos de configuracion, directorios de instalacion, etc), ekeko.log (mensajes de logueo a Ekeko) ekeko.pl (ejecuta Ekeko), que se encuentran en diferentes lugares del sistema según la distribucion que estemos utilizando y no mencionaremos aquí debido a que lo haremos mas detalladamente en el MPI. LDAP Este es uno de los temas que trataremos de abordar con mayor paciencia y esmero ya que es el mas complicado de comprender y el que mas tiempo y trabajo nos tomo poder concretar. Hacer funcionar LDAP en conjunto con Ekeko no es muy sencillo ni de entender ni de realizar ya que tenemos que recordar que los datos estan alojados en una base de datos Postgres y como explicaremos mas adelante LDAP no trabaja por defecto con Postgres sino con un tipo de bases de datos diferente (LDBM), por lo tanto no es una manera muy natural para trabajar; aunque LDAP ya esta brindando soporte para distintas bases de datos, todavia este se encuentra en un modo experimental y no totalmente pulido. Pero antes de comenzar a explicar todas estas cuestiones vamos a ver que es LDAP y porque lo utilizamos. Un Poco de Historia En 1988, la CCITT creo el estandar X.500, sobre servicios de directorio. En 1990 este estandar fue adoptado por la ISO, como ISO 9594, Data Communications Network Directory, Recommendations X.500-X.521. X.500 organiza las entradas en el directorio de manera jerarquica, capaz de almacenar gran cantidad de datos, con grandes capacidades de busqueda y facilmente escalable. X.500 especifica que la comunicación entre el cliente y el servidor de directorio debe emplear el Directory Access Protocol (DAP). Pero DAP es un protocolo a nivel de aplicación, por lo que, tanto el cliente como el servidor debian implementar completamente la torre de protocolo OSI. LDAP surge como una alternativa a DAP. Las claves del éxito de LDAP en comparacion a DAP de X.500 son: LDAP utiliza TCP/IP en lugar de los protocolos OSI. TCP/IP requiere menos recursos y esta mas disponible. El modelo funcional de LDAP es mas simple y ha eliminado opciones raramente utilizadas en X.500. LDAP es mas facil de comprender e implementar. LDAP representa la informacion mediante cadenas de caracteres en lugar de complicadas estructuras ASN.1. Conceptos de LDAP ¿Que es LDAP? LDAP significa "Protocolo de Acceso a Directorios Liviano" (Lightweigth Directory Access Protocol por sus siglas en Ingles), es un servicio de directorio muy parecido a los directorios del sistema de archivos al que estamos acostumbrados, como ser una guia de telefonos o los servicios de red como el NIS, DNS. LDAP es una base de datos especializada. Es importante destacar que LDAP no es otra base de datos mas, sino que esta optimizada para hacer busquedas (leer datos), la idea es que en LDAP las lecturas se realizan de manera mas frecuente que las escrituras. Las diferencias entre una base de datos de proposito general y un directorio son las siguientes: Relación entre lecturas y escrituras. Extensibilidad. Rendimiento. Estandares. Relacion entre lecturas y escrituras En un directorio se espera un numero muy alto de lecturas frente a escrituras, esto se debe a que generalmente la informacion contenida en el directorio cambia raramente, por ejemplo, cuantas veces cambiamos nuestro numero de telefono y cuantas veces la gente busca nuestro numero de telefono para llamarnos? Extensibilidad La ventaja que presentan los directorios frente a las bases de datos tradicionales se da en que el esquema se puede ir modificando para cubrir las necesidades que vayan surgiendo en la organización. Esto no suele encontrarse en las bases de datos de proposito general. Replicacion de la Información Las bases de datos de proposito general que admiten replicacion de datos, estan preparadas para replicar los datos en un numero reducido de servidores, esto se debe a que las copias deben ser consistentes y por lo tanto, las actualizaciones deben realizarse de forma sincronizada entre las diferentes sedes. En el caso de los directorios, es aceptable una inconsistencia temporal, por lo que el protocolo de replicacion/actualizacion es menos restrictivo. A travez de la replicacion de informacion, encontramos fiabilidad en el sistema, ya que en caso de fallo de un servidor, se puede usar un servidor replicado. Ademas tambien se puede obtener una mejora en el rendimiento al poner las replicas en redes cercanas a los usuarios, optimizando el camino de acceso al directorio y repartiendo la carga entre las distintas replicas. Rendimiento Las necesidades de rendimiento de un directorio frente a una base de datos de proposito general son bastante diferentes. Se espera que un servidor de bases de datos permita hasta cientos de transacciones por segundo, mientras que el rendimiento agregado del directorio se espera que sea del orden de miles de consultas por segundo. Estos requerimientos de rendimiento se deben a que el directorio forma parte del nucleo de muchas aplicaciones, y por lo tanto debe estar preparado para responder a las multiples consultas que estas aplicaciones pueden solicitarle. Estandares El hecho de que las bases de datos de proposito general utilicen ligeras variantes del estandar SQL no suele ser un problema, ya que rara vez tienen que interactuar dos bases de datos de diferentes fabricantes, sin embargo, dado que el directorio es una base de datos accesible desde multiples aplicaciones, el estricto cumplimiento del estandar es un requisito indispensable. Este aspecto es importante, ya que permite separar el desarrollo del cliente del desarrollo del servidor, permitiendo que cada desarrollo este optimizado en el sentido que sea conveniente. Como valor agregado, el estar sujeto a un estandar permite que el administrador no este restringido a un unico fabricante, pudiendo cambiar de proveedor en el momento que lo considere necesario, sin tener que cambiar el software que utilicen los clientes. Arquitectura Cliente-Servidor del Servicio de Directorio Los servicios de directorio suelen implementarse siguiendo el modelo cliente-servidor, de modo que una aplicación que desea acceder al directorio no accede directamente a la base de datos, sino que llama a una funcion de la API (Application Programming Interface), que envia un mensaje a un proceso en el servidor. Dicho proceso accede al directorio y devuelve el resultado de la operación. Algunas veces, el servidor puede convertirse en el cliente de otro servidor para conseguir la informacion necesaria para conseguir procesar la informacion que se le ha realizado. Esquema de Interaccion entre Cliente y Servidor LDAP 1.El cliente establece una sesión con el servidor LDAP. El cliente indica el servidor y el puerto en que el servidor LDAP esta escuchando. El cliente puede proporcionar informacion de autenticacion o establecer una sesion anónima con los accesos por defecto. 2.El cliente efectua las operaciones sobre los datos. LDAP proporciona capacidades de busqueda, lectura y actualizacion. 3.Una vez finalizadas las operaciones, el cliente cierra la sesion. Directorio Base o Raíz en cada servicio de directorio siempre hay un punto de inicio desde el que empezar a buscar. Este punto de inicio normalmente se llama "root" o raiz. Es similar a la raiz de un arbol; cada arbol tiene una raiz, luego algunas ramas y luego mas ramas y hojas. En comparacion con otros servicios de directorios tenemos: Para el sistema de archivos (en linux), el root o raiz es / Para el NIS el root es el nombre de dominio, por ejemplo "unsa.edu.ar" Para el DNS está Internic, por ejemplo, que mantiene la base de datos principal sobre los servidores de nombre. Igual para LDAP existe una base que es definible. Por ejemplo "o=Personas" donde o significa organización. Cada raíz puede tener varias ramas, para el sistema de archivos esas ramas pueden ser, por ejemplo, otro subdirectorio, o un archivo. Cada una de las ramas puede tener atributos. Por ejemplo, las ramas del sistema de archivos (subdirectorios y archivos) tienen los siguientes atributos: nombre, hora de modificación, propietario, grupo, etc. Estructura y Objetos de LDAP Cada rama del sistema de archivos o del LDAP, tiene un atributo unico que nos ayuda a diferenciarla de las demas. En un sistema de archivos este atributo es el nombre del archivo y su ruta ya que podriamos tener por ejemplo "/etc/archivo" y "/usr/archivo". El directorio almacena y organiza la informacion en estructuras de datos denominadas "entradas". Cada entrada del directorio describe un objeto (por ejemplo una persona), en LDAP el nombre completo de una entrada se llama "DN" (Distinguished Name), que la identifica univocamente. Un DN consiste en una secuencia de partes mas pequeñas llamadas Relative Distinguished Name (RDN), por ejemplo mi dn podria ser "uid=pablo,ou=People,dc=unsa,dc=edu,dc=ar", no es posible tener dos entradas con un mismo dn en un directorio pero si podriamos tener por ejemplo "uid=pablo,ou=Group,dc=unsa,dc=edu,dc=ar", y esto representaria al ejemplo dado para el sistema de archivos. Las comas marcan cada división en la referencia, y la secuencia se lee de derecha a izquierda, subiendo asi en la estructura del arbol por cada rama. Las entradas pueden ser organizadas en forma de arbol basandose en los DN. Una Clase de Objeto es una descripcion general de un tipo de objeto. El Schema (esquema) define que clases de objetos se pueden almacenar en el directorio, que atributos deben contener, que atributos son opcionales y el formato de los atributos. Los directorios no implementan normalmente los complicados esquemas para transacciones o esquemas de reduccion (rollback) que las bases de datos utilizan para llevar a cabo actualizaciones complejas de grandes volumenes de datos. Por el contrario las actualizaciones en un directorio son usualmente cambios sencillos de "todo o nada", si es que se permiten en algo. Backends, objetos y atributos en LDAP slapd (el demonio o programa residente para LDAP) se suministra con tres diferentes bases de datos de backend (dorsal, o base de datos de segundo plano) entre las que elegir. Por defecto LDBM, una base de datos de gran rendimiento basada en disco: SHELL, una interfaz de base de datos para órdenes arbitrarias de UNIX o guiones (scripts) del interprete de comandos (shell); y PASSWD, una sencilla base de datos de contraseñas. Para importar y exportar informacion de directorio entre servidores de directorios basados en LDAP, o para describir una serie de cambios que han de aplicarse al directorio, se usa en general un formato de archivos conocido como LDIF ("LDAP interchange format" o formato de intercambio de LDAP). Un archivo LDIF almacena informacion en jerarquias de entradas orientadas a objeto. El paquete de software LDAP incluye una utilidad para convertir archivos LDIF a formato LDBM. Un archivo LDIF contiene el siguiente aspecto: dn: o=rectorado, c=ES o: rectorado objectclass: organization dn: cn=pablo, o=rectorado, c=ES cn: pablo sn: perez mail: gpperez@rect.unsa.edu.ar objectclass: person Cada entrada esta identificada univocamente por el DN. Este esta compuesto por el nombre de la entrada mas la ruta de nombres que permiten rastrear la entrada hacia atrás hasta la parte superior de la jerarquia del directorio. En LDAP una Clase de Objetos (ObjectClass) define la colección de atributos que pueden usarse para definir una entrada, como dijimos ateriormente. El estandar LDAP proporciona estos tipos básicos para las clases de objetos: Grupos en el directorio, entre ellos listas no ordenadas de objetos individuales o de grupos de objetos. Emplazamientos, como por ejemplo el nombre del pais y su descripcion. Organizaciones que estan en el directorio. Personas que estan en el directorio. Una entrada determinada puede pertenecer a mas de una clase de objetos. Por ejemplo, la entrada para personas se define mediante la clase de objetos person, pero tambien puede definirse mediante atributos en las clases de objetos inetOrgPerson, groupOfNames y organization. La estructura de clases de objetos del servidor (su esquema) determina la lista de atributos requeridos y permitidos para una entrada concreta. Los datos del directorio se representan mediante pares de atributo y su valor. Cualquier pieza de informacion especifica se asocia con un atributo descriptivo. Por ejemplo el atributo commonName, o cn, puede utilizarse para almacenar el nombre de una persona. Cada entrada que se introduzca en el directorio se definirá entonces mediante la colección de atributos que hay en la clase de objetos a la que pertenece. Hay atributos que son "requeridos" y son aquellos que deben estar presentes en las entradas que utilicen la clase de objetos, por ejemplo todas las entradas necesitan el atributo objectClass que lista las clases de objeto a las que pertenece una entrada. Los atributos "permitidos" son aquellos que pueden estar presentes en las entradas que utilicen la clase de objetos. O sea se permite que esten pero no son requeridos. Cada atributo tiene la definicion de sintaxis que le corresponde. Esta describe el tipo de informacion que proporciona ese atributo: bin - Binario ces - Cadena con mayusculas y minusculas exactas (las mayusculas y minusculas son significativas en la comparacion) cis - cadena con mayusculas y minusculas ignoradas tel - cadena de numeros de telefono (como cis pero se ignoran los espacios cn blanco y guiones) dn - nombre distintivo. Cuando el software se haya compilado e instalado, toda la configuracion que requiere slapd para ejecutarse se encuentra en el archivo slapd.conf que en nuestro caso podria encontrarse en /usr/local/etc/openldap/slapd.conf, en este archivo, ademas de muchas cuestiones de configuracion, tambien se indica de que archivos LDAP toma las definiciones de clases de objetos (objectclasses) y atributos para la base de datos de segundo plano de LDAP (backend). Por lo general estos archivos, que pueden ser varios tienen un nombre como archivo.schema ya que como venimos mencionando en estos se define el esquema que puede tomar LDAP. Ventajas de LDAP LDAP es un estándar abierto. La mayoría de aplicaciones nuevas serán capaces de buscar información en una base de datos. Incluso Windows 2000 usa LDAP para sus servicios de directorio. Centralizar toda la información en un lugar tiene enormes beneficios: un único punto de administración, con menos posibilidad de errores, menos datos duplicados por todas partes, y la facilidad de realizar backups. Modelo Para entender mejor estos conceptos vamos directamente a explicar el modelo que utilizaremos en el desarrollo de nuestro tema de seminario, aunque cabe destacar que tiene algunas importantes variantes con respecto a los conceptos que hemos desarrollado anteriormente pero iremos explicando a medida que vayamos avanzando sobre el tema, lo haremos un poco más adelante en el capitulo dedicado a "Esquema general de Servicios". También puede observarse un breve resumen acerca de los conceptos básicos de LDAP en el MPI donde ademas se podrá encontrar las indicaciones debidamente especificadas para realizar la completa instalación de este servicio. OpenWebMail Porque usar OpenWebMail (conceptos) El Webmail es un sistema comodo, fácil de mantener y barato en cuanto a costos. No se necesitan máquinas o hardware de gran capacidad. La configuración en el cliente es nula, ya que se maneja todo desde un navegador sin necesidad de instalar software adicional. Elegimos usar OpenWebMail ya que es una alternativa de sistema Webmail libre; open source (codigo abierto) de ahi Open de OpenWebMail. Tambien OpenWebMail proporciona ademas de muchas opciones y ventajas bastante interesantes, la autenticacion de usuarios a travez de LDAP por lo que nos resulta adecuado para la integracion al esquema de servicios que vamos a montar. OpenWebMail es un derivado de NeoMail tambien un sistema de correo electronico open source basado en la tecnología de Webmail. Mas allá de esto no hay muchas cuestiones para explicar acerca de OpenWebMail salvo como funcionará en nuestro esquema de servicios, cosa que explicaremos mas adelante, y como realizar su instalación y configuracion para que funcione correctamente como queremos, lo cual explicaremos detalldamente en el MPI. Esquema General de Servicios Pretendemos montar un esquema en donde convivirán principalmente cuatro sistemas que compartirán información entre ellos para brindar servicios a los usuarios de la red. Estos Sistemas y sus tareas principales son: Ekeko: Sistema de Registro Civil - Manejo de base de datos PostgreSQL con datos necesarios para LDAP. OpenLDAP: Autenticacion de usuarios de la red. OpenWebMail: Servicio de correo electronico Webmail. SAMBA: Comparticion de archivos para clientes Windows. Esquema de Meta-Sistema Vamos a ir explicando por subsistemas. Ekeko Como explicamos anteriormente Ekeko maneja y mantiene los datos con los que trabajan sus sistemas en bases de datos de tipo PostgreSQL en nuestro caso vamos a trabajar con el sistema de Registro Civil el cual mantiene los datos referentes a las personas, los usuarios, datos referentes a cuestiones de LDAP y demas datos como veremos mas adelante cuando definamos la estructura de la base de datos, en una base de datos (valga la redundancia) denominada ALIAS por su referencia a los alias que identifican a los usuarios. A travez de Ekeko y los weblets y templates creados para el sistema de Registro Civil y los weblets creados para el manejo de LDAP podremos consultar, introducir, borrar o modificar datos. Como ya explicamos todo esto se realizará a travez de un navegador web. OpenLDAP En el sistema de directorio se creará una estructura basica como la siguiente: Este esquema corresponde a las entradas de LDAP que vamos a mantener, este es el "Arbol de LDAP" que mencionamos. Basicamente tenemos Usuarios y Grupos de usuarios, ya que usaremos el sistema de LDAP para realizar autenticacion porque las demas tareas las realizaremos mediante ekeko. Lo extraño en este esquema es la conexión que aparece en el grafico entre OpenLDAP y la base de datos PostgreSQL. Habiamos mencionado anteriormente que LDAP no utiliza una base de datos como con las que estamos acostumbrados a trabajar, una de proposito general, sino que esta optimizada para realizar busquedas, básicamente. El problema de esto es que LDAP trabaja con una especie de base de datos de tipo LDBM y Ekeko trabaja con PostgreSQL; entonces la idea principal es poder trabajar con Ekeko pero realizar la autenticación de usuarios de la red con LDAP, pero hacerlo manteniendo todos los datos centralizados en un solo lugar sin tener que duplicar los mismos. Esto nos lleva a decir que nuestra mayor tarea ha sido poder adaptar OpenLDAP para que lea la información necesaria de la base de datos de Ekeko como asi también que se adecue a su estructura de datos. El sistema de directorios con OpenLDAP en su forma estandar (utilizando base de datos del tipo LDBM) es muy estable y funciona muy bien, no obstante openLDAP proporciona una manera de relizar una conexión a otros tipos de bases de datos como ser PostgreSQL, MySQL y otras, pero esto todavía no se encuentra totalmente estandarizado y no ha sido probado por mucha gente, por lo que es bastante complicado de comprender y de hacer funcionar ya que hay que adentrarse un poco mas en los conceptos de LDAP y su definición de clases, objetos, atributos, etc. Vamos a explicar que es lo que hicimos para hacerlo funcionar, para esto primero empezaremos por mostrar la estructura de la base de datos Alias que maneja Ekeko y explicaremos cada una de sus partes. OpenWebMail Usaremos OpenWebMail para brindar como mencionamos, el servicio de correo electronico en formato Webmail a los usuarios de nuestra red. La vinculación con los demas sistemas de nuestro esquema esta en la parte de la autenticación de usuarios OpenWebMail leerá en el directorio LDAP los datos necesarios para efectuar dicha autenticación cada vez que un usuario desee ingresar a una sesión. Estructura de la Base de Datos Alias Vamos a ver solo estas tablas que son las que necesitamos para entender como funciona todo aunque puede haber alguna mas que es utilizada por ekeko para alguna otra cosa interna. Tablas ldap_entries: en esta tabla se guardan las entradas que lee el ldap para formar el arbol del directorio, los campos indican: id: clave primaria parent: numero de rama de la cual cuelga la entrada, la raiz tiene parent 0. keyval: hace referencia al id en la tabla en donde se encuentran los datos de la entrada, esto depende de la object class a la que pertenece la entrada, cuya referencia se hace en el campo oc_map_id. Vamos a ver un ejemplo mas adelante. dn: el distinguished name de la entrada ej: uid=usuario,dc=unsa,dc=edu,dc=ar. oc_map_id: referencia a la object class a la que pertenece la entrada. ldap_oc_mappings: Se guardan el mapeo de las object classes que necesita ldap para cada tipo diferente de entrada, los campos indican: id: clave primaria. delete_proc: llamada a funcion SQL para borrar una entrada perteneciente a esa object class. create_proc: llamada a funcion SQL para crear una entrada perteneciente a esa object class. keycol: es el campo de la clave primaria para identificar a las entradas pertenecientes a esa object class. keytbl: la tabla donde se encuentran los datos correspondientes a las entradas de esa object class. name: Nombre de la oc. ldap_attr_mappings: Mapeo de los atributos corespondientes a cada object class, los campos indican: id: clave primaria. delete_proc: llamada a procedimiento SQL para borrar el valor de un atributo. add_proc: llamada a procedimiento SQL para setear el valor de un atributo. from_tbls: tabla en donde se encuentran los valores del atributo. sel_expr: campo de la tabla en donde se guardan los valores de los atributos. name: nombre del atributo en cuestion. param_order: expect_return: para manejo de errores. join_where: condicion de una consulta SQL para permitir a LDAP hacer un join entre tablas. oc_map_id: referencia al id de la object class a la que pertenece el atributo. posix_group: Datos referentes a los grupos de usuarios, los campos representan: id: clave primaria. cn: nombre del grupo gidnumber: numero de grupo password: password encriptado del grupo group_member: Relacion de pertenencia entre grupos y usuarios, los campos representan: id: clave primaria memberuid: uid del miembro del grupo group_id: referencia al id del grupo al que pertenece el miembro organizational_unit: Definicion de las organizaciones, para nuestro modelo, datos referentes a ou=People y ou=Group, los campos representan: id: clave primaria description: correspondiente a la organizacion ou: nombre que define a la organización en LDAP dc_object: Definicion del nombre principal del arbol ldap, los campos representan: id: clave primaria description: la descripcion dc: el nombre en si alias: Datos acerca de los usuarios del sistema, principalmente datos para login. Id: clave primaria servidores: los servidores en los que el usuario tiene una cuenta okemail: homedirectory: directorio de trabajo del usuario en el servidor en el que tiene la cuenta administrada por LDAP. lugar: uidnumber: numero de usuario; debe ser el mismo del servidor siempre, tanto en el servidor como en alguna maquina en la que cuente con una cuenta local rediremail: direccion para redireccionar correo electronico gidnumber: numero de grupo primario al que pertenece el usuario estado: estado de habilitación del usuario. clave: clave encriptada del usuario loginshell: shell de login del usuario (por lo general usamos /bin/bash) alias: nick de usuario email: direccion de correo electronico identidad_id: referencia al id de la identidad a la que pertenece este alias identidad: Datos acerca de las identidades del registro civil, en nuestro caso la mayoría seran personas. id: clave primaria origen: donde se origino esta identidad sigla: puede ser las siglas de alguna identidad que no sea una persona otros: otras cosas nombre: nombre de la identidad tipoiden_id: referencia al id que dice que tipo de identidad es docs: Documentos pertenecientes a las identidades. id: clave primaria documento: el numero de documento identidad_id: referencia al ide de la identidad a la que pertenece el documento en cuestion tipdocs_id: referencia al id del tipo de documento al que pertenece el documento tipdocs: Definición de los tipos de documentos. id: clave primaria tdocs: tipo de documento descripcion: descripción del tipo de documento ubiciden: Relación entre ubicaciones e identidades. id: clave primaria identidad_id: referencia al id de la identidad a la que pertenece la ubicacion ubicacion_id: referencia al id de la ubicación correspondiente a la identidad ubicación: Datos referentes a las ubicaciones a las que pertenece una identidad u otra ubicación. id: clave primaria mapa: mapa correspondiente a la ubicación cartel: Si tiene algún cartel de indicación. nombre: nombre de la ubicación numero: numero de la ubicación otro: otras cosas url: direccion url de la ubicación cp: codigo postal de la ubicación calles_id: referencia al id de una calle ubicacion_id: referencia a otra ubicación de nivel superior a la que pertenece callesesq_id: referencia al id de una calle para indicar que la ubicación es una esquina tipoubicacion_id: referencia al id del tipo de ubicación al que pertenece tipoubicacion: Descripción de diferentes tipos de ubicaciones. id: clave primaria tipoubicacion: descripción del tipo de ubicación calles: Datos de calles. id: clave primaria calle: nombre de la calle tipoiden: Tipos de identidades. id: clave primaria tipoiden: descripción del tipo de identidad Ahora ya sabemos cuales son los datos que tenemos en las tablas y pasaremos a explicar como LDAP va a poder conectarse a la base y capturar esos datos para realizar busquedas. ODBC En primer lugar usamos un conector odbc para definir una conexión a la base de datos de postgres esto lo logramos instalando y configurando de manera especial unas librerias diseñadas especialmente para linux libiodbc y pgsqlodbc, y configuramos la conexión a la base de datos indicando en el archivo de configuración de LDAP (slapd.conf) que usaremos esta conección para obtener los datos. Todo el proceso para hacer esto se encuentra bien detallado en el MPI. SCHEMAS Si bien OpenLDAP trae por defecto los archivos necesarios con la definición de esquemas para object classes y atributos que necesitariamos, tuvimos que hacer algunas modificaciones a estas definiciones de atributos y esquemas ya que trabajando con el backend de SQL las objectclasses que necesitabamos no funcionaban de manera adecuada y producían fallos. Debido a esto tuvimos que estudiar como funcionaban estas clases y atributos y realizar modificaciones para que las entradas que necesitamos, que son personas y grupos trabajen con un solo tipo de objectClass ya que al hacer que trabajen con mas de una objectClass se producían los fallos, pero no se podía hacerlo de otra forma porque había atributos requeridos para realizar la autenticación que pertenecian a diferentes objectclasses. Esto era la parte mas complicada de comprender y el desarrollo de como hacer los cambios necesarios también se encuentra detallado en el MPI. Usamos tres archivos de esquemas: core.schema, cosine.schema, nis.schema, estos archivos de definición de esquemas vienen incluidos en el paquete OpenLDAP. El cambio que realizamos fue en el nis.schema quedando este de la siguiente forma: objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY DESC 'Abstraction of an account with POSIX attributes' MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description ) ) Así pudimos hacer que los usuarios solo pertenezcan a la objectClass PosixAccount y de esta obtengan los atributos nesesarios para la autenticacion. Talvez en definitiva el cambio en si no ha sido mucho pero la tarea de comprender como funciona y poder realizar un mínimo cambio para que funcione lo que queriamos hacer fue todo un logro, después de horas, días y meses de investigación y pruebas. Como funciona nuestro esquema Hasta ahora nos hemos dedicado básicamente a explicar como esta compuesta la estructura tanto de de la base de datos de Ekeko como de LDAP, todo esto para poder explicar, teniendo algunos conceptos mas claros, como funciona todo este complicado esquema. Si bien dijimos que todo el tema de inserción y modificación de datos se realizara mediante Ekeko hemos preparado todo el esquema para poder trabajar y realizar estas funciones de manera natural a travez de LDAP, esto nos permitiría en algunos casos alivianar el trabajo de carga de datos masivos creando archivos en formato LDIF y utilizando los comandos y herramientas estandares de LDAP o un programa cliente para LDAP. Mas arriba explicamos que LDAP trabaja como cliente-servidor, esto nos beneficia ya que no importa que cambios hayamos hecho sobre LDAP, las aplicaciones no los ven, solo le piden al servidor que haga algo y el mismo se encarga de hacer las cosas por lo tanto obtenemos una gran transparencia y podemos usar aplicaciones comunes y corrientes tambien para LDAP (ademas de Ekeko) y los cambios se verán reflejados en la base de datos Postgres. Por supuesto que volvemos a mencionar que debemos tener cuidado a la hora de efectuar estos cambios ya que nuestro esquema esta preparado solo para las tareas que necesitamos efectuar con Ekeko y podríamos llegar a dañar los datos o a la misma base. Esto nos lleva a recomendar que sigamos usando Ekeko para el manejo de los datos, aunque para realizar consultas podría ser bastante util. Para lograr estas tareas, LDAP necesita acudir a funciones de SQL ya que esta trabajando con una base de datos de este tipo. Estas funciones le dicen a LDAP como y donde ingresar, borrar o modificar atributos, entradas, etc, en fin datos. Las funciones que usamos son las siguientes: create_posix_group delete_posix_group set_posix_group_cn(varchar, int) RETURNS int set_posix_group_gidnumber(int, int) RETURNS int set_posix_group_grouppassword(varchar, int) RETURNS int del_posix_group_grouppassword(varchar, int) RETURNS int set_group_member_memberuid(varchar, int) RETURNS int del_group_member_memberuid(varchar, int) RETURNS int create_people () RETURNS int delete_people (int) RETURNS int set_people_uid(varchar, int) RETURNS int del_people_uid(varchar, int) RETURNS int set_people_userpassword(varchar, int) RETURNS int del_people_userpassword(varchar, int) RETURNS int set_people_uidnumber(int, int) RETURNS int del_people_uidnumber(int, int) RETURNS int set_people_gidnumber(int, int) RETURNS int del_people_gidnumber(int, int) RETURNS int set_people_homedirectory(varchar, int) RETURNS int del_people_homedirectory(varchar, int) RETURNS int set_people_loginshell(varchar, int) RETURNS int del_people_loginshell(varchar, int) RETURNS int Ahora vamos a explicar como funcionan. Vamos a suponer que queremos añadir una entrada al directorio, nuestra entrada esta definida en un archivo de formato LDIF de la siguiente manera: dn: uid=pablo,ou=people,dc=unsa,dc=edu,dc=ar objectClass: posixAccount userPassword: {crypt}ksdkjh23jlkj*l loginshell: /bin/bash uidnumber: 1000 gidnumber: 1000 homedirectory: /home/pablo Usando el comando de LDAP ldapadd (la manera de hacerlo se indica en el MPI) introducimos la entrada. 1.Al hacerlo LDAP se fija en el tipo de objectClass a la que pertenece la entrada, como pertenece a posixAccount LDAP se fija en la tabla ldap_oc_mappings en la fila correspondiente a esta objectClass en el campo create_proc que le dice a que funcion SQL tiene que llamar para crear esta nueva entrada en este caso como es una posixAccount este campo dice que se llame a la funcion create_people() la cual crea una nueva fila en la tabla Alias de la base de datos Alias. 2.En la tabla ldap_entries pone: en el campo dn, el dn de la entrada, en oc_map_id pone el id referente a la posixAccount en la tabla ldap_oc_mappings, en parent pone el id de la entrada corespondiente a ou=people,dc=unsa,dc=edu,dc=ar y en keyval pone el id de la nueva fila creada en la tabla alias. 3.Luego se fija en los atributos siguientes (loginshell, uidnumber, gidnumber, homedirectory) y va a llamar a las funciones correspondientes para setearlos. Estas funciones se indican en el campo add_proc de la tabla ldap_attrib_mappings el cual indica a que funcion SQL se tiene que llamar, por ejemplo para loginShell se llama a la funcion set_people_loginshell(varchar, int) que recibe como parametros el shell de login y el id de la fila correspondiente en la tabla alias. De esta manera queda ingresada la entrada en la base de datos y LDAP la puede visualizar como asi tambien se podran visualizar los datos y completar los que faltan a travez de Ekeko. Ahora vamos a ver como hace LDAP para localizar datos en la base de datos. Supongamos que se realiza una busqueda con el comando de LDAP ldapsearch (explicado en MPI). 1.LDAP realiza una busqueda SQL de la entrada en la tabla ldap_entries, con esto consigue en el campo keyval la fila donde se encuentran los datos de la entrada en cuestion y en el campo oc_map_id a que objectClass pertenece la entrada. 2.Con esto ya puede saber que atributos puede tener la entrada y donde hallarlos, fijandose en los campos, from_tbls que le dice en que tabla estan los datos y sel_expr que le dice en que campo buscar, con esto arma una consulta de selección y obtiene los datos para cada atributo. Así es como trabaja LDAP con la base de datos de Ekeko por lo que esta ha sido adaptada agregando datos nesesarios y tablas para dar la estructura a LDAP, pero tambien ha habido que adecuar LDAP para que trabaje correctamente con esta base de datos. En cuanto al manejo de datos con Ekeko, LDAP no se ve involucrado ya que Ekeko trabaja directamente sobre la base de datos de Postgres como lo hariamos normalmente. Ventaja del Esquema En este momento y despues de haber visto como trabajan los distintos sistemas que utilizamos podemos llegar a una simple conclusión acerca de las ventajas de nuestro esquema. Nuevamente volvemos a mencionar LDAP esta optimizado para realizar busquedas y consultas en forma muy veloz, sacrificando asi habilidad para la modificación de datos y transacciones con los mismos; las bases de datos de proposito general y los sistemas que las manejan están, aunque tambien optimizados para la busqueda y consulta, no tanto como LDAP; tampoco son tan buenos en cuanto a la replicacion de datos como LDAP, pero si para realizar grandes modificaciones y transacciones con grandes volumenes de datos. Por lo tanto con este esquema obtenemos: Velocidad a la hora de autenticar, y consultar datos a travez de LDAP en una red. Optima replicación de datos. Optimas modificaciones y transacciones de datos a travez de Ekeko, con una base de datos de Proposito General. Centralizacion de datos. Con esto una de las ideas es salvar los puntos debiles de los sistemas trabajando en forma separada, haciendolos trabajar en forma conjunta. Y como la frutilla del postre "Libertad Total", ya que hemos utilizado en su totalidad lo que creemos el mejore software libre disponible para estos propositos, por lo que esto no tiene "costo" alguno, y decimos costo entre comillas ya que nos referimos al costo monetario solamente. Con todo esto concluimos que hemos obtenido un sistema, estable, confiable, rápido y de bajo coste. ¿Qué más se puede pedir?. Manual de Protocolos de Instalación de Servicios Ekeko - OpenLDAP - OpenWebMail En varias oportunidades hemos hecho referencia a este manual como MPI, en el mismo ademas de explicar brevemente algunos de los conceptos mas importantes, se encuentra principalmente el detalle de como montar todo este complejo esquema de servicios, todo paso a paso. Por lo que en este informe no nos preocupamos mucho por la parte practica de la cuestion. Trinidad Trinidad es un empaquetado creado por nosotros que contiene las librerias y programas necesarios para montar todo este esquema propuesto, contiene un instalador en formato MAKEFILE, que tiene por finalidad acelerar y alivianar todo el proceso de instalación y configuración. Consiste en: libiodbc psqlodbc Ekeko openLDAP OpenWebMail Samba Script de instalacion Trinidad Archivos varios para configuracion Manual de protocolos de Instalacion En resumen se trata de un script realizado en bash de Linux que se encarga automaticamente de instalar todos los sistemas y configurarlos con los parametros que el usuario administrador le indica. Es bastante complejo pero fácil de manejar y realiza todas las tareas necesarias para que el usuario no se lie con demasiadas cosas. Solo le indicamos las minimas cosas que necesita saber y listo, se encarga de realizar todas las acciones pertinentes para montar todo. Para mayores referencias, deberíamos efectuar antes una lectura del Manual de instalación de Trinidad. Exportador de LDAP a Sistema /etc Este se trata de un script realizado en Perl que se encarga de exportar todos los datos referentes a usuarios y grupos, alojados en la base de datos postgres manejada por Ekeko, a un sistema /etc. Llamamos sistema /etc al sistema de autenticacion de un sistema Linux, en el cual son necesarios tres archivos: /etc/passwd -> usuarios de sistema, uidnumber, homedirectory, loginshell, etc /etc/shadow -> claves encriptadas de los usuarios del sistema. /etc/group -> grupos y miembros de grupos del sistema. El script se encarga de crear estos tres archivos que luego podran ser incluidos en los de un sistema Linux normal. El mismo ya se encuentra integrado en Ekeko. Se puede ver su funcionamiento en el Manual de Usuario de Sistema de Autenticación LDAP. Manual de Usuario "Sistema de Registro Civil U.N.Sa." (Ekeko) Principal (invitado) Esta es la pantalla principal de Ekeko en donde comenzaremos a trabajar. Para ingresar abrimos un navegador (en el ejemplo Mozilla) y en la barra de direcciones ponemos la dirección: localhost/cgi-bin/ekeko/SIS/bin/principal_wl.pl. Por defecto entramos como usuario "Invitado", es por eso que solo observamos la opcion de "Buscar" en el Menu Principal, para ver otras opciones deberemos estar logueado como algun usuario real del sistema o como usuario "super" que es el usuario que tiene los mayores privilegios en Ekeko. Cabe destacar que nos dedicaremos a tratar con mayor empeño las pantallas diseñadas para el super usuario, ya que son las que permiten en la mayoria de los casos mas opciones y permisos para edicion de datos pero tambien explicaremos que pasara en los casos de los distintos tipos de usuarios. En la seccion de "Links de Interes" encontraremos varios links a paginas referentes a la universidad. En la parte superior del formulario podemos encontrar una barra, esta la vamos a visualizar en todos los formularios, ya que es un componente propio de Ekeko; en esta podemos encontrar un link a la ayuda de Ekeko, dos checkbox: "¿otro usuario?" para cambiar de usuario y "misma ventana" para indicar que queremos trabajar siempre sobre la misma ventana del navegador. Para activar estas opciones deberemos presionar el boton "Procese" ubicado en la misma barra, que sirve para procesar la mayoria de las acciones que efectuamos sobre un formulario de Ekeko. Tambien encontramos un combo para seleccionar el idioma en que queremos que se visualice el formulario (por ahora solo en español). Por debajo del titulo principal del formulario tenemos una barra de navegacion interna, esta nos servirá para navegar internamente en los formularios independientemente de las opciones de retroceder o avanzar del navegador. Login Vamos a empezar a ver las distintas opciones, como dijimos anteriormente lo haremos como usuario "super" por lo tanto deberemos loguearnos como tal. Para esto tildamos la opcion "¿Otro usuario?" en la barra principal de Ekeko y procesamos, esto nos muestra el formulario de Login de Ekeko. En este formulario para loguearnos solo ingresamos nuestro nombre de usuario en "NICK" y la clave en el campo correspondiente; en nuestro caso ponemos super y como clave ponemos usuario, esta es la clave por defecto del super usuario de Ekeko, luego puede cambiarse para mayor seguridad. A travez de este formulario también podemos crearnos una cuenta de usuario, esto se logra ingresando el NICK, la clave y repitiendola en el campo correspondiente. También servirá para asociarle un usuario a una persona ingresando en la parte inferior un tipo y numero correspondiente, pero nos va a pedir la contraseña del usuario "super". Principal (super) Este es el mismo formulario principal que vimos anteriormente, pero ahora podemos ver más opciones en el Menu Principal estas son con las que se puede acceder a las opciones permitidas para el usuario "super", en este manual solo atenderemos las porciones del sistema referidas al "Registro Civil" y "Sistema de Autenticacion LDAP" ya que son las que nos competen, los demás sistemas todavia se encuentran en desarrollo, aunque explicaremos algunas pantallas fuera de estos sistemas, necesarias para algunas cosas que tienen que ver exclusivamente con ekeko o que son de utilidad para el trabajo en cualquier sistema diseñado en Ekeko. De hecho ya hemos visto una de ellas; la de Login. Desde ahora nos referiremos a la pantalla como formulario que en realidad es la combinacion de un "weblet" un "template" y el uso de modulos y componentes de Ekeko. A travez del menú principal podremos ingresar al Sistema de Registro Civil o al Sistema de Autenticación LDAP (ademas de otras opciones). Buscar Este es el buscador global de Ekeko. En la barra abajo de la barra de navegación interna podemos ingresar en el primer campo que es lo que queremos buscar y en el combo seleccionamos que cosa queremos buscar; se puede buscar todo tipo de cosas, personas, organizaciones, facultades, etc, incluso hacer busquedas globales. A nosotros nos servirá en este caso mayormente para localizar personas. En el caso de la busqueda de una persona, nos muestra el nombre los usuarios asociados a la misma y los documentos. Sistema de Registro Civil En la pantalla principal del Sistema de Registro Civil podemos encontrar cuatro partes principales: 1.El menú principal de opciones, desde el que podremos ingresar a los formularios del Registro Civil. 2.El buscador del formulario, donde ingresando tipo y numero de documento podremos ver a aquellas personas relacionadas al mismo. En el caso de no conocer el tipo y numero de documento de una persona podemos ingresar al buscador global de Ekeko accediendo a travez del link que se indica abajo. 3.Bajo el buscador de personas del formulario apareceran, si existen, los nombres de las personas relacionadas al documento ingresado; se mostraran como links que nos permitiran ingresar al formulario correspondiente a la edicion de datos de la persona, se usa procese para buscar. 4.El la parte inferior derecha, tambien podemos encontrar un buscador de usuarios; al igual que el buscador de personas nos mostrará si existe el usuario ingresado un link al formulario de edicion de datos del usuario. Ingresar Persona Si bien estamos hablando del sistema de registro civil y nos estamos refiriendo a personas en general, en realidad nos referimos a "identidades" porque estas pueden ser (por defecto en Ekeko) "fisicas" que serian las personas, "juridicas" o "virtuales"; mas adelante veremos un poco mas de esto, pero por lo general nos referiremos a personas. Aquí podrá ingresarse una nueva persona solo se piden datos escenciales, es necesario ingresar algun tipo de documento que identifique a la persona y si se desea el numero de Libreta Universitaria o Legajo, luego los demas datos correspondientes a la misma podran completarse en el formulario de edicion de datos personales. En el caso de estar logueado como un usuario que no sea el "super" solo nos permitirá ingresar una persona si el mismo no esta relacionado con ninguna otra, si en contrario el usuario logueado ya pertenece a una persona, nos avisará que no podemos ingresar personas debido a esto. Una vez ingresada la persona nos aparece un link que nos llevará al formulario de Login donde podemos crear un usuario relacionado a esta. Relacionar Identidad con Alias Aquí es donde relacionamos una persona (o identidad) a un alias (un usuario de Ekeko) para esto deberemos ingresar el tipo y número valido de un documento perteneciente a una persona y un alias tambien valido, para poder concretar la relación el alias ingresado no debe estar relacionado a ninguna identidad y la identidad debe existir. Tipos de Identidad En este formulario podemos insertar, modificar y eliminar Tipos de Identidades, una identidad es un grupo de datos que identifican a alguien, ese alguien puede ser una persona (identidades fisicas) un ente virtual, un departamento de trabajo, etc. Por lo general aquí vamos a hablar de personas ya que son lo que mas tratamos pero todo es aplicable a cualquier tipo de identidad. En el campo que dice "Insertar / Eliminar" podemos indicar ambas cosas; en el caso de un tipo de identidad que ya esa ingresado, la casilla de verificacion sirve para eliminar, exepto en el caso en que dice "NO" como podemos ver en la figura, esto se debe a que no podemos eliminar ese tipo de identidad porque violariamos la integridad referencial de la base de datos ya que hay en ese caso personas asociadas a ese tipo de identidad. En el caso de la casilla de verificación que se encuentra en la fila de color mas oscuro, sirve para insertar un nuevo tipo de identidad. Los cambios en la base se producen al procesar como dijimos mas arriba, con el boton "procese" Tipos de Documento El formulario presenta el mismo formato del formulario de tipos de identidad, y aquí tambien pueden editarse, añadirse o eliminarse los Tipos de Documentos que una persona o identidad puede tener asociados. Edicion de Datos Personales Estos son los datos referentes a una persona. En la parte inferior podemos observar los usuarios asociados a la persona en cuestión (una persona podria tener mas de un usuario), estos se ven como links con los cuales podremos acceder al formulario de edición de datos del usuario. En la parte derecha encontramos los accesos a los formularios que presentan los documentos y ubicaciones asociados a esta persona. Cabe recordar que para acceder a este formulario lo hemos hecho desde el formulario principal de registro civil, en donde al indicar el numero y tipo de documento de la persona de la cual queremos ver o editar sus datos, este nos muestra en forma de links las personas a las cuales se relaciona este documento. Edicion Insercion y Eliminacion de Documentos En la parte superior podemos editar o eliminar documentos en la parte inferior vemos los datos de L.U. y Legajo (aunque estos se encuentran en otra base de datos de Ekeko). Para asignar un nuevo tipo y numero de documento a la persona lo haremos en la seccion de la izquierda. Ubicaciones En este formulario se pueden visualizar los datos de las ubicaciones relacionadas a la persona cada una en un rectangulo azul y celeste independiente. Datos de Alias Estos son los datos pertenecientes a un usuario; destacamos nuevamente que son datos diferentes a los de una persona. Abajo tambien pueden verse los grupos a los que el usuario pertenece pero solo se pueden visualizar, para modificar esto lo haremos desde el "Sistema de Autenticacion LDAP" como veremos mas adelante. En la parte izquierda estan los accesos con los que podremos ver los datos referentes al login LDAP del usuario o cambiar la clave de acceso del mismo. Datos de Login LDAP Aquí se muestran los datos del usuario necesarios para LDAP. El boton en la parte inferior del formulario nos muestra la opcion "Desabilitar Login LDAP" en el caso de que el login esté habilitado o "Habilitar Login LDAP" en caso contrario. Para poder habilitar un usuario será necesario ingresar de manera correcta todos los datos. Recordemos que hemos ingresado a este formulario a travez del link ubicado en el formulario de Edición de datos de Usuario. Cambiar Clave A travez de este formulario podremos cambiar la clave del usuario en cuestion, solo se nos pide ingresar la clave actual y dos veces la nueva. En este caso hay que tener en cuenta una consideración; cuando se intenta ingresar a este formulario solo puede cambiar la contraseña el usuario mismo por lo que si estamos logueados como "super", antes de esto entraremos al formulario de Login para loguearnos como el usuario al que queremos cambiar la clave. Esto no se da cuando ingresamos a este formulario estando logueados como el mismo usuario al que queremos cambiar la clave, mas adelante veremos como un usuario (no el "super") puede llegar hasta este punto. Principal (usuario real de sistema) En este caso vemos el formulario Principal igual que los anteriormente vistos para un usuario invitado o el super, pero en este caso nos hemos logueado como usuario "pablo" que es un usuario que se encuentra en la base de datos de Ekeko. Podemos ver el acceso a "Informacion Personal" donde el usuario podrá visualizar sus datos personales. A travez de este ingresaremos directamente al formulario que vimos para el super de "Edicion de Datos Personales" y por medio de este a todos los demas que observamos (donde se muestran datos del usuario relacionado a la persona o de la persona en si) solo que al no estar logueado como super solo podremos visualizar los datos sin poder realizar modificaciones o eliminacion. El unico cambio que podemos realizar es el de la clave de ingreso. En este caso tambien nos encontramos con la complicacion del usuario logueado; por ejemplo si la persona tiene mas de un usuario asignado, en el formulario de los datos personales podremos observar los links a los datos de esos usuarios si accedemos a los datos del usuario con el que estamos logueados y luego a "cambiar clave" entonces veremos directamente el formulario para realizar esta tarea, en cambio si accedemos a los datos de otro usuario (que pertenece a la misma persona) y luego a "cambiar clave" deberemos primero pasar por el login. Manual de Usuario "Sistema de Autenticacion LDAP" (Ekeko) Accedemos al "Sistema de Autenticación LDAP" desde el Menu Principal del formulario Principal y logueado como usuario super, ya que esta opcion esta habilitada solo para este usuario. De esta forma ingresamos al siguiente formulario. Sistema de Autenticacion LDAP (menu principal) Este es el Menu Principal del Sistema de Autenticacion LDAP y desde este podemos acceder a los distintos formularios que veremos a continuacion. Sevidor LDAP En este y la mayoria de los formularios para este sistema se trabaja con el archivo de configuracion de LDAP, el slapd.conf, el cual si hemos seguido la instalación por defecto de todo este esquema debería encontrarse en /usr/local/etc/openldap/slapd.conf, de todas maneras esto se trata con mayor detalle en el MPI. En el formulario encontraremos tres partes principales: 1.Indicacion de donde se encuentra el archivo de configuracion de LDAP, esto se encuentra en la base de datos y no convendría mucho cabiarlo de lugar. Si lo cambiamos y el sistema no encuentra el archivo nos avisara del error. 2.Base LDAP y DN de administrador: Estos campos estan en el archivo ya mencionado y ya explicamos en la sección LDAP que significa cada uno de ellos. 3.Cambio de clave: aquí podremos cambiar la clave del administrador LDAP que no es la clave de ningun usuario de Ekeko y tampoco se encuentra guardada en la base de datos, esta se encuentra encriptada en el mismo archivo de configuracion. Para este formulario como para casi todos los que tienen que ver con la configuracion de LDAP se solicita la clave del administrador LDAP que como ya dijimos es independiente de cualquier usuario de Ekeko, incluso el super. Servidores de Replicación LDAP En esta sección visualizamos los servidores de replicacion para LDAP. Para cada servidor podemos ver ademas de sus datos, una "Opcion Ver/Eliminar" (individual para c/servidor), en este caso dice "Solo ver" indicando que solo podemos visualizar; al realizar la autenticacion como administrador de LDAP en el sector correspondiente, se mostrará "Eliminar". Añadir Replica Aquí podemos insertar un nuevo servidor de replicacion, debemos tener en cuenta que los datos que se piden son los del servidor de replicacion y todos son necesarios. Para la validacion la clave deberá ser como anteriormente, la del administrador LDAP local. Grupos LDAP Este tipo de formulario ya lo hemos visto en el sistema de Registro Civil; la idea es la misma. Tenemos el numero de grupo, el nombre del grupo y las casillas de verificacion para eliminar o insertar un nuevo grupo (en el caso de la fila de color mas oscuro y vacia; la ultima), en otro caso dirá "NO" en vez de una casilla para indicar que no se puede eliminar por violacion de integridad referencial en la base de datos (osea hay usuarios pertenecientes a ese grupo). Estos datos si son guardados en la base de datos de Ekeko, y se refieren a los grupos de usuarios. En la seccion de opciones podemos ingresar un nombre de grupo para ver que usuarios estan relacionados al mismo. Al hacer esto veremos una pantalla como la siguiente. Aquí vemos los usuarios pertenecientes al grupo "pablo", podemos ingresar un nuevo nombre de grupo para ver sus usuarios. Relacionar Grupos y Usuarios Este formulario esta dedicado a indicar que usuarios van a pertenecer a un grupo de usuarios, su uso es sencillo; indicamos el grupo y el alias del usuario que queremos relacionar a talgrupo, luego al procesar se realizan las comprobaciones pertinentes y si existe el grupo mencionado y el usuario entonces se muestra un mensaje y en el sector de opciones se mostrara un acceso que indica "Relacionar" que al ser presionado realiza la relacion entre el grupo y el alias, esto en el caso que el usuario no pertenezca al grupo; en el caso que el usuario ya pertenezca al grupo se mostrará un cartel indicador de dicha situación y el acceso en este caso mostrará "Eliminar Relación" con lo que podremos eliminar a usuarios de un grupo. Exportar Sistema Ekeko-LDAP a Sistema /etc En este formulario solo debemos ingresar el directorio del sistema en donde queremos que se creen los archivos de la migracion, asi al procesar el formulario el sistema creará los archivos passwd, shadow y group con los datos de usuarios, y grupos de la base de datos de Ekeko. Conclusiones En primer lugar queremos mencionar que elegimos este tema de seminario porque cuando nos lo propusieron nos atrajo mucho la idea de que podia llegar a ser implementado en nuestra universidad, esto nos motivo mucho y nos dio entusiasmo, porque no trabajariamos solo por un tema de seminario que talvez quedaria en un cajon y seria solo para aprobar la materia sino que seria util para alguien. Ademas de esto el tema en si tambien nos intereso mucho ya que tenia que ver con redes especialmente que es lo que mas nos atrae. El fuerte de nuestro seminario fue el trabajo con LDAP y la verdad que hemos quedado sorprendidos frente a la potencia de estas herramientas ya que pudimos implementarlas en la misma universidad (en nuestro caso en Rectorado), ahora pensamos que en una intranet no deberia faltar LDAP, brinda muchas comodidades tanto para los usuarios como para los administradores, esto combinado con SAMBA y openWebMail crea un entorno de trabajo que brinda muchas satisfacciones. Por supuesto documentación acerca de LDAP hay un montón, sobretodo en internet, pero si buscaran como hacer funcionar LDAP con Postgres no encontrarian mas de 10 hojas, en ingles y de las cuales no se entiende ni la mitad, por lo menos eso fue lo unico que conseguimos despues de horas y dias de navegación, asi que nos alegra mucho el contribuir con nuestro Manual de Protocolos de Instalación y este informe. En cuanto a Ekeko sabemos que se modificarán y pulirán cosas a la brevedad pero nos parece que es un sistema muy imponente sobre todo por la idea que representa, nos pareció muy bueno y tambien nos llena de orgullo participar en el desarrollo de este, porque creemos que se difundirá mucho, porque es un desarrollo del software libre y porque sabemos que tendrá un futuro muy prospero y a corto plazo. Agradecimientos Queremos agradecer especialmente a nuestro director de seminario, el señor Diego Saravia, quien nos ha acompañado y guiado en todo el proceso de desarrollo y nos ha dado ademas de la idea, la oportunidad de participar en el desarrollo de Ekeko. También queremos agradecer por su ayuda a nuestros compañeros de trabajo y estudio Daniel Garcia Pérez, Lorena Garcia, Gabriela Burgos, quienes también se encuentran desarrollando sistemas en Ekeko por su ayuda y a Claudia Campagna y Daniel Planchon por someterse a las duras pruebas de instalación y prueba. Agracedemos también a la gente de Via Libre y Grulic por su ayuda en la resolución de algunos problemas de la configuración del ldap para postgres. Y a todos los que nos hay brindado su tiempo y apoyo a travez del correo electrónico u otros medios. Bibliografía Ayuda Sistema Ekeko. Http://www.ekeko.org. Proyecto CIUNSA. Sistema Mojotoro. Http://www.mojotoro.org Resolución Rectoral. Proyecto Software Libre UNSa. Http://softwarelibre.unsa.edu.ar OpenLDAP-PostgreSQL HOWTOO - Gilles Darold Revista "Solo Programadores Linux" Nº 19 Programación de Perl para Unix. LDAP Linux HOWTOO - Luiz Ernesto Pinheiro Malere Introducción a LDAP sobre Linux - Atif Ghaffar LDAP and OpenLDAP (on the Linux Plataform) - Adam Tauno Williams. Instalación y Configuración de OpenLDAP - Jesús Roncero Guia del Programador de PostgreSQL - Thomas Lockhart Introducción a la Programación en Bash - Gonzalo Rivero Perl, Apuntes de la UNSa - Loli Saravia Evangelio de Perl - cjara