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.
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 |
| usuarios no autenticados (“anónimos”) |
| usuarios autenticados |
| usuarios unidos al objeto destino |
| 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 |
|---|---|
| acceso prohibido |
| para contactar con el servidor |
| para accesos comparables a objetos |
| para utilizar filtros de búsqueda |
| permiso de lectura |
| 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.
![]() | Definición de reglas Access |
|---|---|
Si no es posible aplicar ninguna regla | |
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.
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.
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”).