Ir al contenido

Sso Kerberos

Kerberos SSO (Single Sign-On) permite un inicio de sesión fluido para sus agentes a través de Active Directory, sin necesidad de transmitir contraseñas en texto plano. En una instalación de OTOBO basada en Docker, para esto se utiliza NGINX como Webproxy con el módulo SPNEGO, el cual se compila en un contenedor “builder” independiente. Posteriormente, el módulo generado dinámicamente (ngx_http_auth_spnego_module.so) se transfiere al contenedor NGINX real y la configuración estándar se reemplaza por una compatible con Kerberos :contentReference[oaicite:0]{index="0"}.
Con esto, seguimos el procedimiento probado en el proyecto oficial de OTOBO Docker, que implementa una clara separación entre las etapas de Build y Runtime.

En este artículo obtendrá:

  • Una visión general completa sobre las diferencias entre OTOBO y Znuny en el contexto de Kerberos SSO.
  • Una guía paso a paso desde la preparación de AD y la creación de Keytab hasta la configuración de Docker.
  • Consejos sobre depuración, configuración del navegador y mejores prácticas para diferentes versiones de OTOBO.

Aunque OTOBO y Znuny son funcionalmente muy similares (ambos provienen del proyecto original OTRS), existen los siguientes ajustes específicos en el contexto de Kerberos:

  • Rutas de configuración: OTOBO utiliza por defecto /opt/otobo-docker/nginx-conf/krb5.conf, mientras que Znuny generalmente utiliza /opt/znuny/nginx-conf/krb5.conf.
  • Archivos de plantilla: Las plantillas de NGINX difieren ligeramente en nombres y sintaxis de marcadores de posición; OTOBO proporciona un archivo otobo_nginx-kerberos.conf.template, Znuny uno similar llamado znuny_nginx-kerberos.conf.template.
  • Versionado: OTOBO 11.x incluye parámetros de SSO extendidos (“KerberosAdminServer”, “KerberosDefaultDomain”) que aún no están presentes en Znuny 6.x.
  1. Active Directory con Kerberos (Realm y KDC ya configurados).
  2. Una configuración de OTOBO Docker según la Instalación oficial con Docker :contentReference[oaicite:2]{index="2"}.
  3. Entradas DNS:
    • Un registro A para su FQDN de OTOBO (¡no un CNAME!), p. ej., otobo.example.com → 192.0.2.10.
    • Búsqueda inversa (Reverse-Lookup) para el nombre de host, para que las resoluciones SPN de Kerberos funcionen.

Cree una cuenta de servicio dedicada en su AD, por ejemplo, HTTP/otobo.example.com (UserPrincipalName). Tenga en cuenta:

  • Mayúsculas en HTTP/; Kerberos espera exactamente este prefijo :contentReference[oaicite:3]{index="3"}.
  • No utilizar caracteres especiales en la contraseña (p. ej., &).

Inicie sesión en un DC con privilegios de administrador y utilice ktpass.exe:

Ventana de terminal
ktpass.exe \
-princ HTTP/otobo.example.com@EXAMPLE.COM \
-mapUser EXAMPLE\\otobo-svc \
-crypto All \
-pass SvcUserPassword \
-ptype KRB5_NT_PRINCIPAL \
-out C:\krb5.keytab
  • -princ: SPN con Realm en mayúsculas.
  • -mapUser: Nombre de cuenta SAM (pre-W2K), p. ej., otobo-svc (doc.otobo.de).
  • -out: Ruta a la Keytab en el DC.

A continuación, mueva la Keytab al host de Docker:

Ventana de terminal
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab

El Dockerfile oficial utiliza un builder independiente con los paquetes de desarrollo necesarios:

FROM nginx:mainline AS builder-for-kerberos
...
RUN apt-get update && apt-get install -y gcc libc-dev make libpcre3-dev zlib1g-dev libkrb5-dev wget
WORKDIR /usr/src
RUN wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz \
&& wget https://github.com/stnoonan/spnego-http-auth-nginx-module/archive/${SPNEGO_AUTH_COMMIT_ID}.tar.gz
RUN tar -xzf nginx.tar.gz \
&& tar -xzf spnego-http-auth.tar.gz \
&& cd nginx-${NGINX_VERSION} \
&& ./configure --with-compat ${NGINX_CONFIG} --add-dynamic-module=../spnego-http-auth-nginx-module-${SPNEGO_AUTH_COMMIT_ID_FILE} \
&& make modules \
&& cp objs/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules/

Con esto, el módulo SPNEGO se compila de forma compatible con su versión de NGINX (extras.getpagespeed.com).

2.2 Configuración en el contenedor de Runtime

Sección titulada «2.2 Configuración en el contenedor de Runtime»
FROM nginx:mainline AS otobo-nginx-kerberos-webproxy
COPY --from=builder-for-kerberos /usr/lib/nginx/modules/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules
RUN apt-get update && apt-get install -y krb5-user libpam-krb5 libpam-ccreds krb5-multidev libkrb5-dev
COPY templates/ kerberos/templates
COPY docker-entrypoint.d/21-envsubst-on-krb5-conf.sh /docker-entrypoint.d/
RUN sed -i '4i load_module modules/ngx_http_auth_spnego_module.so;' /etc/nginx/nginx.conf
  • Carga de módulo: Insertar load_module en la línea 4.
  • Scripts Envsubst: Generan /etc/krb5.conf a partir de los datos de la plantilla.

3. Volúmenes de Docker y plantillas de NGINX

Sección titulada «3. Volúmenes de Docker y plantillas de NGINX»
Ventana de terminal
docker volume create otobo_nginx_custom_config
mp=$(docker volume inspect --format '{{ .Mountpoint }}' otobo_nginx_custom_config)
docker create --name tmp-nginx rotheross/otobo-nginx-webproxy:latest-11_0
docker cp tmp-nginx:/etc/nginx/templates/otobo_nginx-kerberos.conf.template.hidden $mp/otobo_nginx.conf.template
docker rm tmp-nginx

Cree docker-compose/otobo-nginx-custom-config.yml:

version: '3.7'
services:
nginx:
volumes:
- otobo_nginx_custom_config:/etc/nginx/config/template-custom

Active en el .env principal:

COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom
  1. Haga una copia de seguridad de su antiguo /opt/otobo-docker/.env:

    Ventana de terminal
    mv .env .env.bak
    cp .docker_compose_env_https_kerberos .env
  2. Añada las variables de Kerberos:

    OTOBO_NGINX_KERBEROS_KEYTAB=/opt/otobo-docker/nginx-conf/krb5.keytab
    OTOBO_NGINX_KERBEROS_CONFIG=/opt/otobo-docker/nginx-conf/krb5.conf
    OTOBO_NGINX_KERBEROS_SERVICE_NAME=HTTP/otobo.example.com
    OTOBO_NGINX_KERBEROS_REALM=EXAMPLE.COM
    OTOBO_NGINX_KERBEROS_KDC=dc1.example.com
    OTOBO_NGINX_KERBEROS_ADMIN_SERVER=dc1.example.com
    OTOBO_NGINX_KERBEROS_DEFAULT_DOMAIN=example.com
  3. Importe los certificados SSL y las contraseñas de DB de su antiguo .env.bak.

Luego inicie con:

Ventana de terminal
docker-compose down && docker-compose up -d
``` :contentReference[oaicite:6]{index=6}.
## 5. Configuración de OTOBO
### 5.1 Módulo de autenticación en `Kernel/Config.pm`
Comente la autenticación LDAP/DB y añada en su `Kernel/Config.pm`:
```perl
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';

Con esto, REMOTE_USER se interpreta correctamente como inicio de sesión (doc.otobo.de).

5.2 Activación en la interfaz de administración

Sección titulada «5.2 Activación en la interfaz de administración»
  • Configuración del sistema:

    • Establecer Customer::AuthModule en HTTPBasicAuth.
    • Aplicar AuthModule::HTTPBasicAuth::ReplaceRegExp.
  • Kernel/Config -> Ejecutar Deploy.

Para que SPNEGO funcione, su navegador debe aceptar el host como de confianza:

  • “Opciones de Internet” → SeguridadSitios de intranet localSitios
  • Añadir el dominio https://otobo.example.com y activar “Autenticación integrada de Windows” (doc.otobo.de).
  • Escriba about:config en la barra de direcciones.
  • network.negotiate-auth.trusted-uris = https://otobo.example.com
  • network.negotiate-auth.delegation-uris = https://otobo.example.com
  1. Comprobar logs de NGINX

    Ventana de terminal
    docker logs otobo_nginx_1 -f
  2. Acceder al contenedor

    Ventana de terminal
    docker exec -it otobo_nginx_1 bash
    cat /etc/krb5.conf
    klist -e
  3. Obtener token SPN

    Ventana de terminal
    env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
  4. Probar Keytab

    Ventana de terminal
    kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM

    Error KDC cannot fulfill request → DNS/SPN incorrecto (plugins.miniorange.com).

  • Keytab propia: Nunca reutilice la cuenta de servicio de sincronización LDAP, evite colisiones de contraseñas.
  • Least Privilege: Asigne solo los derechos de AD mínimos necesarios para la cuenta de SSO.
  • Rotación de Keytab: Renueve la Keytab regularmente cada 90 días.
  • TLS para KDC: Si es posible, active ldaps:// o GSSAPI sobre TLS.
  • Monitoreo: Supervise los tickets de Kerberos de forma automatizada con herramientas como klist y kvno.

¡Con esta guía completa, su instancia de OTOBO Docker está óptimamente preparada para Kerberos SSO, incluyendo una autenticación segura, mantenible y escalable!


Fuentes: