מצא משתמשי Active Directory עם סיסמאות שפג תוקפן (PowerShell). האם אתה אחראי על ניהול סיסמאות בסביבת ה־Active Directory (AD) שלך? משימה חיונית אחת היא לזהות משתמשים שלהם פג תוקפן סיסמאות, מכיוון שמשתמשים אלה לא יוכלו יותר להתחבר לחשבונותיהם עד שיחדשו את הסיסמאות שלהם. מאמר זה מציג לך כיצד להשתמש ביעילות ב־PowerShell כדי למצוא משתמשי Active Directory עם סיסמאות שפג תוקפן.
בוא נתחיל את המאמר שלנו על מציאת משתמשי Active Directory עם סיסמאות שפג תוקפן (PowerShell).
מצא משתמשי AD עם סיסמאות שפגו באמצעות PowerShell
איפוס סיסמה או הודעות תפוגה. בין אם אתה מנהל רשת או פשוט מעוניין לשפר את האבטחה בסביבת ה-Active Directory שלך, מדריך זה מספק את המידע שאתה זקוק לו כדי להתחיל.
הקדמות
אם אנו מתכננים לעקוב אחרי מאמר זה, נצטרך את הבאים:
- A Windows computer joined to an Active Directory domain.
-
מותקן
מודול ActiveDirectory על המחשב. - המחשב צריך גם לכלול לפחות Windows PowerShell 5.1 או גרסה גבוהה יותר.
מציאת משתמשים ב-Active Directory
לפני שנגזר סיסמה למשתמש, עלינו לאתר את החשבון תחילה. כתוצאה, השלב הראשון שלנו צריך להיות לקבוע האם קיים רשומה. כדי לעשות זאת, הפעל את הפקודה
הפרמטר זיהוי מקבל אחד מארבעת המזהים: שם מסוים (DN), GUID (objectGUID), מזהה אבטחה (objectSID), או שם חשבון SAM (SAMAccountName).
לדוגמה, אם אנו מבקשים לאפס את הסיסמה עבור משתמש מסוים, עלינו לוודא תחילה שהמשתמש קיים לפני שנפעיל איפוס חשבון. כדי לעשות זאת, העתק את הפקודה הבאה והדבק אותה לתוך מסוף הכוח של PowerShell שלנו . וודא שאתה משנה תחילה את שם המשתמש לנכון:
Get-ADUser -Identity
הפקודה החזירה את מאפייני המשתמש, כפי שמוצג בתמונת המסך למטה, מאשרת כי החשבון קיים וששם המשתמש נכון:
מציאת משתמשים עם סיסמאות פגות ב-AD
ניתן לקבל במהירות את תאריך התפוגה של הסיסמה למשתמש יחיד על ידי הוספת ושימוש בתכונה msDS-UserPasswordExpiryTimeComputed עם פקודת Get-ADUser:
Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'
אבל שורת הקוד הזו תציג פלט שאדם לא יכול לקרוא, לכן אנו צריכים להוסיף את השורה הבאה כדי להמיר את התוצאות לתבנית קריאה. כדי להוסיף את השורה למטה, נשתמש בפקודת Select-Object -Property על צינור פס השליטה PowerShell:
Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
בריצה של אותה תכונה, msDS-UserPasswordExpiryTimeComputed, עם המסנן הנכון, אנו מקבלים רשימה של חשבונות Active Directory וזמני תפוגת הסיסמה שלהם:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

אנו משפרים את התסריט לעיל על ידי יצוא רשימת המשתמשים לקובץ טקסט שנוכל להשתמש בו מאוחר יותר. כדי לעשות זאת, נשתמש בפקודת Out-File שתשלח את הפלט לקובץ טקסט:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt
userslist.txt קובץ שנוצר על ידי הסקריפט למעלה ואנו יכולים להשתמש בו מאוחר יותר. השמנו את המאפיין ExpiryDate מהפלט מכיוון שאנו רוצים רק את זהותם של חשבונות המשתמש שפג תוקפם. אנו משתמשים ברשימה זו לתיקון רב-כמותי, כמו שמתואר מאוחר יותר במאמר.
איפוס סיסמת משתמש ב-Active Directory
כעת שלמדנו איך להשתמש ב-Get-ADUser כדי לוודא חשבון משתמש, אנו יודעים שהתוצאה תקפה ושזהות המשתמש קיימת. עלינו כעת להשתמש ב־Set-ADAccountPassword cmdlet כדי לאפס את הסיסמה של המשתמש.
הפקודה Set-ADAccountPassword משנה את הסיסמה של משתמש אם אנו מספקים את הסיסמה הישנה. אם אין לנו את הסיסמה הישנה, ה־cmdlet מאפס אותה עם הפרמטר Reset.
הסיסמה החדשה שנוצרת באופן אקראי היא סיסמה אקראית באורך 14 תווים עם חמישה תווים לא אלפא-נומריים. כדי לבצע את הפעולה, פתחו חלון PowerShell, העתיקו את הקוד, הדביקו אותו לתוך PowerShell ולחצו על Enter:
$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
- שורה 1: מציין את שם המשתמש של מייצרים את הסיסמה לאיפוס. ודא כי תחליפו את המחרוזת שם_משתמש עם מזהה המשתמש האמיתי.
- שורה 2: מייבא את מחלקת אובייקט סיסמת ה-System.Web ב-.NET.
- שורה 3: מייצר סיסמה אקראית שבאורך 14 תווים עם חמישה תווים לא אלפא-נומריים.
- שורה 4: ממיר את סיסמת הטקסט הרגיל לאובייקט סיסמה מאובטחת.
- שורה 5: מקל facilitator לאיפוס הסיסמה.
- שורה 6: מאלץ את חשבון ה-AD לשנות את הסיסמה בעת הכניסה הבאה.
- שורה 7: מציג את הסיסמה החדשה בקונסול. עם זאת, אנו לא ממליצים על כך מסיבות אבטחה. שורה 6 מטפלת בשינוי הסיסמה להעדפת המשתמש ונחשבת ככללית השיטה הטובה ביותר לפרוצדורה זו.
שפרו את בטיחות הפעילות הפעילות הפעילות & אזור Azure AD שלכם
נסו אותנו בחינם, גישה לכל התכונות. – 200+ תבניות דוח AD זמינות. כנסו לעצב בקלות את הדוחות האישיים שלכם ב-AD.
גם קראו נסו דוחות סיסמאות Office 365
כתיבת כלי האיפוס סיסמאות Active Directory
עכשיו יש לנו תסריט שאנו משתמשים בו כדי לאפס סיסמא של משתמש. השלב הבא הוא להפוך את התסריט שלנו לכלי. כלי משומשני בחזרה מבצע אותם פעולות במינימום פעולות משתמש ידני.
כאשר בונים כלי, מוביל חשוב הוא שמי שרץ את הכלי לא צריך לערוך את הקוד בכל פעם. אבל למרבה הצער, הקוד שלנו עדיין דורש מהמשתמש לערוך את $username המשתנה.
במקום לאפשר למשתמשים של הכלי שלנו לשנות את הערכים באופן ידני, למה לא לכתוב תסריט שמקבל פרמטרים? כדי לעשות זאת, קח את הצעדים הבאים:
- פתח את Windows PowerShell ISE.
- צור קובץ PowerShell חדש ושמור את הקובץ תחת השם Reset-ADPassword.ps1. שמור את התסריט במיקום המועדף עלינו. מאמר זה שומר את הקובץ בתיקיה C:\PS\scripts .
- אנא העתק והדבק את הקוד למטה לתוך עורך התסריט שלנו לפני שאנו מצליחים את התסריט.
param (
$username
)
if (-not($username)) {
Write-Host "Username not found. Exiting script"
return $null
}
try {
$null = Get-ADUser -Identity $username -ErrorAction Stop
} catch {
Write-Host $_.Exception.Message
return $null
}
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
try {
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
Set-ADuser -Identity $username -ChangePasswordAtLogon $true
[pscustomobject]@{
Username = $username
NewPassword = $randomPassword
}
} catch {
Write-Host "There was an error performing the password reset. Please find additional information below."
Write-host $_.Exception.Message
return $null
}
- שורה 1: מוסיפה פרמטר בשם שם משתמש.
- שורה 5: בודקת אם המשתמש סיפק ערך שם משתמש. ה אם בלוק גם מראה הודעה וצורך בתכנית אם התנאי מתקיים.
- שורה 10: בודק אם השם משתמש זה חוקי או לא.
- שורה 12: מאשר אם השם משתמש אינו חוקי. מציג הודעה ועוצר את ביצוע התכנית.
- שורה 17: מייצר סיסמה אקראית שהיא 14 תווים ארוכים עם חמישה תווים לא אלפביתיים.
- שורה 18: המרת סיסמה בטקסט פשוט לאובייקט סיסמה בטוח.
- שורה 20: מאפשר את האפסה של הסיסמה.
- שורה 22: מאכסן את חשבון AD לשנות את הסיסמה בפעם הבאה של הכניסה.
- שורה 24: מציג את הסיסמה החדשה בתיבת הממשק. עם זאת, אנו לא ממליצים על כך למען אבטחה מטרות. שורה 6 יטפל בשינוי הסיסמה לרצונו של המשתמש ונחשבת לנוהל הטוב ביותר עבור הניתוח זה.
- שורה 28: מציג הודעת שגיאה אם האפסה נכשלה.
דוגמאות לביצועים של כלי האיפוס סיסמאות AD
A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.
איפוס הסיסמה של משתמש יחיד
נניח שעלינו לאפס את הסיסמה של משתמש אחד. קודם כל, הפעל את כלי האיפוס סיסמאות של Active Directory וציין איזה שם משתמש להתמקד בו. לדוגמה, כדי לאפס את הסיסמה של משתמש יחיד, הפעל את התסריט כפי שמוצג להלן:
.\Reset-ADPassword.ps1 -username USERNAME
כתוצאה מכך, התסריט מאפס את הסיסמה ומציג אותה על המסך. לדוגמה, הפלט הזה שולח את הסיסמה החדשה למשתמש המושפע:
איפוס הסיסמה של משתמשים מרובים
למרבה המזל, אנו יכולים לחזור על רשימה ב-PowerShell באמצעות מערכים ולולאת foreach. בנוסף, פקודת ForEach-Object ב-PowerShell מאפשרת לנו לעבד פריטים מרובים בו זמנית. פקודה זו מאפשרת לנו להעביר פריטים שונים דרך הזרם.
כדי לאפס את הסיסמאות של משתמשים מרובים, צור מערך עם שניים או יותר שמות משתמשים. הפריטים במערך מועברים אז דרך הזרם, שם פקודת ForEach-Object ב-PowerShell מבצעת את כלי האיפוס סיסמאות על כל שם משתמש.
@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
עם זאת, אנו משפרים זאת אם אנו מתקן יותר משני חשבונות משתמשים. זכרו את הקובץ הטקסטי שיצרנו קודם? אנו מנצלים אותו בסעיף זה.
עלינו לקרוא את קובץ הטקסט המכיל את חשבונות המשתמשים ולהפעיל את כלי איפוס הסיסמאות של AD על כל אחד מהם. כדי לעשות זאת, נשתמש בפקודת Get-Content כדי לייבא את תוכן קובץ הטקסט ל-PowerShell. לאחר מכן, התסריט שולח את הנתונים לצינור ומפעיל את סקריפט איפוס הסיסמה של AD על כל חשבון.
Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
לאחר ביצוע הקטע למעלה, נהיה מאפסים סיסמאות משתמשים מרובים ברצף אחד.
תודה על קריאת מאמר בלוג מצא משתמשי Active Directory עם סיסמאות שפגו תוקף (PowerShell). נסיים כאן.
מצא משתמשי AD עם סיסמאות שפגו תוקף PowerShell סיכום
בסוף, מציאת משתמשים ב-Active Directory משתמשים עם סיסמאות פגות באמצעות PowerShell היא תהליך פשוט שחוסך לנו זמן ומאמץ. באמצעות פקודת Get-ADUser וסינון לפי משתמשים עם סיסמאות פגות, תוכלו במהירות לזהות ולהתמקד במשתמשים ספציפיים לאיפוס סיסמא או חובה פגיעה הודעות. פקודה זו שימושית עבור ארגונים עם מספר גדול של משתמשים, מאחר שהיא מאפשרת לכם לנהל באופן יזום את חובת הסיסמאות ולהפחית את הסיכון של אבטחה הפריצה.
תראה את סעיף ה-Active Directory שלנו ב-בלוג שלנו כאן כמו גם סעיף PowerShell כאן כדי לקרוא עוד תוכן.
Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/