Comment vérifier l’expiration du mot de passe d’un compte utilisateur AD avec PowerShell

Active Directory (AD) est utilisé par de nombreuses organisations pour la gestion des utilisateurs et les services d’authentification. Comprendre l’expiration du mot de passe des comptes utilisateurs AD est important pour maintenir la sécurité. En utilisant PowerShell, cette tâche peut être automatisée, rendant la gestion plus facile. Cet article expliquera comment vérifier l’expiration du mot de passe des comptes utilisateurs AD en utilisant PowerShell, étape par étape.

Sommaire

Commande pour vérifier l’expiration du mot de passe

Pour vérifier l’expiration du mot de passe d’un compte utilisateur Active Directory, combinez le cmdlet PowerShell Get-ADUser avec plusieurs attributs. Ci-dessous se trouve la commande de base pour vérifier l’expiration du mot de passe pour un utilisateur spécifique.

# Vérifier l'expiration du mot de passe de l'utilisateur
Get-ADUser -Identity "username" -Properties "PasswordLastSet", "PasswordNeverExpires" | Select-Object -Property Name, PasswordLastSet, PasswordNeverExpires, @{Name="PasswordExpires"; Expression={if ($_.PasswordNeverExpires -eq $false) { $_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays) } else {"Never Expires"}}}

Cette commande récupère le « PasswordLastSet » (la dernière fois que le mot de passe a été défini), si le mot de passe est défini pour ne jamais expirer « PasswordNeverExpires », et si le mot de passe a une expiration, calcule et affiche quand cette date d’expiration est.

Commentaires

  • Le cmdlet Get-ADUser est utilisé pour récupérer les informations de l’utilisateur depuis AD.
  • Le paramètre -Identity spécifie le nom d’utilisateur cible.
  • Avec le paramètre -Properties, vous spécifiez quels attributs vous souhaitez récupérer. Par défaut, tous les attributs ne sont pas récupérés.
  • Utilisez le cmdlet Select-Object pour choisir les informations que vous souhaitez afficher et ajouter des propriétés personnalisées.

Exemple de script 1 : Liste des utilisateurs dont le mot de passe a expiré

Un script pour identifier et lister les utilisateurs dont les mots de passe ont expiré parmi tous les utilisateurs Active Directory peut aider à vérifier la conformité avec les politiques de sécurité organisationnelles et automatiser les tâches de gestion de compte.

Le script PowerShell suivant détecte les utilisateurs dont les mots de passe ont expiré en comparant la date actuelle et produit une liste de ces utilisateurs.

# Lister les utilisateurs expirés
Import-Module ActiveDirectory
$today = (Get-Date)
Get-ADUser -Filter * -Properties PasswordLastSet, PasswordNeverExpires | Where-Object {
    $_.PasswordNeverExpires -eq $false -and
    ($_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays)) -lt $today
} | Select-Object Name, PasswordLastSet, @{Name="PasswordExpires"; Expression={$_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays)}}

Commentaires

  • Import-Module ActiveDirectory rend les cmdlets liés à Active Directory disponibles. Cette ligne est toujours nécessaire avant d’exécuter des scripts liés à AD.
  • Le cmdlet Get-Date est utilisé pour obtenir la date actuelle, qui sert de base pour déterminer l’expiration du mot de passe.
  • Get-ADUser -Filter * cible tous les utilisateurs dans Active Directory.
  • Le cmdlet Where-Object filtre les utilisateurs dont les mots de passe ne sont pas valables de manière permanente et dont la date de définition du mot de passe plus la période de validité maximale définie par la politique de mot de passe du domaine est antérieure à la date d’aujourd’hui.
  • Utilisez le cmdlet Select-Object pour sélectionner uniquement les informations nécessaires et ajouter la propriété personnalisée PasswordExpires pour calculer et afficher la date d’expiration du mot de passe.

Ce script facilite la gestion des utilisateurs expirés, contribuant à maintenir la sécurité.

Exemple de script 2 : Envoi automatique d’emails de notification avant l’expiration

Notifier les utilisateurs au sein de l’organisation que leur mot de passe est sur le point d’expirer peut améliorer l’expérience utilisateur et renforcer la sécurité. Le script PowerShell suivant détecte les utilisateurs dont les mots de passe expireront dans un nombre spécifié de jours et envoie automatiquement des emails de notification à ces utilisateurs.

# Envoyer des emails de notification avant l'expiration
Import-Module ActiveDirectory
$notificationPeriod = 14 # Nombre de jours avant l'envoi de la notification
$smtpServer = "smtp.example.com" # Adresse du serveur SMTP
$fromEmail = "admin@example.com" # Adresse email de l'expéditeur
$subject = "Votre mot de passe expirera bientôt" # Sujet de l'email

$users = Get-ADUser -Filter * -Properties EmailAddress, PasswordLastSet, PasswordNeverExpires | Where-Object {
    $_.PasswordNeverExpires -eq $false -and
    ($_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays - $notificationPeriod)) -lt (Get-Date)
}

foreach ($user in $users) {
    $toEmail = $user.EmailAddress
    $body = "Cher $($user.Name),\n\nVotre mot de passe expirera dans moins de $notificationPeriod jours. Veuillez

 changer votre mot de passe dès que possible.\n\nCordialement,\nVotre équipe informatique"
    Send-MailMessage -SmtpServer $smtpServer -From $fromEmail -To $toEmail -Subject $subject -Body $body
}

Commentaires

  • Ce script utilise la variable $notificationPeriod pour définir quand commencer à notifier les utilisateurs, fixée à 14 jours à l’avance dans cet exemple.
  • Le cmdlet Get-ADUser récupère les informations des utilisateurs incluant les attributs EmailAddress, PasswordLastSet, et PasswordNeverExpires.
  • Le cmdlet Where-Object filtre pour les utilisateurs dont l’expiration du mot de passe approche.
  • La boucle foreach est utilisée pour envoyer un email à chaque utilisateur concerné en utilisant le cmdlet Send-MailMessage.

En exécutant régulièrement ce script, les utilisateurs peuvent prendre les mesures appropriées avant que leurs mots de passe expirent, aidant à maintenir la sécurité des comptes et à réduire le nombre de tickets de support.

Exemple de script 3 : Désactivation automatique des comptes utilisateurs expirés

Comme mesure de sécurité, désactiver automatiquement les comptes utilisateurs dont les mots de passe ont expiré peut réduire le risque d’accès non autorisé. Le script PowerShell suivant détecte les comptes utilisateurs avec des mots de passe expirés et désactive automatiquement ces comptes.

# Désactivation automatique des utilisateurs expirés
Import-Module ActiveDirectory
$today = (Get-Date)

$expiredUsers = Get-ADUser -Filter * -Properties PasswordLastSet, PasswordNeverExpires | Where-Object {
    $_.PasswordNeverExpires -eq $false -and
    ($_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays)) -lt $today
}

foreach ($user in $expiredUsers) {
    # Désactivation du compte utilisateur
    Disable-ADAccount -Identity $user.SamAccountName
    Write-Output "Compte désactivé : $($user.Name)"
}

Commentaires

  • Import-Module ActiveDirectory importe le module Active Directory, permettant l’utilisation des cmdlets liés à AD.
  • Le cmdlet Get-ADUser récupère toutes les informations des utilisateurs et utilise Where-Object pour filtrer les utilisateurs avec des mots de passe expirés.
  • Dans la boucle foreach, le cmdlet Disable-ADAccount est utilisé pour désactiver les comptes des utilisateurs dont les mots de passe ont expiré.
  • Le script affiche dans la console lorsque un compte utilisateur est désactivé.

Ce script est particulièrement utile pour la gestion des comptes dans de grandes organisations, automatisant la conformité avec les politiques de sécurité et réduisant la charge administrative. Exécuter régulièrement le script assure que les comptes avec des mots de passe expirés sont désactivés, renforçant la sécurité du système.

Considérations de sécurité

Lors de l’automatisation de la politique de mot de passe et de la gestion des comptes utilisateurs, plusieurs considérations de sécurité doivent être prises en compte. Faites attention aux points suivants lors de la mise en œuvre et de l’exploitation de ces scripts.

  1. Appliquer le principe de moindre privilège : Le compte exécutant le script doit se voir accorder les permissions minimales nécessaires. Par exemple, si seule la lecture des informations de mot de passe des utilisateurs est nécessaire, des permissions en lecture seule doivent être attribuées, et seulement les permissions nécessaires pour désactiver les comptes doivent être accordées pour ces opérations.
  2. Sécuriser le stockage des scripts : Puisque les scripts peuvent contenir des informations potentiellement sensibles ou des commandes modifiant le système, ils doivent être stockés de manière sécurisée pour se protéger contre l’accès non autorisé.
  3. Journalisation et surveillance : Les changements effectués par les scripts doivent être correctement journalisés et surveillés. Cela permet une réponse rapide aux comportements inattendus ou aux incidents de sécurité.
  4. Maintenir les mécanismes de notification : Surtout pour les scripts qui notifient les utilisateurs de l’expiration imminente du mot de passe ou désactivent automatiquement les comptes, il est conseillé d’avoir des mécanismes en place pour notifier les administrateurs ou les utilisateurs lorsque des actions sont prises.
  5. Revoir et mettre à jour régulièrement : Les scripts doivent être régulièrement revus et mis à jour si nécessaire, en réponse aux changements dans les politiques organisationnelles ou aux mises à jour de l’environnement Active Directory.

En adhérant à ces considérations de sécurité, les processus automatisés facilités par ces scripts peuvent fonctionner efficacement tout en restant alignés avec les normes de sécurité organisationnelles.

Conclusion

Utiliser PowerShell pour vérifier et gérer l’expiration des mots de passe des comptes utilisateurs Active Directory est essentiel pour maintenir la sécurité organisationnelle. En utilisant les scripts introduits dans cet article, une surveillance efficace des expirations de mot de passe des comptes utilisateurs AD, une notification avant l’expiration, et une désactivation automatique des comptes basée sur les politiques de sécurité peuvent être réalisées.

Il est important que ces processus automatisés soutiennent et renforcent les politiques de sécurité de l’organisation. Cependant, l’automatisation doit être accompagnée de l’application du principe de moindre privilège, d’un stockage sécurisé des scripts, d’une journalisation et surveillance appropriées, du maintien des mécanismes de notification, et d’une révision et mise à jour régulières, parmi d’autres considérations de sécurité.

En fin de compte, en combinant de manière appropriée ces meilleures pratiques et scripts d’automatisation, la gestion de l’environnement Active Directory peut devenir plus efficace et sécurisée.

Sommaire