Archivo de la etiqueta: ldap

Instalar un servidor de videoconferencia libre, Jitsi Meet (III, Autenticación de asistentes con LDAP)

Posiblemente uno de los motivos de mayor peso para instalar una instancia propia de Jitsi Meet es poder controlar/limitar quien accede a ella. Veremos en este artículo como requerir autenticación a los usuarios que se conectan usando LDAP para ello.

Autenticación de usuarios con LDAP (PAM, SQL, …)

Existen varias alternativas para la autenticación de usuarios con LDAP: mod_auth_ldap, mod_auth_ldap2 y el elegido por Jitsi en su paquetería: cyrus. Cyrus es una implementación del estándar SASL que abstrae el servicio de autenticación (LDAP en este caso) del consumidor del mismo (Prosody), por lo que en realidad usando SASL podríamos usar cualquier tipo de «backend» para validar usuarios (PAM, SQL,…). Los cambios necesarios en la configuración de nuestro VirtualHost principal (EXAMPLE.NET) serían:

Donde dice:
  authentication = "anonymous"

Dirá:
  authentication = "cyrus"
  cyrus_application_name = "xmpp"
  allow_unencrypted_plain_auth = true

Además añadiremos está línea en el bloque "modules_enabled":
  "auth_cyrus";

La opción cyrus_application_name indicará la configuración a usar por saslauthd para autenticar los usuarios. Mientras que la opción allow_unencrypted_plain_auth = true permite un mecanismo de autenticación inseguro (claves en claro) que sospecho es necesaria para dar soporte al cliente (javascript) de Jitsi Meet que no soporta otros mecanismos SASL como CRAM-MD5 o GSSAPI. Si configurasteis c2s_require_encryption = true, no debería ser un problema. En otro caso podrían viajar contraseñas en claro entre el servidor web y Prosody.

Lo siguiente será configurar saslauthd para prestar servicio a Prosody. Para ello instalaremos los siguientes paquetes (o sus correspondientes en distribuciones no Debian):

apt install sasl2-bin libsasl2-modules-ldap lua-cyrussasl

En el fichero de configuración de arranque de saslauthd (/etc/default/saslauthd) activaremos el arranque y configuraremos LDAP como «backend» para la autenticación:

START=yes
MECHANISMS="ldap"

Luego editaremos la configuración LDAP del saslauthd (/etc/saslauthd.conf). Por ejemplo para usar Autenticación Simple (conectar con el servidor LDAP usando las credenciales proporcionadas por el cliente):

ldap_servers: ldaps://IP_O_NOMBRE_SERVIDOR_LDAP/
ldap_search_base: ou=people,dc=EXAMPLE,dc=NET
ldap_filter: (uid=%u)
ldap_version: 3
ldap_auth_method: bind

Por último crearemos el fichero de configuración SASL para el servicio xmpp, el nombre de este fichero debe coincidir con el especificado en Prosody como cyrus_application_name. En este caso será /etc/sasl/xmpp.conf y su contenido será:

pwcheck_method: saslauthd
mech_list: PLAIN

Además debemos añadir al usuario prosody en el grupo sasl para que tenga acceso al socket de comunicación con el demonio saslauthd (en /run/saslauthd/):

# adduser prosody sasl

Después de editar todos estos ficheros será necesario reiniciar tanto Prosody como saslauthd:

# systemctl restart saslauthd
# systemctl restart prosody

Antes de seguir, os recomiendo que probéis al menos el funcionamiento de saslauthd para que en caso de problemas de autenticación podamos descartar esa parte. Un simple comando valdrá:

# testsaslauthd -u USUARIO -p CLAVE -f /var/run/saslauthd/mux

Sí, lo sé… contraseñas en línea de comando. No hay nada perfecto. Si pasamos la prueba, podemos seguir con la configuración.

Desde este momento, todos los usuarios tendrán que autenticarse para unirse a una conferencia. Pero es posible que también deseemos que usuarios anónimos se unan (a una sala creada), dejando la autenticación como requisito para crear una sala nueva y dar privilegios de moderador.

Dejar unirse, como invitados, a usuarios no autenticados (Secure Domain)

Tendremos hacer unos cambios en Jitsi Meet, Prosody y Jicofo para que los usuarios anónimos entren bajo un Virtualhost diferente en Prosody. Empezando por Prosody, añadiremos lo siguiente a nuestro fichero de configuración:

VirtualHost "invitados.EXAMPLE.NET"
  authentication = "anonymous"
  c2s_require_encryption = false

Como vemos, en este Virtualhost no hay autenticación. Luego habrá que informar a Jitsi Meet de este dominio para los usuarios que no se autentican. En su fichero de configuración (/etc/jitsi/meet/EXAMPLE.NET-config.js):

# Descomentar la siguiente línea:
anonymousdomain: 'invitados.EXAMPLE.NET',

Por último habrá que decirte a Jicofo (encargado de la creación de salas) que sólo los usuarios de nuestro dominio con autenticación pueden crear salas/ser moderadores. En /etc/jitsi/jicofo/sip-communicator.properties:

# Añadir la línea
org.jitsi.jicofo.auth.URL=XMPP:EXAMPLE.NET

No olvidéis reiniciar Prosody y Jicofo después de todos estos cambios. En próximas entregas hablaré de la configuración del resto de componentes y de la autenticación con tokens, que permite una integración con aplicaciones de terceros como Moodle.
$ exit