Introdução
O Kerberos SSO (Single Sign-On) permite que os agentes sejam autenticados de forma transparente por meio do Active Directory, sem que as senhas sejam transmitidas em texto puro. Em uma instalação baseada em Docker do OTOBO, o NGINX é executado como um proxy web com o módulo SPNEGO, que é compilado em um contêiner "builder" separado. Em seguida, o módulo dinamicamente gerado (ngx_http_auth_spnego_module.so
) é transferido para o contêiner NGINX real e a configuração padrão é substituída por uma configuração compatível com o Kerberos.
Neste artigo, você receberá:
- Uma visão geral abrangente das diferenças entre OTOBO e Znuny no contexto do Kerberos SSO.
- Uma instrução passo a passo, desde a preparação do AD até a criação do Keytab e a configuração do Docker.
- Dicas para depuração, configuração do navegador e práticas recomendadas para diferentes versões do OTOBO.
Diferenças entre OTOBO e Znuny
Embora OTOBO e Znuny sejam funcionalmente muito semelhantes (ambos originários do projeto OTRS original), existem ajustes finos no contexto do Kerberos:
- Caminhos de configuração: OTOBO usa padrão
/opt/otobo-docker/nginx-conf/krb5.conf
, enquanto o Znuny geralmente usa/opt/znuny/nginx-conf/krb5.conf
. - Arquivos de modelo: Os modelos NGINX diferem ligeiramente em nome e sintaxe de placeholder; OTOBO fornece um arquivo
otobo_nginx-kerberos.conf.template
, enquanto o Znuny fornece um arquivo semelhantemente nomeadoznuny_nginx-kerberos.conf.template
. - Versionamento: OTOBO 11.x traz parâmetros SSO estendidos ("KerberosAdminServer", "KerberosDefaultDomain") que faltam no Znuny 6.x.
Pré-requisitos
- Active Directory com Kerberos (Realm e KDC já configurados).
- Uma instalação OTOBO-Docker de acordo com a Instalação Oficial com Docker.
- Registros DNS:
- Um registro A para o FQDN do OTOBO (não um CNAME!), por exemplo,
otobo.example.com → 192.0.2.10
. - Pesquisa reversa para o nome do host, para que as resoluções de SPN do Kerberos funcionem.
- Um registro A para o FQDN do OTOBO (não um CNAME!), por exemplo,
1. Usuário e SPN do Active Directory
1.1 Criar usuário
Crie uma conta de serviço dedicada no seu AD, por exemplo, HTTP/otobo.example.com
(UserPrincipalName). Observe:
- Letras maiúsculas em
HTTP/
; o Kerberos espera exatamente esse prefixo. - Nenhum caractere especial no password (por exemplo,
&
).
1.2 Gerar SPN e Keytab
Conecte-se a um DC com direitos de administração e use ktpass.exe
:
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 com Realm em letras maiúsculas.-mapUser
: Nome da conta SAM (pré-W2K), por exemplo,otobo-svc
.-out
: Caminho para o Keytab no DC.
Mova o Keytab para o host Docker:
docker_admin> mkdir -p /opt/otobo-docker/nginx-conf
docker_admin> mv /path/to/krb5.keytab /opt/otobo-docker/nginx-conf/krb5.keytab
2. NGINX com Módulo SPNEGO
2.1 Fase de Build no Dockerfile
O Dockerfile oficial usa um builder separado com pacotes de desenvolvimento necessários:
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/
Isso compila o módulo SPNEGO para ser compatível com a versão do NGINX.
2.2 Configuração no Contêiner de Tempo de Execução
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
- Carregar módulo:
load_module
na linha 4. - Scripts envsubst: Gerar
/etc/krb5.conf
a partir de dados de modelo.
3. Volumes do Docker e Modelos do NGINX
3.1 Criar Volume Personalizado
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
3.2 Substituição do docker-compose
Crie docker-compose/otobo-nginx-custom-config.yml
:
version: '3.7'
services:
nginx:
volumes:
- otobo_nginx_custom_config:/etc/nginx/config/template-custom
Ative no arquivo .env
principal:
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom
4. Ajustes no .env
- Salve o seu antigo
/opt/otobo-docker/.env
:bashmv.env.env.bak cp.docker_compose_env_https_kerberos.env
- Adicione as variáveis do Kerberos:dotenv
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
- Certificados SSL e senhas do banco de dados do seu antigo
.env.bak
.
Inicie com:
docker-compose down && docker-compose up -d
5. Configuração do OTOBO
5.1 Módulo de Autenticação em Kernel/Config.pm
Comente a autenticação LDAP/DB e adicione:
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';
Isso interpreta corretamente REMOTE_USER
como login.
5.2 Ativação na Interface de Administração
- Configuração do sistema:
- Defina
Customer::AuthModule
comoHTTPBasicAuth
. - Adote
AuthModule::HTTPBasicAuth::ReplaceRegExp
.
- Defina
- Kernel/Config -> Implantar.
6. Configuração do Navegador
Para que o SPNEGO funcione, o navegador deve aceitar o host como confiável:
Chrome / Edge / IE
- "Opções de Internet" → Segurança → Sites do Intranet Local → Sites
- Adicione o domínio
https://otobo.example.com
e ative a "Autenticação Integrada do Windows".
Firefox
- Digite
about:config
na barra de endereços. network.negotiate-auth.trusted-uris = https://otobo.example.com
network.negotiate-auth.delegation-uris = https://otobo.example.com
7. Depuração e Solução de Problemas
- Verifique os logs do NGINX:bash
docker logs otobo_nginx_1 -f
- Acesse o contêiner:bash
docker exec -it otobo_nginx_1 bash cat /etc/krb5.conf klist -e
- Obtenha o token SPN:bash
env KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
- Teste o Keytab:bashErro "KDC não pode atender ao pedido" → DNS/SPN incorreto.
kinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM
8. Práticas Recomendadas e Segurança
- Keytab próprio: Nunca reutilize a conta de serviço de sincronização do LDAP; evite colisões de senhas.
- Privilégios mínimos: Conceda apenas os direitos necessários do AD para a conta SSO.
- Rotação do Keytab: Renove o Keytab a cada 90 dias.
- TLS para KDC: Ative
ldaps://
ou GSSAPI sobre TLS, se possível. - Monitoramento: Monitore os tickets Kerberos com ferramentas como
klist
ekvno
.
Com esta guia abrangente, sua instância do OTOBO Docker está otimizada para o Kerberos SSO – autenticação segura, mantida e escalável incluída!