Moin,
so, ich habe den ganzen Prozess nun soweit im Griff, dass das auch mit Kerberos & auf dem DC Master funktionieren sollte.
- Das Maschinenpasswort muss einmalig manuell im LDAP-Verzeichnis, im Samba-4-LDAP gesetzt und in die Datei
/etc/machine.secret
geschrieben werden.
- Anschließend muss ein Server-Passwortwechsel angestoßen werden. Dabei wird das Passwort erneut neu gesetzt, aber auch in alle Konfigurationsdateien geschrieben, in denen der Maschinenaccount für Verbindungen zum LDAP genutzt wird. Daher genügt der erste Schritt alleine nicht.
Im Folgenden muss darauf geachtet werden, welche Befehle auf welchem Host ausgeführt werden. Ist der DC Master selber betroffen, so sind alle Befehle auf dem DC Master auszuführen; ist ein anderer Host betroffen, so bitte genau beachten, was wo getan werden muss.
Achtung: in meinen Beispielen nutze ich backup2
als Hostnamen eines betroffenen Beispielsystems. Den müssen Sie natürlich überall durch den tatsächlichen Hostnamen ersetzen.
Neues Passwort erzeugen
Zuerst erzeugt man ein neues Passwort, z.B. wie folgt:
source /usr/share/univention-lib/all.sh
create_machine_password
Dieses Passwort schreibt man auf dem betroffenen Host das neue Passwort in die Datei /etc/machine.secret
. Hier ist unbedingt zu beachten, dass ausschließlich das Passwort in der Datei steht — es darf kein Zeichen mehr da sein, auch kein Zeilenumbruch! Daher ist dringend davon abzuraten, einen Editor zu nutzen, weil diese nun mal gerne Zeilenumbrüche einfügen. Am einfachsten geht es wie folgt:
echo -n dasNeuePasswort> /etc/machine.secret
Wichtig ist das -n
. Das sollte man anschließend mit ls -l /etc/machine.secret
prüfen — die Datei muss exakt so groß sein, wie das Passwort lang ist.
Passwort im OpenLDAP anpassen
Als nächstes setzt man das Passwort des Maschinenaccounts im LDAP neu auf das eben erzeugte. Das kann man über die UMC manuell (zu Computern navigieren, betroffene Maschine anklicken, Passwort eintragen, speichern) machen oder auf der Kommandozeile auf dem DC Master (!) mit udm
, z.B. so:
udm computers/domaincontroller_backup modify --binddn cn=admin,$(ucr get ldap/base) --bindpwdfile /etc/ldap.secret --dn cn=backup2,cn=dc,cn=computers,$(ucr get ldap/base) --set password=dasNeuePasswort
Das Beispiel gilt für einen DC Backup namens backup2
. Für andere Servertypen müssen das Modul und die DN angepasst werden. Die DN erfährt man auf dem betroffenen Host z.B. mit ucr get ldap/hostdn
.
Ob das erfolgreich war, kann man mit folgendem Befehl auf dem betroffenen Host testen, der das OpenLDAP mit den neuen Credentials durchsucht:
ldapsearch -xZZ -D $(ucr get ldap/hostdn) -y /etc/machine.secret -s base
Passwort im Samba-4-LDAP anpassen
Da die Passwörter nicht vom OpenLDAP ins Samba-4-LDAP und damit zu den Kerberos-Accounts synchronisiert werden, setzt man anschließend das Passwort im Samba-4-LDAP mit folgendem Befehl, der ebenfalls auf dem DC Master auszuführen ist:
samba-tool user setpassword 'backup2$' --newpassword=dasNeuePassword
Ob das wiederum erfolgreich war, testet man, indem auf dem betroffenen Host ein Kerberos-Ticket angefordert wird:
kinit --password-file=/etc/machine.secret $(hostname)\$
Im Erfolgsfall gibt das nichts aus, und ein anschließendes klist
zeigt ein aktives Token für den Host.
Weitere Aufräumarbeiten
Leider genügt das nicht; es müssen noch weitere Datenstrukturen im Samba-4-LDAP angepasst werden. Der Zustand ist jetzt aber glücklicherweise so, dass alle folgenden Arbeiten vom Univention-Script für den Server-Passwort-Wechsel erledigt werden können. Um diesen manuell anzustoßen, führt man auf dem betroffenen Host die folgenden Befehle aus:
oldval=$(ucr get server/password/interval)
ucr set server/password/interval=0
/usr/lib/univention-server/server_password_change
ucr set server/password/interval=$oldval
Im Erfolgsfall gibt das Script nichts aus. Logmeldungen finden sich in /var/log/univention/server_password_change.log
.
Abschließende Tests
Die folgenden Befehle sollten nun auf dem betroffenen Host wieder funktionieren:
univention-ldapsearch
univention-s4search # das nur, falls auch Samba 4 installiert ist
kinit --password-file=/etc/machine.secret $(hostname)\$
univention-ssh /etc/machine.secret $(hostname)\$@$(ucr get ldap/master) ls /
Auch sollte die Systemdiagnose in der Univention Management Console keine Kerberos-Probleme mehr zeigen.
Gruß
mosu