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:

VariableErzeugtAuswirkung wenn falsch
kerberos/adminserveradmin_server in /etc/krb5.confKerberos-Tickets können nicht erneuert werden
ldap/masterLDAP-Master für SchreiboperationenLDAP-Writes schlagen fehl
ldap/server/namePrimärer LDAP-ServerLDAP-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/adminserver korrigiert
  • ldap/master korrigiert
  • ldap/server/name korrigiert (oder Listener-Ursache behoben)
  • UDM DC-Objekt (cn=<ALTER-DC>,cn=dc,cn=computers) entfernt
  • LDAP-Policy cn=default-settings bereinigt
  • DNS SRV-Records bereinigt (samba-tool dns oder nsupdate)
  • Kerberos-Tickets getestet (kinit)
  • SMB-Zugriff getestet
  • Audit-Logging aktiviert

Lessons Learned

  1. samba-tool domain demote räumt Member Server nicht auf. Die Samba-Dokumentation schweigt sich darüber aus. Du musst UCR-Variablen auf jedem Member Server manuell prüfen.

  2. 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.

  3. UCR-Scope “ldap” schlägt ucr set. Die Warnung W: overridden by scope "ldap" heißt: Der Listener setzt den Wert automatisch. Du musst das fehlerhafte LDAP-Objekt entfernen, nicht die UCR-Variable forcen.

  4. Samba Audit-Logging gehört auf jeden DC. Eine einzige UCR-Variable. Kein Performance-Impact. Kein Grund es nicht zu tun.