Wprowadzenie
Kerberos SSO (Single Sign-On) umożliwia bezproblemową autentykację agentów za pomocą Active Directory, bez przesyłania haseł w postaci jawnej. W instalacji OTOBO opartej na Dockerze do tego celu wykorzystywany jest NGINX jako serwer proxy sieci Web z modułem SPNEGO, który jest kompilowany w oddzielnym kontenerze "builder". Następnie wygenerowany dynamicznie moduł (ngx_http_auth_spnego_module.so
) jest przenoszony do właściwego kontenera NGINX, a standardowa konfiguracja jest zastępowana konfiguracją obsługującą Kerberos :contentReference[oaicite:0]{index=0}. Postępujemy zgodnie z wypróbowaną procedurą w oficjalnym projekcie OTOBO Docker, która realizuje wyraźne rozdzielenie między etapami budowy i uruchomienia.
W tym artykule otrzymasz:
- Kompleksowy przegląd różnic między OTOBO a Znuny w kontekście Kerberos SSO.
- Krok-po-kroku instrukcje od przygotowania AD, przez tworzenie Keytab, aż do konfiguracji Docker.
- Porady dotyczące debugowania, konfiguracji przeglądarki i najlepszych praktyk dla różnych wersji OTOBO.
Różnice między OTOBO a Znuny
Chociaż OTOBO i Znuny są funkcjonalnie bardzo podobne (oba pochodzą z oryginalnego projektu OTRS), istnieją następujące drobne dostosowania w kontekście Kerberos:
- Ścieżki konfiguracji: OTOBO domyślnie wykorzystuje
/opt/otobo-docker/nginx-conf/krb5.conf
, Znuny zwykle korzysta z/opt/znuny/nginx-conf/krb5.conf
. - Pliki szablonów: Szablony NGINX różnią się nieznacznie nazwami i składnią placeholderów; OTOBO dostarcza plik
otobo_nginx-kerberos.conf.template
, Znuny - podobnie nazwanyznuny_nginx-kerberos.conf.template
. - Numeracja wersji: OTOBO 11.x wprowadza rozszerzone parametry SSO („KerberosAdminServer“, „KerberosDefaultDomain“), które w Znuny 6.x są jeszcze niedostępne.
Wymagania
- Active Directory z Kerberos (domeyna i KDC już skonfigurowane).
- Instalacja OTOBO–Docker zgodnie z Oficjalną instrukcją instalacji z Docker :contentReference[oaicite:2]{index=2}.
- Rekordy DNS:
- Rekord A dla Twojej pełnej nazwy domeny OTOBO (bez CNAME!), np.
otobo.example.com → 192.0.2.10
. - Odwrotny lookup dla nazwy hosta, aby rozwiązania SPN Kerberos działały.
- Rekord A dla Twojej pełnej nazwy domeny OTOBO (bez CNAME!), np.
1. Użytyk Active Directory i SPN
1.1 Tworzenie użytkownika
Utwórz w swoim AD dedykowane konto usługi, np. HTTP/otobo.example.com
(UserPrincipalName). Zwróć uwagę:
- Wielkie litery w
HTTP/
; Kerberos oczekuje dokładnie tego prefiksu :contentReference[oaicite:3]{index=3}. - Brak znaków specjalnych w haśle (np.
&
).
1.2 Generowanie SPN i Keytab
Zaloguj się na kontrolerze domeny z uprawnieniami administratora i użyj 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 z domeną w wielkich literach.-mapUser
: Nazwa konta SAM (pre-W2K), np.otobo-svc
(doc.otobo.de).-out
: Ścieżka do Keytab na kontrolerze domeny.
Przenieś następnie Keytab do hosta 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 z modułem SPNEGO
2.1 Etap budowy w Dockerfile
Oficjalne Dockerfile wykorzystuje oddzielny builder z niezbędnymi pakietami deweloperskimi:
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/
Dzięki temu moduł SPNEGO jest skompilowany zgodnie z Twoim wydaniem NGINX (extras.getpagespeed.com).
2.2 Konfiguracja w kontenerze uruchomieniowym
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
- Ładowanie modułu:
load_module
w wierszu 4. - Skrypty envsubst: generują
/etc/krb5.conf
z danych szablonu.
3. Woluminy Docker i szablony NGINX
3.1 Tworzenie niestandardowego woluminu
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 Nadpisanie docker-compose
Utwórz docker-compose/otobo-nginx-custom-config.yml
:
version: '3.7'
services:
nginx:
volumes:
- otobo_nginx_custom_config:/etc/nginx/config/template-custom
Aktywuj w głównym .env
:
COMPOSE_FILE=docker-compose.yml:docker-compose/otobo-nginx-custom-config.yml
NGINX_ENVSUBST_TEMPLATE_DIR=/etc/nginx/config/template-custom
4. Dostosowania .env
Zabezpiecz stare
/opt/otobo-docker/.env
:bashmv.env.env.bak cp.docker_compose_env_https_kerberos.env
Dodaj zmienne Kerberos:
dotenvOTOBO_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
Przenieś certyfikaty SSL i hasła bazy danych z starej
.env.bak
.
Uruchom następnie:
docker-compose down && docker-compose up -d
``` :contentReference[oaicite:6]{index=6}.
## 5. Konfiguracja OTOBO
### 5.1 Moduł autentykacji w `Kernel/Config.pm`
Skomentuj autentykację LDAP/DB i dodaj w swoim `Kernel/Config.pm`:
```perl
$Self->{AuthModule} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '^(.+?)@.+?$';
Dzięki temu REMOTE_USER
jest poprawnie interpretowany jako login (doc.otobo.de).
5.2 Aktywacja w interfejsie administratora
Konfiguracja systemu:
Customer::AuthModule
ustaw naHTTPBasicAuth
.AuthModule::HTTPBasicAuth::ReplaceRegExp
przenieś.
Kernel/Config -> Deploy uruchom.
6. Konfiguracja przeglądarki
Aby SPNEGO działało, przeglądarka musi zaufać hostowi:
Chrome / Edge / IE
- „Opcje internetowe“ → Zabezpieczenia → Strony intranetu → Strony
- Dodaj domenę
https://otobo.example.com
i aktywuj „Integrowaną autentykację systemu Windows” (doc.otobo.de).
Firefox
about:config
wpisz w pasku adresu.network.negotiate-auth.trusted-uris = https://otobo.example.com
network.negotiate-auth.delegation-uris = https://otobo.example.com
7. Debugowanie i rozwiązywanie problemów
Sprawdź logi NGINX
bashdocker logs otobo_nginx_1 -f
Wejdź do kontenera
bashdocker exec -it otobo_nginx_1 bash cat /etc/krb5.conf klist -e
Pobierz token SPN
bashenv KRB5_TRACE=/dev/stdout kvno HTTP/otobo.example.com@EXAMPLE.COM
Przetestuj Keytab
bashkinit -VV -k -t /etc/krb5.keytab HTTP/otobo.example.com@EXAMPLE.COM
Błąd
KDC cannot fulfill request
→ DNS/SPN niepoprawne (plugins.miniorange.com).
8. Najlepsze praktyki i zabezpieczenia
- Własny Keytab: Nigdy nie używaj ponownie konta usługi synchronizacji LDAP, unikaj kolizji haseł.
- Minimalne uprawnienia: Przydzielaj tylko niezbędne prawa AD dla konta SSO.
- Rotacja Keytab: Regularnie odnawiaj Keytab co 90 dni.
- TLS dla KDC: Jeśli to możliwe, aktywuj
ldaps://
lub GSSAPI przez TLS. - Monitoring: Monitoruj z wykorzystaniem narzędzi takich jak
klist
ikvno
automatycznie bilety Kerberos.
Z tą kompleksową instrukcją Twoja instalacja OTOBO Docker jest optymalnie przygotowana do Kerberos SSO – bezpieczna, łatwa w utrzymaniu i skalowalna autentykacja włącznie!
Źródła:
- rotheross/otobo-nginx-kerberos-webproxy na Docker Hub (hub.docker.com)
- Moduł SPNEGO HTTP Auth NGINX (stnoonan) (extras.getpagespeed.com)
- Oficjalna dokumentacja instalacji OTOBO (11.0 SSO Kerberos) (doc.otobo.de)
- GitHub Issue #81: NGINX Kerberos jest uszkodzony (github.com)
- Przewodnik po konfiguracji Kerberos SSO miniOrange (plugins.miniorange.com)
- OTOBO Docker Override HTTPS-Kerberos (github.com)
- Dokumentacja deweloperska i administratorska OTOBO
- Microsoft Docs: ktpass.exe (community.znuny.org)
- Mozilla MDN: SPNEGO w Firefox (doc.otobo.de)
- Dokumentacja NGINX: moduły dynamiczne (extras.getpagespeed.com)