Tags: Active Directory, PowerShell, Passwort
Admins können Anwender bei der nächsten Anmeldung zu einem Wechsel des Passworts anhalten. Während man den Status des entsprechenden Attributs in AD-Benutzer und -Computer leicht einsehen kann, ist das Vorgehen mit PowerShell etwas trickreich. 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 Anmeldeversuch 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.
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 naheliegenden Gründen scheitert, wenn der Benutzer das Passwort nicht ändern darf oder wenn dieses nie abläuft.
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.
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 Passwortrichtlinien 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
Verwandte Beiträge
- UserAccountControl: Sicherheitseinstellungen für AD-Konten prüfen und ändern
- Wann haben Benutzer zuletzt ihr Passwort im Active Directory geändert?
- Ablaufdatum von AD-Passwörtern in PowerShell auslesen
- Passwort-Einstellungen mit PowerShell: Kennwort läuft nie ab, Passwort nicht erforderlich
- Microsoft fasst alle Authentifizierungsmethoden des Azure AD in einer Policy zusammen
Weitere Links