AD-Konten mit ChangePasswordAtLogon in PowerShell finden, Wechsel des Passworts erzwingen


    Tags: , ,

    Active Directory PowerShellAdmins können Anwender bei der nächsten Anmeldung zu einem Wechsel des Passworts anhalten. Während man den Status des ent­sprechenden Attributs in AD-Benutzer und -Computer leicht ein­sehen kann, ist das Vorgehen mit PowerShell etwas trick­reich. Das Setzen dieser Vorgabe fällt dagegen ziemlich einfach.

    Es gibt eine Reihe von Situationen, in denen es angebracht ist, dass Benutzer ihr Passwort wechseln müssen. So aktivieren Admins oder der Helpdesk diese Option regelmäßig, wenn sie das Kennwort eines Kontos zurücksetzen. User sollen es dann nicht beim temporären Passwort belassen. Das Gleiche gilt für neu angelegte Accounts, auch über den Import aus einer CSV-Datei.

    Ein weiterer Anlass bestünde darin, dass die Überwachung des Active Directory des Öfteren fehlgeschlagene Anmeldeversuche für ein Konto entdeckt oder dass ein Konto gar erfolgreich gehackt wurde. In diesem Fall wird man wahrscheinlich alle User zu einem Wechsel ihres Passworts bewegen wollen, was man mit PowerShell einfach veranlassen kann.

    Unternehmen, die den Best Practices aus Microsofts Security Baseline folgen und kein Ablaufdatum für Passwörter mehr nutzen, können bestimmte User mit ChangePasswordAtLogon bei Bedarf dennoch zum Wechsel der Kennwörter bewegen.

    Wechsel des Passworts erzwingen

    In PowerShell lässt sich das entsprechende Attribut nach diesem Muster setzen:

    Set-ADUser -Identy <User> -ChangePasswordAtLogon:$true

    Wenn man zum Beispiel alle Benutzer zum Wechsel ihres Passworts zwingen möchte, die in den vergangenen 30 Tagen einen ungültigen Anmelde­versuch hatten, dann kann man so vorgehen:

    $d = (Get-Date).AddDays(-30)

    Get-ADUser -Filter { Enabled -eq $True -and `
    LastBadPasswordAttempt -gt $d} |
    Set-ADUser -ChangePasswordAtLogon:$true

    In diesem Fall würden die betreffenden Konten erst über Get-ADUser ermittelt und dann über die Pipeline an Set-ADuser weitergeleitet.

    Benutzer zum Ändern ihres Passworts zwingen, wenn sie in den letzten 50 Tagen einen ungültigen Anmeldeversuch hatten.

    Konten ohne Passwort absichern

    Möchte man alle Konten, die bisher kein Passwort benötigt haben, in einen sicheren Zustand überführen, dann könnte man sie so zur Nutzung eines nicht-leeren Kennworts verpflichten und gleich den Wechsel desselben durchsetzen:

    Get-ADUser -Filter {Enabled -eq $true -and `
    PasswordNotRequired -eq $true} |
    Set-ADUser -PasswordNotRequired:$false -ChangePasswordAtLogon:$true

    Konflikt mit CannotChangePassword

    Beim Setzen von ChangePasswordAtLogon auf $true gilt zu bedenken, dass dieser Aufruf aus nahe­liegenden Gründen scheitert, wenn der Benutzer das Passwort nicht ändern darf oder wenn dieses nie abläuft.

    Wenn der Benutzer sein Passwort nie ändern muss, dann führt ChangePasswordAtLogon zu einem Fehler.

    Nachdem die Abfrage von CannotChangePassword ziemlich umständlich ist, kann man stattdessen einfach präventiv diese Eigenschaft auf $false setzen:

    Set-ADAccountControl -Identity SMacDonald -CannotChangePassword:$false

    Ob Benutzer das Passwort nie ändern müssen, lässt sich dagegen recht einfach feststellen:

    Get-ADUser -Filter 'PasswordNeverExpires -eq $TRUE' -Properties PasswordNeverExpires

    Konten finden, die das Kennwort wechseln müssen

    Während Set-ADUser einen eigenen Parameter für das Ändern dieses Attributs bietet, unterstützt Get-ADUser dagegen nicht ChangePasswordAtLogon, um diesen Status abzufragen.

    Eine Möglichkeit besteht darin, PasswordLastSet auf den Wert 0 zu prüfen:

    Get-ADUser -Properties PasswordLastSet -Filter "PasswordLastSet -eq '0'"

    Dies ist ein Hinweis darauf, dass ChangePasswordAtLogon aktiviert ist. Allerdings kann PasswordLastSet auch dann null sein, wenn für das Konto noch kein Passwort gesetzt wurde.

    Benutzerkonten auf den Wert von PasswordLastSet prüfen

    Nachdem die Password Policy in den meisten produktiven Umgebungen die Vergabe eines leeren Kennworts nicht zulässt, kann man zusätzlich die Eigenschaft PasswordNotRequired auf den Wert $true prüfen, weil für solche Accounts die Passwort­richtlinien ja nicht greifen:

    Get-ADUser -Properties PasswordNotRequired,PasswordLastSet `
    -Filter {(PasswordLastSet -eq '0') -and `
    (PasswordNotRequired -eq $false)}

    Konten, die kein Passwort benötigen, sollte man sich ohnehin separat vornehmen und ihnen dieses "Privileg" nach Möglichkeit entziehen.

    Fazit

    In verschiedenen Situationen gibt es die Anforderung, Benutzer bei der nächsten Anmeldung zum Wechseln ihres Passworts anzuhalten. Mit PowerShell lässt sich das relativ einfach umsetzen. Ergänzend dazu sollte man sicherstellen, dass die User das Kennwort auch ändern dürfen.

    Wenn man einen Report generieren möchten, um den Status von ChangePasswordAtLogon zu dokumentieren, dann gibt es mit Get-ADUser dafür keine direkte Möglichkeit. Die Abfrage von PasswordLastSet ist aber in dieser Situation sehr aufschlussreich.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links