Esta información está más actualizada en
https://pasosdejesus.github.io/servidor_adJ/otros_servicios_que_puede_prestar_el_servidor.html#ldapd
Describimos como configurar y usar un servidor LDAP en adJ OpenBSD 5.8p1,
empleando el servicio ldpad
y los clientes openldap-client
y phpldapadmin
.
1. INTRODUCCIÓN
LDAP (Lightweight Directory Access Protocol) es un protocolo para mantener
e intercambiar información almacenada en directorios (i.e bases de datos
especiales).
Un uso típico de LDAP es mantener en un servidor información de los usuarios
(e.g nombres, apellidos, dirección, teléfono, login, clave) de una organización
para permitir su autenticación en los computadores o en aplicaciones.
OpenBSD incluye (desde OpenBSD 4.8) un servidor para LDAP versión 2,
ldapd
. No incluye cliente para LDAP pero desde la línea de comandos
pueden emplearse las herramientas del paquete openldap-client
o como
interfaz web puede usarse phpldapadmin
.
2. INSTALACIÓN Y CONFIGURACIÓN DE ldapd
No necesita instalar paquetes para la operación como servidor.
La configuración que se presenta puede empelar SSL (puerto 636) o TLS para
conexiones en la red local y conexiones no cifradas desde el mismo computador
tanto por puerto TCP estándar (389) como por una conexión socket
(/var/run/ldapi
).
Las conexiones cifradas requieren certificado cuyas llave pública y privada
deben copiarse a /etc/ldap/certs
. Puede bien generar un certificado
autofirmado o bien instalar uno firmado por una autoridad certificadora.
Según documentación de OpenLDAP para aumentar facilidad de conexión desde
más clientes es mejor uno firmado por una autoridad (unido a certificado
intermedios y de la autoridad) y que el FQDN del certificado sea el CN del
directorio.
Por ejemplo si quiere usar el certificado que usa para el servidor web
(por ejemplo /etc/ssl/server.crt
y /etc/ssl/private/server.key
),
puede copiar las llaves con el nombre que usará para el servicio:
# cp /etc/ssl/private/server.key /etc/ldap/certs/www.pasosdeJesus.org.key
# cp /etc/ssl/server.crt /etc/ldap/certs/www.pasosdeJesus.org.crt
Como se explica en {3}, además ejecute:
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 $lan_if tls certificate www.pasosdeJesus.org
listen on lo0 secure
listen on "/var/run/ldapi"
namespace "dc=pasosdeJesus,dc=org" {
rootdn "cn=admin,dc=pasosdeJesus,dc=org"
rootpw "secreto"
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 secreto
por una buena clave).
En lugar de poner la clave plana también es posible poner la cadena generada
con:
# slappasswd -v -u -h {SHA} -s secreto
que en el caso de la clave 'secreto
' es
'{SHA}Ck+Lk/qtUEAH33jJrLb5PqbMjFM=
'
La configuración por defecto emplea /var/db/ldap
como directorio para
mantener las bases de datos y mantiene una por cada namespace
del
archivo de configuración.
Las conexiones no cifradas por defecto operan en el puerto 389, sólo desde
el mismo computador.
Desde la red pueden iniciarse conexiones no cifradas por el puerto 389 pero
para que ldapd permita autenticar primero deben volverse cifradas con TLS.
Pueden hacerse conexiones cifradas desde el comienzo con SSL que opera
en el puerto 636.
Se recomienda deshabilitar SSL y dejar sólo TLS. No se recomienda agregar
secure
a conexión alguna excepto a las del mismo servidor.
Cada vez que modifique el archivo de configuración del servidor puede
verificarlo con:
$ doas ldapd -n
Para iniciar el servidor LDkAP en modo de depuración y ver posibles errores:
$ doas ldapd -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 doas /etc/rc.d/ldapd start
y detenerlo con doas /etc/rc.d/ldadp stop
Si emplea un adJ 5.2 y planea conectarse desde clientes digamos en Ubuntu
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
Si planea autenticar correo es recomendable que emplee el esquema misc
de
OpenLDAP como se describe en {7}:
doas ftp -o "/etc/ldap/misc.schema" \
http://www.openldap.org/devel/cvsweb.cgi/~checkout~/servers/slapd/schema/misc.schema
y que en /etc/ldapd.conf
agregue la línea:
schema "/etc/ldap/courier.schema"
Si planea autenticar estaciones Ubuntu además del anterior es muy
recomendable que agregue el esquema LDAP de Courier, de la siguiente
forma descrita en {3}:
doas ftp -o /etc/ldap/courier.schema \
http://courier.cvs.sourceforge.net/viewvc/courier/libs/authlib/authldap.schema
Agregue en /etc/ldapd.conf
la línea:
schema "/etc/ldap/courier.schema"
Para que PHPldapadmin no reporte errores en esquemas, también se recomiendan:
doas ftp -o "/etc/ldap/mozillaOrgPerson.schema" \
http://downloads.sourceforge.net/project/jabook/Schemas/mozillaOrgPerson/mozillaOrgPerson.schema
doas ftp -o "/etc/ldap/cosine.schema" \
https://raw.githubusercontent.com/gcp/openldap/master/servers/slapd/schema/cosine.schema
doas ftp -o "/etc/ldap/samba3.schema" \
https://raw.githubusercontent.com/cajus/gosa-gui/master/contrib/openldap/samba3.schema
Agregando la respectiva línea con schema en /etc/ldapd.conf
. En el caso
de cosine.schema
tiene varias definciones repetidas respecto a otros así
que deben comentarse con el símbolo # al comienzo de cada línea. Determine las
definiciones repetidas con:
doas ldapd -n
Una vez instale todos los esquemas y verifique la sintaxis, rcuerde reinicar ldapd
(como debe hacer siempre que modifique la configuración).
3. PRUEBAS CON OpenLDAP-client
Instale el paquete con:
# pkg_add openldap-client
Puede descargar unos archivos de órdenes que le facilitarán interactuar con
openldap-client
con:
mdkir -p ~/servidor
cd ~/servidor
git clone https://github.com/vtamara/servidor_ldap.git
cp servidor_ldap/DN.sh.plantilla servidor_ldap/DN.sh
Y editar y adaptar para su caso servidor_ldap/DN.sh
3.1 SIN CIFRAR EN 127.0.0.1
Verifique localmente que el servidor no cifrado corre con:
ldapsearch -x -b 'dc=pasosdeJesus,dc=org' '(objectclass=*)'
3.2 CIFRANDO
Primero puede analizar y verificar la conexión SSL del puerto 636 con:
openssl s_client -connect 192.168.2.1:636
Si está usando un certificado firmado por su propia autoridad certificadora
y obtiene un error como
verify error:num=21:unable to verify the first certificate
asegurese de:
1. Que el certificado de su autoridad certificadora no haya expirado
2. Agregar el certificado de su autoridad certificadora al archivo
/etc/ssl/certs.pem
Puede verificar sus certificados contra la entidad que los expide siguiendo
instrucciones de {4}.
ldapsearch
por defecto requiere que el certificado de la entidad
certificadora esté disponible en el disco y configurado. Si prefiere
evitar chequeo de certificados agregue a /etc/openldap/ldap.conf
:
TLS_REQCERT never
Por otra parte si prefiere que ldapsearch
haga verificaciones
completas de certificados:
Descargue certificado de su entidad certificadora y agreguelo por ejemplo
a /etc/ssl/certs/ca-certificates.crt
y agregue a /etc/ldap/ldap.conf
la línea:
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
Con esto, al ejecutar:
ldapsearch -H ldaps://www.pasosdeJesus.org -x -b "dc=pasosdeJesus,dc=org" '(objectclass=*)'
debería obtener
# extended LDIF
#
# LDAPv3
# base <dc=pasosdeJesus,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
Para hacer pruebas desde otro computador, tenga en cuenta que en
OpenBSD ldapsearch
utiliza openssl mientras que por ejemplo en
Ubuntu emplea GNUTls, por lo que con adJ 5.2 requiere el parche mencionado en
la sección anterior.
4. ADICIÓN DE DATOS INICIALES
Una vez tenga éxito sus pruebas con ldapsearch
deberá iniciar un
directorio para su organización y los usuarios que se autenticarán.
Puede agregar estos datos con el programa ldapadd
que también hace
parte del paquete openldap-client
. Programa que recibe datos en formato
LDIF, por ejemplo leídos de un archivo. Un primer archivo con datos de la
organización puede ser org.ldif
y contener:
dn: dc=pasosdeJesus,dc=org
dc: pasosdeJesus
objectClass: dcObject
objectClass: organization
o: Pasos de Jesús
dn: cn=admin,dc=pasosdeJesus,dc=org
cn: admin
objectClass: organizationalRole
dn: ou=gente,dc=pasosdeJesus,dc=org
ou: gente
objectClass: top
objectClass: organizationalUnit
dn: ou=grupos,dc=pasosdeJesus,dc=org
ou: grupos
objectClass: top
objectClass: organizationalUnit
dn: ou=sendmail,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=pasosdeJesus,dc=org" -W \
-H !ldaps://www.pasosdeJesus.org -f org.ldif
Además de poder revisar los mensajes que ldapd
genere al ejecutarse en
modo de depuración, podrá consultar los datos ingresados al directorio con:
ldapsearch -H ldaps://www.pasosdeJesus.org -x -b 'dc=pasosdeJesus,dc=org' '(objectclass=*)'
5. USO CON phpldapadmin
5.1 INSTALACIÓN Y CONFIGURACIÓN DE phpldapadmin
La distribución oficial de phpldapadmin no soporta php-5.5 ni TLS, por lo que
se recomienda emplear https://github.com/leenooks/phpLDAPadmin
# mkdir -p ~/servidor/
# cd ~/servidor/
# git clone https://github.com/leenooks/phpLDAPadmin.git
# cp -rf phpLDAPadmin /var/www/phpldapadmin
# doas ln -s ../phpldapadmin /var/www/htdocs/phpldapadmin
# doas $EDITOR /var/www/phpldapadmin/config/config.php
para configurarlo (use su editor preferido en lugar de $EDITOR o defina esa
variable) es importante que por lo menos quite el comentario a la
línea
$config->custom->jpeg['tmpdir'] = '/tmp';
También debe asegurar que puede emplearse los dispositivos de generación de
números aleatorios en la jaula chroot de Apache. Para esto verifique
que en /etc/fstab
al montar la partición /var
este
permitiendo dispositivos (que no este la opción nodev
) y como se
explica en {5}, ejecute:
cd /var/www
doas mkdir -p dev
cd dev
doas /dev/MAKEDEV arandom
Para probar dirigase a https://midomino.org/phpldapadmin/
o si lo
requiere primero configure un alias en su servidor web.
5.2. Preparando cuentas
Primero cree un grupo posix en grupos.
A continuación cree cuentas de usuario, tenga en cuenta que en la configuración
por omisión debe emplear cifrado SHA para la clave (que no es seguro pero es
soportada por phpLdapAdmin
y ldadpd
).
6. DIFERENCIAS CON OPENLDAP
- El renombramiento de objetos opera con OpenLDAP pero no con ldapd.
7. BIBLIOGRAFÍA
- {1} [Autenticacion con OpenLDAP]
- {2} Páginas
man ldadp
, man ldapd.conf
, man ldapctl
- {3} http://www.tumfatig.net/20120817/monitoring-openbsds-ldap-daemon/
- {4} http://www.cyberciti.biz/faq/test-ssl-certificates-diagnosis-ssl-certificate/
- {5} http://openbsd.7691.n7.nabble.com/dev-random-as-chrooted-named-s-entropy-source-current-td64344.html
- {6} http://www.openldap.org/faq/index.cgi?_highlightWords=tls&file=185
- {7} http://www.tumfatig.net/20150718/opensmtpd-dovecot-and-ldapd-on-openbsd-5-7/
Información dedicada al Padre protector y liberada al dominio público. 2013. vtamara@pasosdeJesus.org