4. Servidor ldapd

LDAP (Lightweight Directory Access Protocol) es un protocolo para mantener e intercambiar información almacenada en directorios (i.e bases de datos especiales), su versión 3 se define en los RFC 2251, 2256, 2829, 2830 y 3377.

Un uso típico de LDAP es mantener en un servidor información de los usuarios de una organización para permitir su autenticación en otros servicios (e.g nombres, apellidos, dirección, teléfono, login, clave).

OpenBSD incluye (desde OpenBSD 4.8) un servidor para LDAP versión 3, ldapd. No incluye cliente para LDAP pero desde la línea de comandos puede emplearse el paquete openldap-client o como interfaz web phpldapadmin[30].

4.1. Instalación de ldapd

No necesita instalar paquetes para la operación como servidor.

La configuración que se presenta emplea LDAPS para conexiones en la red local, empleando un certificados cuyas llaves pública y privada debe copiarse a /etc/ldap/certs y ejecutar:

    cd /etc/ldap/certs
    chown _ldapd:_ldapd *
    chmod 0640 /etc/ldap/certs/*key
    chmod 0644 /etc/ldap/certs/*crt 

Para configurar el servidor, verifique que exista el usuario _ldapd y el grupo _ldapd y edite /etc/ldapd.conf:

schema "/etc/ldap/core.schema"                                                  
schema "/etc/ldap/inetorgperson.schema"                                         
schema "/etc/ldap/nis.schema"                                                   
 
lan_if = "re1"

listen on $lan_if ldaps certificate www.pasosdeJesus.org
listen on lo0 secure
listen on "/var/run/ldapi"

namespace "dc=www,dc=pasosdeJesus,dc=org" {
        rootdn          "cn=root,dc=www,dc=pasosdeJesus,dc=org"
        rootpw          "secret"
        index           sn
        index           givenName
        index           cn
        index           mail
        index           objectClass
        index           sn
        fsync           on
}                                                                               

Recuerde que la clave del directorio debe ser mejor que la presentada (i.e remplace secret por una buena clave). En lugar de poner la clave plana también es posible poner la cadena generada con:

    # slappasswd -v -u -h {CRYPT} -s secret

que en el caso de la clave 'secret' es '{CRYPT}uPUCy906TIu/k'

La configuración por defecto emplea /var/db/ldap como directorio para mantener las bases de datos y mantiene una por cada espacio de nombres (namespace). Las conexiones no cifradas por defecto operan en el puerto 389 y deben autenticarse con SASL (a menos que tengan la opción secure para permitir autenticación plana) y las que empleen certificado iran cifradas en el puerto 636.

Cada vez que modifique el archivo de configuración del servidor, puede verificarlo con:

    $ sudo ldapd -n

Para iniciar el servidor LDAP en modo de depuración para ver posibles errores:

    $ sudo ldadpd -dv

Tras verificar el funcionamiento, para que en cada arranque se inicie el servidor puede agregar a /etc/rc.conf.local:

    ldapd_flags=""
    pkg_scripts = "ldapd"

E iniciar el servicio con /etc/rc.d/ldapd start y detenerlo con /etc/rc.d/ldadp stop

Es muy recomendable que agregue el esquema LDAP de Courier, de esta forma tomada de {3}:

  • Descarguelo y renombrelo:

    sudo ftp -o /etc/ldap/courier.schema \
    http://courier.cvs.sourceforge.net/viewvc/courier/libs/authlib/authldap.schema
    

  • Edite /etc/ldap/courier.schema y quite comentario a las líneas:

    attributetype ( 1.3.6.1.4.1.10018.1.1.14 NAME 'mailhost'                        
            DESC 'Host to which incoming POP/IMAP connections should be proxied'
            EQUALITY caseIgnoreIA5Match                                        
            SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )  
    

  • Reinicie ldapd

4.2. Pruebas Iniciales con openldap-client

Instale el paquete con:

    # pkg_add openldap-client

Verifique localmente que el servidor no cifrado corre con:

     ldapsearch -x -b 'dc=www,dc=pasosdeJesus,dc=org' '(objectclass=*)'

Respecto al servidor cifrado puede analizar la conexión SSL con:

     openssl s_client -connect 192.168.2.1:465

Puede verificar sus certificados contra la entidad que los expide siguiendo instrucciones de {4}.

Puede deshabilitar la verificación de certificados de ldapsearch poniendo en /etc/openldap/ldap.conf:

    TLS_REQCERT never

Para hacer pruebas desde otro computador, tenga en cuenta que en OpenBSD ldapsearch utiliza openssl mientras que por ejemplo en Ubuntu emplea GNUTLS, por esto eventualmente puede requerir descargar certificado de autoridad certificadora (digamos gd.pem) y ejecutar:

    sudo cat /etc/ssl/certs/gd.pem >> /etc/ssl/certs/ca-certificates.crt

Además de modificar /etc/ldap/ldap.conf para agregar

    TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

4.3. Adición de datos iniciales

Una vez esté corriendo ldapd deberá iniciar un directorio para su organización y los usuarios que se autenticarán. Puede agregar estos datos con el programa ldapadd que hace parte de openldap-client. Programa que recibe datos en formato ldif, por ejemplo leidos de un archivo. Un primer archivo con datos de la organización puede ser org.ldif y contener:

dn:     dc=www,dc=pasosdeJesus,dc=org
objectClass:    dcObject
objectClass:    organization
o:      Pasos de Jesús
dc:     correo

dn: cn=admin,dc=correo,dc=pasosdeJesus,dc=org
objectClass: organizationalRole
cn: admin

dn:ou=gente, dc=correo,dc=pasosdeJesus,dc=org
objectClass:    top
objectClass:    organizationalUnit
ou:     gente

dn:ou=grupos,dc=correo,dc=pasosdeJesus,dc=org
objectClass:    top
objectClass:    organizationalUnit
ou:     grupos

dn:ou=sendmail,dc=www,dc=pasosdeJesus,dc=org
ou: sendmail
objectClass: top
objectClass: organizationalUnit
userPassword: sendmail

Nota: Al agregar información verifique no dejar espacios en blanco al final de cada línea. Se pueden agregar org.ldif con:

ldapadd -x -D "cn=admin,dc=www,dc=pasosdeJesus,dc=org" -W \
  -h www.pasosdeJesus.org -f org.ldif

Además de poder revisar los mensajes que slapd genere al ejecutarse en modo de depuración, podrá consultar los datos ingresados al directorio con:

ldapsearch -x -b 'dc=www,dc=pasosdeJesus,dc=org' '(objectclass=*)'

4.4. Instalación y configuración de phpldapadmin

Instale el paquete y siga las instrucciones que de (por ejemplo activar php-ldap):

# pkg_add phpldapadmin

También debe asegurar que pueden emplearse los dispositivos de generación de números aleatorios en la jaula chroot de Apache (esto lo hace por defecto el instalador de adJ 5.5). Para esto verifique que en /etc/fstab al montar la partición /var este permitiendo dispositivos (que no este la opción nodev) y ejecute:

cd /var/www
sudo mkdir -p dev
cd dev
/dev/MAKEDEV arandom

4.5. Referencias y lecturas recomendadas



[30] Si emplea un adJ 5.2 y planea conectarse desde clientes digamos en Ubuntu reciente requerirá el parche descrito en http://openbsd.7691.n7.nabble.com/ldapd-and-quot-The-Diffie-Hellman-prime-sent-by-the-server-is-not-acceptable-quot-td59635.html