Drei Wochen nach dem Demote von dc-vader meldet ein User: “Ich komme nicht mehr auf die Freigaben.”
SMB-Zugriff auf den File Server srv-r2d2: tot. Kerberos:
kinit Administrator
# kinit: Cannot contact any KDC for realm 'DEATHSTAR.LAN'
Der neue Primary DC dc-yoda läuft. Der Replica DC dc-obiwan repliziert sauber. DNS-SRV-Records zeigen auf die richtigen DCs. Warum findet der File Server keinen KDC?
Die Diagnose: UCR-Variablen auf dem Member Server
ucr get kerberos/adminserver
# dc-vader.deathstar.lan ← DA
ucr get ldap/master
# dc-vader.deathstar.lan ← UND DA
Die UCR-Variablen auf dem Member Server zeigen immer noch auf den toten DC. Seit drei Wochen. Niemand hat es gemerkt.
Warum fällt das nicht sofort auf?
Kerberos-Tickets haben eine Lebensdauer. Standard: 10 Stunden TGT, Renewal bis zu 7 Tage. Solange gültige Tickets gecacht sind, funktioniert alles. Erst wenn der Client ein neues TGT holen will, schaut er in /etc/krb5.conf — und findet dort den admin_server, generiert aus der UCR-Variable kerberos/adminserver.
Der DC ist weg. Das Ticket läuft aus. SMB stirbt.
Das Heimtückische: Der Zeitpunkt des Bruchs hängt von der Ticket-Lebensdauer ab, nicht vom Demote. Du hast Tage bis Wochen Ruhe, dann knallt es — und keiner denkt mehr an den DC-Demote.
Die Ursache: samba-tool domain demote räumt nicht auf
Beim DC-Demote passiert auf den Member-Servern: gar nichts. Kein UCS-Script, kein Listener, kein Cron-Job aktualisiert UCR-Variablen. Diese drei sind die Zeitzünder:
| Variable | Erzeugt | Auswirkung wenn falsch |
|---|---|---|
kerberos/adminserver | admin_server in /etc/krb5.conf | Kerberos-Tickets können nicht erneuert werden |
ldap/master | LDAP-Master für Schreiboperationen | LDAP-Writes schlagen fehl |
ldap/server/name | Primärer LDAP-Server | LDAP-Reads gehen ins Leere |
Der Sonderfall: ldap/server/name und UCR-Scope “ldap”
ldap/server/name hat eine Besonderheit. Der UCS ldap_server.py Listener liest beim Start alle DC-Objekte aus dem LDAP mit univentionServerRole=master oder backup und setzt die Variable dynamisch — mit UCR-Scope “ldap”, der manuelle ucr set-Befehle überschreibt.
Wenn du ucr set ldap/server/name=dc-yoda.deathstar.lan machst und diese Warnung siehst:
W: overridden by scope "ldap"
Dann nützt dir ucr set nichts. Du musst die Ursache beheben: Das UDM-Objekt des alten DCs mit falscher univentionServerRole aus dem LDAP entfernen.
Die Lösung
Schritt 1: Stale UCR-Variablen finden
Auf jedem Member Server:
ucr search --value <ALTER-DC-HOSTNAME>
Schritt 2: UCR-Variablen korrigieren
ucr set \
kerberos/adminserver=<NEUER-DC>.deathstar.lan \
ldap/master=<NEUER-DC>.deathstar.lan
Schritt 3: krb5.conf regenerieren und Kerberos testen
ucr commit /etc/krb5.conf
kinit Administrator
klist
Schritt 4: UDM DC-Objekt prüfen (auf dem Primary DC)
# Gibt es noch ein DC-Objekt mit dem alten Hostnamen?
udm computers/domaincontroller_master list | grep <ALTER-DC>
# Falls ja — entfernen:
udm computers/domaincontroller_master remove \
--dn "cn=<ALTER-DC>,cn=dc,cn=computers,dc=deathstar,dc=lan"
Schritt 5: LDAP-Policy prüfen
udm policies/ldapserver list --filter cn=default-settings
# Prüfen ob der alte DC noch in ldapServer gelistet ist
Schritt 6: Dienste neu starten
systemctl restart univention-directory-listener
systemctl restart winbind nmbd smbd
Schritt 7: Verifizieren
# Kerberos
kinit Administrator && klist
# SMB
smbclient -L //<FILE-SERVER> -U Administrator -W DEATHSTAR
# Winbind
wbinfo -t
wbinfo -i 'DEATHSTAR+administrator'
Bonus: Samba Audit-Logging aktivieren
Wer hat wann was geändert? Ohne Logging weißt du es nicht. Eine UCR-Variable:
ucr set samba/debug/level='0 auth_audit:3 dsdb_audit:3 dsdb_password_audit:3'
Loggt Auth-Vorgänge, LDAP-Changes und Password-Changes nach /var/log/samba/log.*. Level 3 zeigt Quell-IP und Zeitstempel — genug für Forensik, wenig genug für den Alltag.
Checkliste: Nach DC-Demote
-
ucr search --value <ALTER-DC>auf jedem Member Server -
kerberos/adminserverkorrigiert -
ldap/masterkorrigiert -
ldap/server/namekorrigiert (oder Listener-Ursache behoben) - UDM DC-Objekt (
cn=<ALTER-DC>,cn=dc,cn=computers) entfernt - LDAP-Policy
cn=default-settingsbereinigt - DNS SRV-Records bereinigt (
samba-tool dnsodernsupdate) - Kerberos-Tickets getestet (
kinit) - SMB-Zugriff getestet
- Audit-Logging aktiviert
Lessons Learned
samba-tool domain demoteräumt Member Server nicht auf. Die Samba-Dokumentation schweigt sich darüber aus. Du musst UCR-Variablen auf jedem Member Server manuell prüfen.Der Zeitverzug ist gefährlich. Kerberos-Tickets cachen den Zugang. Du merkst den Bruch erst Tage oder Wochen später — wenn niemand mehr an den DC-Demote denkt.
UCR-Scope “ldap” schlägt
ucr set. Die WarnungW: overridden by scope "ldap"heißt: Der Listener setzt den Wert automatisch. Du musst das fehlerhafte LDAP-Objekt entfernen, nicht die UCR-Variable forcen.Samba Audit-Logging gehört auf jeden DC. Eine einzige UCR-Variable. Kein Performance-Impact. Kein Grund es nicht zu tun.