En este punto, ya se debería tener un servidor OpenLDAP instalado y ejecutándose, aunque no esté ajustado todavía a los objetivos que persigue este apartado. Para comprobar que efectivamente el demonio slapd se está ejecutando, realizaremos un par de consultas al sistema. La primera consiste en ver si el demonio slapd se encuentra en la lista de procesos que actualmente se estén ejecutando en el sistema:
Ejemplo 2.3. Comprobación de que slapd está en la lista de procesos actuales
# /bin/ps auxf | /bin/grep slapd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 4453 0.0 0.5 12144 3004 ? S 12:52 0:00 /usr/sbin/slapd root 4455 0.0 0.5 12144 3004 ? S 12:52 0:00 \_ /usr/sbin/slapd root 4456 0.0 0.5 12144 3004 ? S 12:52 0:00 \_ /usr/sbin/slapd |
Nota | |
---|---|
En la captura de pantalla anterior se ha eliminado la línea que hacía referencia la instrucción tecleada (/bin/ps auxf | /bin/grep slapd) y se ha añadido la línea de información sobre cada parte de la captura, para mejorar la legibilidad. |
La segunda comprobación ha realizar, para ver si el demonio se está realmente ejecutando, es verificar que está escuchando en la red[7]:
Una vez comprobado que el demonio slapd se está ejecutando en el sistema, se verificará que la conexión con el mismo está permitida. Para ello, se realizará una búsqueda sencilla en el directorio. Si todo va bien, se debería mostrar algo similar a:
Ejemplo 2.5. Realización de una búsqueda simple con ldapsearch
$ /usr/bin/ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts # extended LDIF # # LDAPv3 # base <> with scope base # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=gsr,dc=pt # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 |
Se han de tener en cuenta las opciones de configuración pasadas, antes de la compilación de OpenLDAP, para generar los paquetes que se están utilizando. Si nos fijamos en las opciones de configuración que posee OpenLDAP por defecto en Debian GNU/Linux (consulte el Apéndice O, Opciones de compilación de OpenLDAP en Debian GNU/Linux) veremos que utiliza la opción --enable-wrappers, lo que habilita el soporte de los TCP Wrappers en OpenLDAP.
Si se posee una configuración restrictiva de los TCP Wrappers, puede que sea esta la causa de los problemas de conexión. A continuación se simulará un fallo de conexión debido a un bloqueo de los TCP Wrappers, mostrándola manera de detectarlo y corregirlo.
Se supone la siguiente configuración de los TCP Wrappers (en los Apéndice AM, Archivo de configuración /etc/hosts.allow y Apéndice AN, Archivo de configuración /etc/hosts.deny se encuentran los archivos finales para los TCP Wrappers):
Ejemplo 2.6. Archivo /etc/hosts.allow
# /etc/hosts.allow: list of hosts that are allowed to access the system. # See the manual pages hosts_access(5), hosts_options(5) # and /usr/doc/netbase/portmapper.txt.gz # # Example: ALL: LOCAL @some_netgroup # ALL: .foobar.edu EXCEPT terminalserver.foobar.edu # # If you're going to protect the portmapper use the name "portmap" for the # daemon name. Remember that you can only use the keyword "ALL" and IP # addresses (NOT host or domain names) for the portmapper. See portmap(8) # and /usr/doc/portmap/portmapper.txt.gz for further information. # |
Ejemplo 2.7. Archivo /etc/hosts.deny
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system. # See the manual pages hosts_access(5), hosts_options(5) # and /usr/doc/netbase/portmapper.txt.gz # # Example: ALL: some.host.name, .some.domain # ALL EXCEPT in.fingerd: other.host.name, .other.domain # # If you're going to protect the portmapper use the name "portmap" for the # daemon name. Remember that you can only use the keyword "ALL" and IP # addresses (NOT host or domain names) for the portmapper. See portmap(8) # and /usr/doc/portmap/portmapper.txt.gz for further information. # # The PARANOID wildcard matches any host whose name does not match its # address. You may wish to enable this to ensure any programs that don't # validate looked up hostnames still leave understandable logs. In past # versions of Debian this has been the default. # ALL: PARANOID # Desautorizar a todos los hosts con nombre sospechoso ALL: PARANOID # Desautorizar a todos los hosts ALL:ALL |
Ahora se realizará la misma búsqueda que en Ejemplo 2.5, “Realización de una búsqueda simple con ldapsearch”:
Ejemplo 2.8. Realización de una búsqueda simple con ldapsearch (conexión fallida)
$ ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts ldap_bind: Can't contact LDAP server (81) |
Como se puede apreciar, no se ha podido conectar con el servidor LDAP. El siguiente ejemplo realizará la misma búsqueda, sólo que en este caso se activará el modo de depuración del comando ldapsearch “-d -1” (se hará uso del nivel de depurado -1, que es el mayor nivel existente).
Ejemplo 2.9. Realización de una búsqueda simple con ldapsearch (modo depuración)
Aquí se puede ver que el host con el que establece la conexión es el correcto. | |
Una vez encontrado el host, se conecta satisfactoriamente al mismo. | |
En este momento comienzan los errores de conexión. |
Como se puede observar en el Ejemplo 2.9, “Realización de una búsqueda simple con ldapsearch (modo depuración)”, que no se obtiene la información suficiente para deducir cual ha sido el problema que ocasiona el error en la conexión. Por este motivo se ejecutará el demonio slapd en modo depuración y, aunque no sea necesario, se ejecutará con el nivel de depurado “-1”.
Antes proceder con este ejemplo, se mostrarán los posibles valores que puede tomar el modo de depuración de slapd y su significado[8]:
Tabla 2.1. Niveles de depurado de slapd
Nivel | Descripción |
---|---|
-1 | Habilita todo el depurado |
0 | Sin depurado |
1 | Rastrea las llamadas a funciones |
2 | Depura el manejo de paquetes |
4 | Rastreo de depuración intensivo |
8 | Administración de la conexión |
16 | Muestra los paquetes enviados y recibidos |
32 | Procesado de búsqueda por filtro |
64 | Procesado del archivo de configuración |
128 | Procesado de la lista de control de acceso |
256 | stats log connections/operations/results |
512 | stats log entries sent |
1024 | Muestra las comunicaciones con los backends de la shell |
2048 | Muestra las entradas analizadas (parsing) |
Ejemplo 2.10. Ejecución del servidor slapd en modo de depuración
# /usr/sbin/slapd -d -1 -h ldap://gsr.pt:389/ @(#) $OpenLDAP: slapd 2.1.30 (May 24 2004 23:50:57) $ @pulsar:/home/torsten/packages/openldap/release-2.1.30-1/openldap2-2.1.30/debian/build/servers/slapd daemon_init: ldap://gsr.pt:389/ daemon_init: listen on ldap://gsr.pt:389/ daemon_init: 1 listeners to open... ldap_url_parse_ext(ldap://gsr.pt:389/) daemon: initialized ldap://gsr.pt:389/ daemon_init: 1 listeners opened slapd init: initiated server. slap_sasl_init: initialized! reading config file /etc/ldap/slapd.conf line 11 (include /etc/ldap/schema/core.schema) reading config file /etc/ldap/schema/core.schema/ (...) slapd startup: initiated. slapd starting daemon: added 6r daemon: select: listen=6 active_threads=0 tvp=NULL |
En este momento ya tenemos el demonio slapd en modo depuración, por lo que si realizamos de nuevo la búsqueda del Ejemplo 2.8, “Realización de una búsqueda simple con ldapsearch (conexión fallida)”, se verá la información que muestra el servidor cuando esta se realiza:
Ejemplo 2.11. Ejecución del servidor slapd en modo de depuración (mensaje de rechazo de una conexión)
daemon: activity on 1 descriptors daemon: new connection on 9 fd=9 DENIED from unknown (192.168.2.1) daemon: closing 9 daemon: activity on: daemon: select: listen=6 active_threads=0 tvp=NULL |
Esta línea muestra el motivo del rechazo de la conexión, no se permite la conexión desde la IP 192.168.2.1, que es desde la que se está tratando de realizar la consulta precisamente. |
Si se añade la siguiente línea al archivo /etc/hosts.allow “slapd: 192.168.2.1” y se ejecuta de nuevo la búsqueda del Ejemplo 2.8, “Realización de una búsqueda simple con ldapsearch (conexión fallida)”, sucede lo siguiente:
El servidor muestra la siguiente información:
Ejemplo 2.12. Ejecución del servidor slapd en modo de depuración (mensaje de aceptación de una conexión)
Del lado del cliente se obtiene la misma información que en el Ejemplo 2.5, “Realización de una búsqueda simple con ldapsearch”.
Un error derivado de la instalación por defecto, es el que se muestra en título de esta sección. Si no se especifica en que interfaces ha de escuchar el demonio slapd, dará el mentado error.
A continuación se verá la diferencia de ejecutar el servidor especificando o no la interfaz sobre la que tiene que escuchar. Para ello, una vez más se ejecutará en modo depuración.
Ejemplo 2.13. Ejecución del demonio slapd sin especificar la interfaz donde escuchar
Ejemplo 2.14. Ejecución del demonio slapd especificando la interfaz donde escuchar
# /usr/sbin/slapd -d -1 -h ldap://gsr.pt:389/ @(#) $OpenLDAP: slapd 2.1.30 (May 24 2004 23:50:57) $ @pulsar:/home/torsten/packages/openldap/release-2.1.30-1/\ openldap2-2.1.30/debian/build/servers/slapd daemon_init: ldap://gsr.pt:389/ daemon_init: listen on ldap://gsr.pt:389/ daemon_init: 1 listeners to open... ldap_url_parse_ext(ldap://gsr.pt:389/) daemon: initialized ldap://gsr.pt:389/ daemon_init: 1 listeners opened slapd init: initiated server. slap_sasl_init: initialized! reading config file /etc/ldap/slapd.conf line 11 (include /etc/ldap/schema/core.schema) reading config file /etc/ldap/schema/core.schema (...) slapd startup: initiated. slapd starting daemon: added 6r daemon: select: listen=6 active_threads=0 tvp=NULL |
En el Ejemplo 2.14, “Ejecución del demonio slapd especificando la interfaz donde escuchar” se puede ver que ya no muestra ningún tipo de error al inicializar el servidor.
Nota | |
---|---|
En el Capítulo 3, Retoques iniciales a la configuración por defecto de OpenLDAP se verá como configurar slapd para que arranque automáticamente con la especificación de la interfaces. |