Computer >> 컴퓨터 >  >> 체계 >> Windows Server

AD 사용자 암호가 만료될 때 암호 변경 알림

이 문서에서는 PowerShell을 사용하여 Active Directory 사용자 계정의 암호가 만료되는 시기를 찾는 방법, 만료되지 않도록 암호를 설정하는 방법(PasswordNeverExpires = True ), 비밀번호 변경을 사전에 이용자에게 통지합니다.

도메인의 사용자 암호가 만료된 경우 계정은 잠기지 않지만 사용자가 만료된 암호를 새 암호로 변경할 때까지 도메인 리소스에 액세스하는 데 사용할 수 없습니다. 대부분의 경우 원격 사용자는 표준 도구를 사용하여 비밀번호를 변경할 수 없기 때문에 만료된 비밀번호로 인해 문제가 발생합니다.

도메인의 사용자 비밀번호 만료 시간 제한, 변경 빈도(최대 비밀번호 사용 기간) 및 복잡성 요구 사항은 AD 도메인 비밀번호 정책에서 설정됩니다. 이러한 매개변수는 기본 도메인 정책 또는 세분화된 암호 정책에서 설정됩니다.

다음 PowerShell 명령을 사용하여 도메인의 현재 암호 만료 정책 설정을 가져올 수 있습니다.

Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge

이 예에서 도메인의 최대 사용자 비밀번호 사용 기간은 60일입니다.

AD 사용자 암호가 만료될 때 암호 변경 알림

Active Directory에서 사용자 비밀번호 만료 날짜를 가져오는 방법

Net user를 사용하여 명령 프롬프트에서 암호 사용 기간과 마지막으로 변경된 날짜를 볼 수 있습니다. 명령:

net user jsmith /domain

AD 사용자 암호가 만료될 때 암호 변경 알림

다음 행에서 필요한 정보를 찾을 수 있습니다.

  • 암호 마지막 설정 — 2020년 9월 9일 오전 9시 23분 59초
  • 비밀번호 만료 — 2021년 1월 7일 오전 9:23:59
  • 암호 변경 가능 — 2020년 9월 10일 오전 9시 23분 59초
모든 사용자의 암호 만료 날짜를 가져올 수 있습니다. 이를 위해서는 사용자 계정이 있는 AD 컨테이너에 대한 관리자 권한이나 위임된 권한이 필요하지 않습니다.

AD 계정의 설정을 보기 위해 다른 AD 개체 속성의 값을 가져올 수 있는 Active Directory 모듈용 특수 PowerShell을 사용합니다(Windows 10 및 Windows Server 2012 R2/2016에서 AD PowerShell 모듈을 설치하고 가져오는 방법 참조). ).

Get-ADUser cmdlet을 사용하면 사용자의 암호가 마지막으로 변경된 날짜를 보고 PasswordNeverExpires 옵션이 설정되었는지 확인할 수 있습니다.

get-aduser jsmith -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired |ft Name, PasswordLastSet, PasswordNeverExpires,PasswordExpired

<강한> AD 사용자 암호가 만료될 때 암호 변경 알림

  • PasswordLastSet 마지막 비밀번호 변경 날짜 및 시간입니다.
  • 비밀번호가 만료되지 않음 반환 사용자 비밀번호가 만료되지 않는 경우
  • 비밀번호 만료됨 – 사용자 비밀번호가 만료된 경우 True를 반환합니다. , 비밀번호가 만료되지 않은 경우 False를 반환합니다. .
그래픽 MMC 스냅인 Active Directory 사용자 및 컴퓨터(dsa.msc)에서 마지막 암호 변경 시간을 확인할 수 있습니다. ). 이를 수행하려면 사용자 속성을 열고 속성 편집기 탭으로 이동하여 pwdLastSet 값을 확인합니다. 속성.

그러나 보시다시피 MMC 스냅인은 암호가 변경된 시간만 표시합니다. 비밀번호가 언제 만료되는지 명확하지 않습니다.

AD 사용자 암호가 만료될 때 암호 변경 알림

마지막으로 변경된 시간 대신 비밀번호 만료 날짜를 얻으려면 특수 구성된 AD 속성을 사용하세요. msDS-UserPasswordExpiryTimeComputed . msDS-UserPasswordExpiryTimeComputed 값은 마지막 암호 변경 날짜와 도메인 암호 정책에 따라 자동으로 계산됩니다.

UserPasswordExpiryTimeComputed 매개변수는 날짜를 타임스탬프 형식으로 반환하므로 FromFileTime을 사용합니다. 사람이 읽을 수 있는 값으로 변환하는 함수:

Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}

따라서 사용자 암호 만료 날짜를 얻었습니다.

AD 사용자 암호가 만료될 때 암호 변경 알림

msDS-UserPasswordExpiryTimeComputed의 값이 0이면 pwdLastSet이 비어 있거나(null) 0(암호가 변경되지 않음)과 같습니다.

AD의 특정 컨테이너(OU)에서 모든 사용자의 암호 만료 날짜를 가져오려면 다음 PowerShell 스크립트를 사용할 수 있습니다.

$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime ($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet

활성 사용자 목록, 마지막 암호 변경 만료 날짜 및 시간이 포함된 테이블이 생성됩니다.

AD 사용자 암호가 만료될 때 암호 변경 알림

암호가 만료된 사용자 목록만 표시할 수 있습니다.

$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
foreach($user in $Users){
if( [datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date)) {
$user.Name
}
}

AD 사용자 비밀번호가 만료되지 않도록 설정하는 방법

계정에 영구적인 비밀번호를 설정하려면 비밀번호가 만료되지 않음을 확인하세요. AD의 사용자 속성에서 옵션(UserAccoutControl 속성의 비트 값 중 하나임).

AD 사용자 암호가 만료될 때 암호 변경 알림

또는 사용자 특성을 설정하여 PowerShell에서 이 옵션을 활성화할 수 있습니다.

Get-ADUser jsmith | Set-ADUser -PasswordNeverExpires:$True

텍스트 파일의 목록에서 여러 사용자에 대해 암호가 만료되지 않음 옵션을 한 번에 설정할 수 있습니다.

$users=Get-Content "C:\PS\users_password_never_expire.txt"
Foreach ($user in $users) {
Set-ADUser $user -PasswordNeverExpires:$True
}

비활성화된 일반 비밀번호 변경 옵션이 있는 모든 사용자 목록을 표시할 수 있습니다.

Get-ADUser -filter * -properties Name, PasswordNeverExpires | where {$_.passwordNeverExpires -eq "true" } |  Select-Object DistinguishedName,Name,Enabled |ft

Active Directory 비밀번호 만료 알림 정책

Windows에는 사용자에게 암호를 변경해야 함을 알릴 수 있는 특별한 그룹 정책 매개변수가 있습니다.

정책 이름은 대화형 로그온:만료되기 전에 사용자에게 암호를 변경하라는 메시지 표시입니다. GPO 섹션 아래에 있습니다. 컴퓨터 구성 -> 정책 -> Windows 설정 -> 보안 설정 -> 로컬 정책 -> 보안 옵션

기본적으로 정책은 로컬 Windows 설정에서 활성화되며 알림은 암호가 만료되기 5일 전에 표시되기 시작합니다. 사용자에게 비밀번호 변경 알림이 표시되는 일 수를 변경할 수 있습니다.

AD 사용자 암호가 만료될 때 암호 변경 알림

이 정책을 활성화한 후 사용자의 비밀번호가 만료되면 사용자가 로그인할 때마다 비밀번호 변경 알림이 트레이에 표시됩니다.

Consider changing your password
Your password will expire in xx days.

AD 사용자 암호가 만료될 때 암호 변경 알림

암호가 5일 이내에 만료되는 경우 암호를 변경하라는 메시지가 포함된 대화 상자를 자동으로 표시하는 간단한 PowerShell 스크립트를 사용할 수도 있습니다.

Add-Type -AssemblyName PresentationFramework
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt 5) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Your password expires in "+ $timediff + " days!`nDo you want to change it now?","Important!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
'No' { }
}
}
}

사용자가 예를 클릭하면 Ctrl+Alt+Del을 누른 후 표시되는 Windows 보안 창이 나타납니다. 또는 Ctrl+Alt+End (RDP/RDS 연결의 경우).

AD 사용자 암호가 만료될 때 암호 변경 알림

스크립트는 AD 모듈용 PowerShell이 ​​사용자의 컴퓨터에 설치되어 있음을 의미합니다. RSAT가 설치되어 있지 않아도 사용할 수 있습니다. "RSAT를 설치하지 않고 AD 모듈 사용" 문서를 확인하십시오.

PS 스크립트의 자동 시작을 활성화하거나 GPO 로그온 스크립트로 실행합니다.

Powershell을 통한 비밀번호 만료 이메일 알림

사용자에게 이메일로 비밀번호 만료를 알리려면 다음 PowerShell 스크립트를 사용할 수 있습니다.

$Sender = "[email protected]"
$Subject = 'Important! Your password expires soon!'
$BodyTxt1 = 'Your password for'
$BodyTxt2 = 'expires in '
$BodyTxt3 = 'days. Remember to change your password in advance. If you have other questions, contact the HelpDesk.'
$smtpserver ="smtp.woshub.com"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}

스크립트는 암호가 만료될 모든 활성 도메인 사용자를 확인합니다. 비밀번호가 만료되기 7일 전에 사용자는 AD에 지정된 주소로 이메일을 받기 시작합니다. 이메일은 비밀번호가 변경되거나 만료될 때까지 전송됩니다.

관리자는 Set-ADAccountPassword cmdlet을 사용하여 사용자 암호를 강제로 변경할 수 있습니다.

도메인의 모든 컴퓨터/서버에서 이 PowerShell 스크립트를 정기적으로 실행합니다(작업 스케줄러를 사용하여 수행하는 것이 더 쉽습니다). 물론 SMTP 서버의 허용된 발신자 목록(인증 없이 이메일을 보낼 수 있음)에 이메일을 보내는 호스트의 IP 주소를 추가해야 합니다.