In relativ vielen UCS-Umgebungen haben die Systemverwalter noch keine konsistenten Prozesse zum Aufspüren, Deaktivieren oder Löschen ungenutzter Benutzerkonten entwickelt. So sammeln sich über die Jahre Accounts im LDAP-Verzeichnisdienst an, die schon lange nicht mehr genutzt werden. Wir bei Univention haben im Kundenauftrag eine neue UCS-Erweiterung entwickelt, die dabei hilft, solche ungenutzten Zugänge aufzuspüren. Das Lastbind-Overlay-Modul und ein neues Python-Skript ermitteln inaktive Konten auf LDAP-Servern, auch in großen Umgebungen mit mehreren LDAP-Instanzen und verteilten Systemrollen.

In diesem Blogbeitrag erkläre ich zunächst, wie Admins gemischter Umgebungen die Anmeldeinformationen aus AD/Samba auslesen und stelle vor, wie das im LDAP-Verzeichnisdienst funktioniert. Dabei zeige ich, wie Sie in Ihrer UCS-Umgebung das Lastbind-Overlay-Modul aktivieren und unser Skript univention_lastbind.py dazu nutzen, alle LDAP-Instanzen der Domäne zu kontaktieren und die Zeitstempel der letzten Nutzeranmeldungen einzusammeln.

Samba/AD-Anmeldeinformationen auslesen

Screenshot des ausgelesenen Samaba-Attributes "Last Logon Timestamp"

In Samba lassen sich die Informationen über die Nutzeranmeldungen leicht auslesen.

Wer eine Umgebung betreut, wo sich Benutzer primär gegen Samba/AD authentifizieren, ist fein raus: Die AD-Attribute LastLogon, LastLogonTimeStamp und LastLogonDate speichern Informationen über Benutzeranmeldungen. Einzige Herausforderung dabei: Linux-Admins müssen die Werte in diesen Attributen gegebenenfalls konvertieren, denn es handelt sich um ein Zeitformat, welches eher in Windows-basierten Systemen üblich ist; dort wird die Zeit in 100-Nanosekunden-Intervallen ab dem 01.01.1601, 0 Uhr UTC gezählt. Unix-Systeme (zu denen auch Linux gehört) nutzen vergangene Sekunden ab dem 01.01.1970, 0 Uhr UTC (The Epoch). Im Netz finden sich einige Konvertierungstools von Windows-Zeitangaben, z. B. der EpochConverter. Möchte man das händisch machen, muss man die Nanosekunden in Sekunden umwandeln (durch 10000000 teilen) und die Differenz zwischen 1601 und 1970 auffüllen (11644473600 Sekunden).

Auslesen und umwandeln auf der Kommandozeile:

root@ucs01:~# univention-s4search cn=mary lastLogonTimestamp | grep
lastLogonTimestamp
lastLogonTimestamp: 132466226840838210
root@ucs01:~# date -d @$(echo $(( 132466226840838210/10000000-11644473600 )))
Do 8. Okt 11:24:44 CEST 2020

In gemischten Umgebungen, in denen es auch Dienste gibt, die ausschließlich den LDAP-Verzeichnisdienst nutzen, ist das aber wenig hilfreich. Als Workaround hat sich bislang bewährt, Kennwortrichtlinien (Password Policies) zu erstellen, durch die Benutzer gezwungen sind, Ihr Passwort regelmäßig zu ändern – wer sein abgelaufenes Kennwort nach einer bestimmten Zeit nicht erneuert hat, galt als inaktiv. Das ist allerdings nicht besonders praktisch, und deshalb haben wir das Lastbind-Overlay-Modul slapo-lastbind in UCS integriert.

slapo-lastbind und Univention Corporate Server

Beim Implementieren des Lastbind-Overlay-Modul mussten wir darauf achten, die Besonderheiten in Univention Corporate Server richtig abzubilden. So findet das Aufzeichnen des Zeitstempels z. B. immer nur auf dem LDAP-Server statt, an dem der Benutzer sich tatsächlich anmeldet. Je nach Konfiguration kann es in einer UCS-Umgebung aber mehrere solcher Server mit unterschiedlichen Systemrollen geben (DC Master, DC Backup und DC Slave), und Anwender melden sich für verschiedene Dienste auch an verschiedenen LDAP-Servern an.

Die einzelnen LDAP-Server tauschen sich zwar grundsätzlich mit dem Listener-Mechanismus untereinander aus, aber die einzige schreibbare Kopie liegt beim DC Master. All das, was lastbind aufzeichnet, wird nicht repliziert – und das ist auch nicht sinnvoll. Daher haben wir die Konfiguration so angepasst, dass nach dem Aktivieren des Overlay-Moduls ein Attribut namens authTimestamp den Zeitstempel eines erfolgreichen LDAP-Bind aufzeichnet. Dieses Attribut ist von der Replikation ausgeschlossen.

Lastbind-Overlay-Modul aktivieren

Beachten Sie, dass der Einsatz des Overlay-Moduls erst ab UCS Version 4.4-3 errata 499 funktioniert. Das Aktivieren ist schnell über die Univention Configuration Registry erledigt. Dazu setzt der Administrator die UCR-Variable ldap/overlay/lastbind auf yes – und zwar auf allen Systemen mit einem LDAP-Dienst. Es ist nicht sinnvoll, das Modul nur auf einigen Rechnern zu aktivieren, denn je nach Umgebung würden sonst einige Anmeldeinformationen verloren gehen. Nach dem Aktivieren des Moduls muss der jeweilige LDAP-Server neu gestartet werden.

Eine weitere UCR-Variable namens ldap/overlay/lastbind/precision definiert die Zeit in Sekunden, die vergehen muss, bevor das authTimestamp-Attribut aktualisiert wird. Das verhindert eine große Anzahl von Schreiboperationen, welche die Leistung beeinträchtigen können.

Screenshot der Univention Configuration Registry (UCR)

Aktivierung des Lastbind-Overlay-Moduls in der OCR

Noch ein wichtiger Hinweis: Sobald das Lastbind-Overlay-Modul einmal aktiviert ist, sollte es nicht wieder deaktiviert werden. Es fügt eine LDAP-Schema-Definition für das authTimestamp-Attribut hinzu. Ist das Modul nicht länger aktiv und ein Eintrag mit authTimestamp-Attribut-Wert wird geändert, verursacht die Replikation einen Fehler, da das Attribut nicht bekannt ist.

Weitere Hinweise finden Sie in unserem Handbuch und in einem Artikel der Knowledge Base.

Die Informationen auslesen

Da das authTimestamp-Attribut wie erwähnt von der Replikation ausgeschlossen ist, haben wir ein Skript erstellt: /usr/share/univention-ldap/univention_lastbind.py. Es sammelt den letzten Wert des Attributs von allen erreichbaren LDAP-Servern der UCS-Domäne ein. Außerdem kann es den Zeitstempel der letzten Anmeldung eines Benutzers im erweiterten UDM-Attribut lastbind abspeichern und aktualisieren. Das erweiterte Attribut lastbind wird auf das LDAP-Attribut univentionAuthTimestamp abgebildet.

Abfrage des authTimestamp-Attributes mit UCS

Abfrage des authTimestamps mittels Script

Das Skript können Sie von Hand in der Shell ausführen oder aber einen Cronjob erstellen, der sich beispielsweise einmal täglich darum kümmert. Wir empfehlen, das Einsammeln zu automatisieren und dafür einen Cronjob zu erstellen. Weitere Hinweise dazu finden Sie in unserem Handbuch.

Achtung: Vor dem ersten Einsatz des Skriptes sollten Sie unbedingt überprüfen, ob alle registrierten Server erreichbar sind. Sonst verlängert sich die Laufzeit erheblich, oder es treten andere Fehler auf.

Weitere Herausforderungen

Beide Attribute, authTimestamp und univentionAuthTimestamp, nutzen als Datumsformat die GeneralizedTime. Das heißt: auch diese Angaben gilt es im Zweifelsfall zu konvertieren. In gemischten Umgebungen mit LDAP und Samba/AD müssen beide Authentifizierungsmethoden beachtet werden, um aussagekräftige Listen von inaktiven Accounts zu erstellen.

Das Auswerten der gesammelten Informationen bleibt den UCS-Administrierenden überlassen. Eine sinnvolle Verwertung könnte ein angepasster Univention Directory Report sein, der einen entsprechenden Bericht erzeugt.

Haben Sie Vorschläge zur Verbesserung? Oder nutzen Sie das Feature bereits und möchten Tipps mit anderen UCS-Anwendern teilen? Dann hinterlassen Sie gerne einen Kommentar oder diskutieren mit uns auf help.univention.de.

 

UCS Core Edition jetzt kostenfrei einsetzen!

Zum Downloadbereich
Michael Grandjean

Michael begann 2007 eine Ausbildung zum Fachinformatiker Systemintegration bei der G&M IT-Systeme GmbH, wo er anschließend in der Abteilung Support, Administration und IT-Sicherheit kleine und mittelständische Unternehmen betreute und eine Weiterbildung zum IT-Sicherheitsmanager abschloss. 2013 wechselte er als Open Source Software Consultant in das Professional Services Team von Univention.

Was ist Ihre Meinung? Hinterlassen Sie einen Kommentar!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert