Nach einer AD Migration kann es zu Fehlern bei der Benutzeranmeldung kommen. Wenn ein User zu viele Gruppenmitgliedschaften hat, schlägt die Anmeldung fehl: „During a logon attempt, the user’s security context accumulated too many security IDs.“ In diesem Artikel möchte ich folgenden Fragen nachgehen:
- Was ist die maximale Anzahl von Gruppenmitgliedschaften eines Benutzer?
- Was genau passiert bei einer AD Migration, wenn zusätzlich die SID History der Quell-Gruppe übernommen wird?
- Wie kann man feststellen, wie viele Gruppenmitgliedschaften ein Benutzer bereits hat?
- Wie berechnet man die Anzahl SIDs eines Benutzerobjekts?
Index
Maximale Anzahl von Gruppenmitgliedschaften
Der Security Token eines Windows Clients kann maximal eine Anzahl von 1024 SIDs speichern. Sobald ein Benutzerobjekt in mehr Gruppen Mitglied ist, schlägt die Anmeldung fehl. Genau gesagt, liegt das Limit bereits bei ca. 1010 Gruppen, da einige Speicherplätze bereits durch sog. „well known SIDs“ belegt sind. Lesen Sie mehr über das Thema auf der Microsoft Support-Seite hier.
Übernahme der SIDHistory bei AD Migration
Werden nun Gruppen im Zuge einer Active Directory Domain Migration in eine neue Domain migriert und wird hier zusätzlich die SIDHistory der Quell-Gruppe mit übernommen, so belegt eine Gruppe plötzlich 2 der 1010 „SID-Speicherplätze“ im Security Token. Ist ein Benutzerkonto in der Quell Domain in 500 Gruppen Mitglied, so belegen diese 500 Gruppen in der Ziel Domain bereits 2 x 500 = 1000 der 1010 „SID-Speicherplätze“ (vorausgesetzt alle 500 Gruppen wurden migriert).
Fehler bei Anmeldung: „…too many security IDs“
Versuchsaufbau: ich habe einen Testbenutzer in 1010 zufällig generierte Gruppen aufgenommen und die Anzahl der Gruppenmitgliedschaften schrittweise um eins erhöht. Bei Gruppe 1013 war Schluss, eine Anmeldung an einem Windows 10 Client war nicht mehr möglich.
Die Fehlermeldung bei Windows 10 hat sich im Vergleich zu früher sehr verbessert, sie läßt die Ursache zumindest vermuten:
„During a logon attempt, the user’s security context accumulated too many security IDs.“
Zur Vollständigkeit noch die Fehlermeldung von Windows 7:
Anzahl der SIDs eines Benutzerobjektes berechnen
In einem Migrationsprojekt sollte natürlich vermieden werden, dass Anwender sich am Tag des Roll-Outs mit ihren neuen Accounts NICHT anmelden können, da ihr Benutzerkonto aufgrund der SIDHistory zu viele SIDs im Token hat. Um diesen Fall im Vorfeld aufzudecken, kann man mit PowerShell die Anzahl der SIDs für einzelne Benutzerobjekte berechnen lassen.
Attribut Tokengroups zeigt SIDs an
Das Attribute „tokengroups“ enthält (fast) alle SIDs, welche dem Security Token bei der Anmeldung hinzugefügt werden. (zzgl. der „well known groups“ und der „primary group“). Das Attribut „tokengroups“ ist ein sog. „Constructed Value Attribute„. Das bedeutet, dass es keinen gespeicherten Wert hat, sondern beim Auslesen quasi „on demand“ gefüllt wird.
Auslesen der Tokengroups mit PowerShell
Da das „tokengroups“ Attribut ein „constructed value“ ist, muss es auf eine andere Weise ausgelesen werden.
So geht es nicht…
Wenn man das Benutzerobjekt mit „Get-ADUser“ bindet und dann die Eigenschaft „tokengroups.count“ ausgibt, erhält man keine Ausgabe:
1 2 |
$user=get-aduser username -Properties * $user.tokenGroups.count |
Besser so: „-Properties tokengroups„
Damit das Attribut „tokengroups“ beim Binden das Benutzerobjekts berechnet wird, muss es mit dem Parameter „-Properties“ direkt adressiert werden:
1 2 3 |
$user=get-aduser username $token=(get-aduser $user -Properties tokengroups).tokengroups $token.count |
Bei dem oben beschriebenen Versuchsaufbau mit einem Benutzerkonto, welches in 1013 Gruppen Mitglied ist, hatte „tokengroups“ einen Wert von 1015. Dieser Wert reichte aus, um eine Anmeldung unmöglich zu machen.
Größe des Kerberos Tokens beachten
Nicht nur die Anzahl der Gruppen, sondern auch die maximale Größe des Kerberos Tokens kann eine Rolle spielen, wie bereits in diesem Artikel beschrieben wurde: Gruppenmitgliedschaften greifen nicht, GPOs ziehen nicht, MaxTokenSize zu klein?
Versuchsaufbau
Falls jemand den Versuch nachstellen möchte, so habe ich die 1013 Gruppen erzeugt:
1 2 3 4 5 6 7 8 9 10 11 12 |
[int]$count="0" do { $count=$count +"1" $RND=Get-Random -minimum 100000 -maximum 999999 $groupname="TestGroup" + $RND $groupname New-ADGroup -Name $groupname -SamAccountName $groupname -GroupCategory Security -GroupScope Global -Path $OU $NewGroup=get-adgroup $groupname Add-ADGroupMember -identity $NewGroup -Members $user } while ($count -ne "1013") |
Fazit
Über diesen Weg lässt sich eine Auflistung aller Benutzerkonten mit der Anzahl der künftigen SIDs erstellen und auswerten. Die verdächtigen Fälle lassen sich im Vorfeld herausfinden und bereinigen, noch bevor es zu Problemen bei der Anmeldung kommt.
Dieser Artikel entstand bei Projekten der FirstAttribute AG
AD Consulting | AD Migration
Für Fragen zu unseren Leistungen stehen
wir Ihnen unter Kontakt gern zur Verfügung.
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>