Instalar servidor LDAP

1. /etc/hosts
Modificar el archivo /etc/hosts, con la IP y la dominio del ldap:

    127.0.0.1    localhost
    127.0.1.1    virtual.interior.udelar.edu.uy    virtual
    127.0.1.1    identidad.interior.udelar.edu.uy

    ...
    

2. Antes de instalar Openldap

sudo dpkg-reconfigure debconf
Poner interface=Dialog y priority=low, para configurar la instalación de slapd.

3. Instalar OpenLDAP

Generamos una contraseña compleja para el usuario admin generado al inicio:

pwgen -s 16 1

La preservamos cuidadosamente para pruebas durante este proceso de instalación y luego para archivos de seguridad.
sudo apt-get install slapd ldap-utils
Omit OpenLDAP server configuration? No
DNS domain name: udelar.edu.uy
Organization name? udelar.edu.uy
Administrator password: ***********
Confirm password:  ***********
Database backend to use: HDB
Do you want the database to be removed when slapd is purged? No
Allow LDAPv2 protocol? No

Podemos verificar que el servicio ldap quedó bien instalado y funcional:

root@wschebor:~# ldapwhoami -vv  -x -D cn=admin,dc=udelar,dc=edu,dc=uy -W 
ldap_initialize( <DEFAULT> )
Enter LDAP Password: 
dn:cn=admin,dc=udelar,dc=edu,dc=uy
Result: Success (0)

ingresando la contraseña apropiada cuando nos la pide.

4 Configurar el servidor Openldap, denominado slapd

El demonio del servidor ldap, slapd, ya no se configura con archivos de tipo slapd.conf. Si ven documentación respecto a ese archivo, está opsoleta con las versiones actuales de openldap.

La configuración se del servidor no se carga al iniciar desde tales archivos, sino que está almacenada de forma dinámica en la misma estructura ldap, en la rama cn=config.

Las configuraciones se agregan desde un archivo .ldif correctamente configurado. el utilitario slaptest permite convertir las configuraciones slapd.conf, y las inclusiones de <esquema>.schema que contenga a un conjunto apropiado de configuración de .ldif, como ilustrado en la documentación a continuación .

Agregar los schemas

sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/core.ldif
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

Ver tambien la documentación sobre el schema LDAP, para el esquema completo que utilizamos en el Gestor de Identifdad de la UdelaR en el Interior.

Crear grupos: gente, recursos y usurios

DN BASE: dc=udelar,dc=edu,dc=uy

estructura.ldif

dn: ou=gente,dc=udelar,dc=edu,dc=uy
objectClass: organizationalUnit
ou: gente

dn: ou=grupos,dc=udelar,dc=edu,dc=uy
objectClass: organizationalUnit
ou: grupos

dn: ou=recursos,dc=udelar,dc=edu,dc=uy
objectClass: organizationalUnit
ou: servicios

Se ingresa con el comando:

ldapadd -x -D cn=admin,dc=udelar,dc=edu,dc=uy -W -f estructura.ldif

Podemos visualizar los registros que se han ingresado:

 ldapsearch -H ldap://ldap.interior.edu.uy  -D "cn=admin,dc=udelar,dc=edu,dc=uy" -b "dc=udelar,dc=edu,dc=uy" -s sub "objectclass=*" -ZW

ingrsando la contraseña compleja generada al inicio.

Crear un usuario para pruebas, dentro del grupo gente

usuario.ldif

dn: cn=john,ou=gente,dc=udelar,dc=edu,dc=uy
objectClass: inetOrgPerson
sn: Bonachon
givenName: Jhon Bonachon
cn: bonachon

Se ingresa con el comando:

ldapadd -x -D cn=admin,dc=udelar,dc=edu,dc=uy -W -f usuario.ldif

5. Configurar SSL/TLS

sudo apt-get install gnutls-bin

Inicialmente configuramos los certificados por dos años con nuestra suerte de CA: Autoridad de Certificación, pero expirarion.

Ahora reconfiguramos los certificados con Let's encrypt: #5708.

Creamos una solicitud de certificado (ca-interior.edu.uy-req.pem) y lo firmamos

certtool --generate-self-signed --load-privkey ca-interior-key.pem --template ca.info --outfile ca-interior-cert.pem

Crear la clave para el servidor (ldap.interior.udelar.edu.uy-key.pem):

certtool --generate-privkey --bits 4096 --outfile ldap.interior.edu.uy-key.pem

Crear el template a usar por la solicitud de certificado, de nuevo un archivo de texto llamado ldap.info con lo siguiente:

c = UY
organization = Universidad de la República
cn = ldap.interior.udelar.edu.uy
tls_www_server
encryption_key
signing_key
expiration_days = 720

Luego, creamos nuestra solicitud de certificado (ldap.interior.edu.uy-req.pem):

certtool --generate-request --load-privkey ldap.interior.edu.uy-key.pem --template ldap.info --outfile ldap.interior.edu.uy-req.pem

Una vez termindos los pasos anteriores, debemos tener 3 archivos en nuestra carpeta:

ldap.info
ldap.interior.edu.uy-req.pem
ldap.interior.edu.uy-key.pem

Le hacemos llegar el segundo a los gestionarios de la CA, que nos deberán devolver un archivo: ldap.interior.edu.uy-cert.pem

También debemos descargar el certificado raíz de la CA:

wget --no-check-certificate  https://proyectos.interior.edu.uy/attachments/download/2312/CAcert_interior.edu.uy.pem

Nuestro servidor LDAP usará solo 3 archivos (el certificado público de la CA, y su par llave/certificado) por lo que los movemos a una ubicación más idónea:

cp CAcert_interior.edu.uy /etc/ssl/certs/
cp ldap.interior.edu.uy-cert.pem /etc/ssl/certs/
cp ldap.interior.edu.uy-key.pem /etc/ssl/private/

Es IMPORTANTE brindarle los permisos de acceso adecuados a dichos certificados/llave para evitar quebraderos de cabeza tratando de dar con el error main: TLS init def ctx failed: -1

sudo adduser openldap ssl-cert
Añadiendo al usuario `openldap' al grupo `ssl-cert' ...
Añadiendo al usuario openldap al grupo ssl-cert
sudo chgrp ssl-cert /etc/ssl/private/ldap.interior.edu.uy-key.pem
chmod g+r /etc/ssl/private/ldap.interior.edu.uy-key.pem
chmod o-r /etc/ssl/private/ldap.interior.edu.uy-key.pem
sudo chgrp ssl-cert /etc/ssl/certs/CAcert_interior.edu.uy.pem
chmod g+r /etc/ssl/certs/CAcert_interior.edu.uy.pem
chmod o-r /etc/ssl/certs/CAcert_interior.edu.uy.pem
sudo chgrp ssl-cert /etc/ssl/certs/ldap.interior.edu.uy-cert.pem
chmod g+r /etc/ssl/certs/ldap.interior.edu.uy-cert.pem
chmod o-r /etc/ssl/certs/ldap.interior.edu.uy-cert.pem

Si no existe el grupo ssl-cert es necesario instalar el paquete 'ssl-cert' utilizando el siguiente comando.

sudo apt-get install ssl-cert

Para que los utilitarios LDAP verifiquen sus certificados respecto a esta CA, conviente agregar la línea siguiten al archivo /etc/ldap/ldap.conf,

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/CAcert_interior.edu.uy.pem

Para agregar estos archivos a la configuración de slapd, se crea el archivo tls.ldif:

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/CAcert_interior.edu.uy.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.interior.edu.uy-key.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap.interior.edu.uy-cert.pem

Se ingresan estos parámetros con:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif

Finalmente, conviene activar el servicio en ldaps. En /etc/defaults/slapd, actualizar esta línea:

SLAPD_SERVICES="ldap:///  ldaps:/// ldapi:///" 

Reiniciar slapd:

sudo service slapd restart

Verificamos que todo quedó funcional:
Conexión en ldaps:

root@wschebor:~# ldapwhoami -vv -H ldaps://ldap.interior.edu.uy:636/ -x -D cn=admin,dc=udelar,dc=edu,dc=uy -W 
ldap_initialize( ldaps://ldap.interior.edu.uy:636/??base )
Enter LDAP Password: 
dn:cn=admin,dc=udelar,dc=edu,dc=uy
Result: Success (0)

Conexión en ldap+tls:
root@wschebor:~# ldapwhoami -vv -H ldap://ldap.interior.edu.uy:389/ -x -D cn=admin,dc=udelar,dc=edu,dc=uy -ZZW 
ldap_initialize( ldap://ldap.interior.edu.uy:389/??base )
Enter LDAP Password: 
dn:cn=admin,dc=udelar,dc=edu,dc=uy
Result: Success (0)

Si openldap no inicia por una mala configuración de los certificados, se puede ir al archivo /etc/ldap/slapd.d/cn\=config.ldif
y borrar o configurar manualmente, las líneas:

    
olcTLSCACertificateFile: /etc/ssl/certs/CAcert_interior.edu.uy.pem
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.interior.edu.uy-key.pem
olcTLSCertificateFile: /etc/ssl/certs/ldap.interior..edu.uy-cert.pem
A esta altura, podemos verificar que accedemos desde un Apache directory Server, con la configuración de conexión siguiente:
  • Network parameters:
    • Hostname: ldap.interior.edu.uy
    • Use StartTLS extension
  • Authentication
    • Simple authentication
    • Bind DN: cn=admin,dc=udelar,dc=edu,dc=uy

6. Instalar PWM

Configurar los schema

Antes de instalar PWM hay agregar el schema de Pwm, y de paso agregamos eduPerson. Ver la configuración del schema LDAP.

Instalar tomcat6

En la debian Jessi pasamos de tomcat 6 a tomcat 7:

sudo apt-get install tomcat7

Ahí se puede ver la página por omisión de tomcat: http://varela.interior.edu.uy:8080/

Instalamos algunos utilitarios para el tomcat:

apt-get install tomcat7-admin tomcat7-examples tomcat7-docs

Definimos un usuario en /etc/tomcat7/tomcat-users.xml:

&lt;user username="admin" password="***************" roles="admin,tomcat,manager-gui"/&gt;

Y eventualmente definimos los roles como documentado aquí.

Reiniciamos tomcat:

sudo service tomcat7 restart

Ahí podemos ver la interfaz de administración de las webapp: http://varela.interior.edu.uy:8080/manager/html

Instalar el PWM

Hicimos un fork del pwm original, ahora se puede bajar el pwm.war de:

http://sourceforge.net/p/interiorudelar/code/ci/pwm/tree/pwm_v1.7.1/

Copiar el archivo pwm.war en la carpeta /var/lib/tomcat6/webapps/

Reiniciar tomcat7

sudo service tomcat7 restart

Y ahí la interfaz de administración de las webapp da acceso a la página de configuración inicial de pwm.
---
http://tomcat.apache.org/tomcat-7.0-doc/ es denso. Parte de la compilación y no contempla los empaquetados...
Consulté también: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-apache-tomcat-on-a-debian-server

Configurar PWM

Entrar a PWM, desde un navegador (127.0.0.1:8080/pwm) y configurarlo.

Continúa con la configuración de PWM


Links: http://techpubs.spinlocksolutions.com/dklar/ldap.html
https://chicheblog.wordpress.com/2013/08/26/como-instalar-openldap-en-debian7ubuntu13-04-con-soporte-gnutls/