29.3. Configuración de servidor con slapd.conf

Una vez que el sistema esté instalado existe un archivo de configuración completo para el servidor LDAP en /etc/openldap/slapd.conf. A continuación se explicarán brevemente cada una de las entradas y las modificaciones necesarias. Las entradas precedidas del signo # se encuentran inactivas. Para activar dichas entradas basta con borrar el signo de comentario.

29.3.1. Instrucciones globales en slapd.conf

Ejemplo 29.2. slapd.conf: instrucción Include para esquemas

include /etc/openldap/schema/core.schema 
include /etc/openldap/schema/inetorgperson.schema

Con esta primera instrucción en slapd.conf se define el esquema utilizado para organizar el directorio LDAP (ver Ejemplo 29.2, “slapd.conf: instrucción Include para esquemas”). La entrada core.schema se requiere obligatoriamente. Si necesita esquemas adicionales, introdúzcalos detrás de esta instrucción (como ejemplo se ha añadido aquí inetorgperson.schema). Puede encontrar otros esquemas disponibles en el directorio /etc/openldap/schema/. Si NIS va a ser sustituido por un servicio LDAP, integre aquí los esquemas cosine.schema y rfc2307bis.schema. Puede obtener información adicional sobre este tema en la documentación incluida en OpenLDAP.

Ejemplo 29.3. slapd.conf: pidfile y argsfile

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

Estos dos archivos contienen el número de identificación de proceso (PID o process id) y algunos argumentos con los que se iniciará el proceso slapd. En esta sección no es necesario realizar ningún cambio.

Ejemplo 29.4. slapd.conf: Controles de acceso

# Sample Access Control
#       Allow read access of root DSE
# Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
# access to dn="" by * read
  access to * by self write
              by users read
              by anonymous auth
#
# if no access controls are present, the default is:
#       Allow read by all
#
# rootdn can always write!

El Ejemplo 29.4, “slapd.conf: Controles de acceso” es el fragmento de slapd.conf que regula los controles de acceso al directorio LDAP en el servidor. Las opciones definidas en esta sección global de slapd.conf tienen validez mientras no se especifiquen otras reglas de acceso en la sección específica de las bases de datos que sobreescriban a estas. Conforme a las reglas aquí definidas, todos los usuarios tienen permiso de lectura para el directorio pero sólo el administrador (rootdn) puede escribir en el mismo. Debido a que la regulación de los permisos de acceso en LDAP es un tema muy complejo, incluimos a continuación unas reglas generales que le ayudarán a comprender este proceso:

  • La sintaxis de todas las reglas de acceso es la siguiente:

    access to <what> by <who> <access>
    
  • what representa al objeto o atributo para el que quiere definir el acceso. Puede proteger de forma explícita diversas ramas del directorio o bien cubrir zonas enteras del árbol de directorios por medio de expresiones regulares. slapd evalúa todas las reglas en el orden en el que aparecen en el archivo de configuración. Por lo tanto, anteponga siempre las reglas más restrictivas a las más generales. slapd analiza la primera regla aplicable que encuentra e ignora el resto.

  • who define quién tiene acceso a los sectores definidos en what. El uso de expresiones regulares le ahorrará aquí también mucho trabajo. Como en el caso anterior, slapd interrumpe el proceso de análisis de who al encontrar la primera regla aplicable. Por lo tanto, las reglas específicas han de anteponerse de nuevo a las más generales. Pueden utilizarse las siguientes entradas (ver Tabla 29.2, “Grupos de usuarios con acceso autorizado”):

    Tabla 29.2. Grupos de usuarios con acceso autorizado

    Identificador

    Significado

    *

    todos los usuarios sin excepción

    anonymous

    usuarios no autenticados (“anónimos”)

    users

    usuarios autenticados

    self

    usuarios unidos al objeto destino

    dn.regex=<regex>

    todos los usuarios a los que puede aplicarse esta expresión regular

  • access especifica el tipo de acceso. Aquí se distingue entre las posibilidades que aparecen en la Tabla 29.3, “Tipos de acceso”:

    Tabla 29.3. Tipos de acceso

    Identificador

    Significado

    none

    acceso prohibido

    auth

    para contactar con el servidor

    compare

    para accesos comparables a objetos

    search

    para utilizar filtros de búsqueda

    read

    permiso de lectura

    write

    permiso de escritura

    slapd compara los permisos solicitados por el cliente con los que han sido concedidos en slapd.conf. Si allí están autorizados derechos iguales o más amplios que los que solicita el cliente, este obtiene autorización. Si por el contrario el cliente solicita más permisos que los concedidos en las reglas, el acceso será denegado.

El Ejemplo 29.5, “slapd.conf: Ejemplo de control de acceso” contiene un ejemplo muy de un sencillo control de acceso que puede configurarse de la forma deseada utilizando expresiones regulares.

Ejemplo 29.5. slapd.conf: Ejemplo de control de acceso

access to  dn.regex="ou=([^,]+),dc=suse,dc=de" 
   by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" write 
   by user read 
   by * none

Según esta regla, sólo el administrador tiene permiso de escritura para todas las entradas ou, los usuarios autenticados disponen de permiso de lectura, y al resto se le ha denegado el acceso.

[Tip]Definición de reglas Access

Si no es posible aplicar ninguna regla access to o instrucción by, el permiso será denegado. Sólo se conceden aquellos permisos autorizados explícitamente. En caso de no existir ninguna regla, se aplica el siguiente principio: permiso de escritura para el administrador y permiso de lectura para todos los demás.

La documentación en línea del paquete instalado openldap2 incluye información más detallada y una configuración de muestra de los permisos de acceso para LDAP.

Además de la administración de los permisos de acceso a través del archivo de configuración central (slapd.conf), existe también la posibilidad de utilizar informaciones de control de acceso o ACIs (Access Control Information). Las ACIs permiten almacenar la información de acceso a cada objeto en el mismo árbol LDAP. Debido a que este tipo de control de acceso está todavía muy poco extendido y su estado ha sido calificado por los desarrolladores como experimental, referimos aquí a la documentación del proyecto OpenLDAP en Internet: http://www.openldap.org/faq/data/cache/758.html.

29.3.2. Instrucciones para bases de datos en slapd.conf

Ejemplo 29.6. slapd.conf: Instrucciones para bases de datos

database            ldbm 
suffix              "dc=suse,dc=de" 
rootdn              "cn=admin,dc=suse,dc=de" 
# Cleartext passwords, especially for the rootdn, should 
# be avoided. See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged. 
rootpw secret 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap 
# Indices to maintain 
index objectClass eq

En la primera línea de esta sección (ver Ejemplo 29.6, “slapd.conf: Instrucciones para bases de datos”) se define el tipo de base de datos, LDBM en este caso. La entrada suffix de la segunda línea especifica la parte del árbol de directorios LDAP de la que se va a ocupar este servidor. En la línea inferior, rootdn determina quién dispone de derechos de administración para este servidor. No es necesario que el usuario indicado en esta sección posea una entrada LDAP o que exista siquiera como usuario “normal”. La contraseña de administrador se define con la instrucción rootpw. Aquí puede sustituir secret por el resumen criptográfico generado con slappasswd. La instrucción directory indica el directorio en el que están almacenados los directorios de la base de datos en el servidor. La última instrucción, index objectClass eq, hace que se cree un índice con las clases de objetos. Si lo desea, puede introducir otros atributos que en su caso particular se busquen con más frecuencia. Cuando se definen reglas Access propias para la base de datos y se colocan detrás, se aplicarán estas en lugar de las reglas Access globales.

29.3.3. Iniciar y parar el servidor

Una vez que el servidor LDAP ha sido configurado y en el directorio LDAP se han llevado a cabo todas las entradas deseadas según el modelo descrito abajo (ver la Sección 29.4, “Administración de datos en el directorio LDAP”), puede iniciar el servidor LDAP como usuario root introduciendo el comando rcldap start. Para detener el servidor de forma manual ha de introducir el comando rcldap stop y para consultar el estado del servidor, rcldap status.

También es posible configurar el servidor para que se inicie y detenga automáticamente al encender y apagar al ordenador. Para ello puede utilizar el editor de niveles de ejecución de YaST (véase la Sección 7.6, “Servicios del sistema (niveles de ejecución)”) o bien crear directamente los enlaces correspondientes en los scripts de inicio y final por medio de insserv en la línea de comandos (ver Sección 7.5.1, “Añadir scripts init”).


SUSE LINUX Manual de administración 9.3