Active Directory 암호 사용 만료에 따라 암호 변경이 필요할 때 이전 암호를 동일하게 사용하고 싶을 때, (이전 암호 사용을 몇개 이상 기억하는 GPO 정책이 있을 때)

사내 IT를 지원하다보면 다양한 요청을 받게 됩니다.

그중에 가장 자주 또는 빈번하게 받게되는게 암호 변경과 관련된 요청 입니다.

어느정도 규모가 있는 기업에서는 주기적으로 (90일 단위 / 180일 단위 / 360일 단위 등등) 보안을 위해 암호를 변경하도록 권장 or 강제 or 정책 or 시스템으로 강제하고 있습니다. 하지만 새로운 암호에 대한 기억에 대한 수고가 싫어 보통은 익숙한 암호를 사용하기를 희망하고 계속 사용하기를 희망 합니다. 아래 소개하는 방법은 AD (Active Directory) 환경에서 적용할 수 있는 꼼수이며, 사내에 보안팀이 있다면 좋아하지 않을 방법이기 때문에 적용하더라도 조용히 적용하시는게 좋지 않을까 라는 생각이 드네요.

[UI에서 적용하는 방법]

-. 적용하고자 하는 계정의 속성 정보로 들어간다.

Screenshot 2019 11 28 AM 10 03 44

-. 속성 정보 중 “특성 편집기” 메뉴로 들어간다.

Screenshot 2019 11 28 AM 10 03 53

-. 기본적으로 특성 편집기 옵션은 값이 없는 항목도 모두 보여주게 되어 있어 원하는 항목을 찾기 힘들어 아래와 같이 값이 존재하는 항목만 보이도록 필터 정보를 수정 합니다.

Screenshot 2019 11 28 AM 10 04 19

-. 값이 존재하는 속성값이 생각보다 작기 때문에 아래와 같이 눈으로 구분 가능한 수량만큼 보입니다. 해당 항목 중 “PwdLastSet” 항목을 찾습니다.

Screenshot 2019 11 28 AM 10 04 49

-. 값을 입력할 수 있는 창에 아래와 같이 순차적으로 적용 해주시면 됩니다.

  1) “0” 값을 입력하고 확인을 눌러주세요

Screenshot 2019 11 28 AM 10 04 58

  2) “-1” 값을 입력하고 확인을 눌러주세요

Screenshot 2019 11 28 AM 10 05 06

해당 계정의 Password Expired Data 정보를 확인해보시면 변경 일자 기준으로 날짜가 늘어나 있음을 확인 할 수 있습니다. 하지만 CLI를 사랑하는 분들은 이렇게 메뉴를 찾아들어가 확인하는 방법도 번거로워할 수 있어 아래에 Powersehll로 간단하게 수정할 수 있도록 샘플 코드를 첨부 합니다.

(Get-ADUser -Identity chitos -Properties msDS-UserPasswordExpiryTimeComputed).’msDS-UserPasswordExpiryTimeComputed’ |ForEach-Object -Process {[datetime]::FromFileTime($_)}
#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”)}} | 
 
#패스워드 만료일 변경은 0이나 1로 바꿨다가 다시 -1로 바꾸면 현재 날짜로 바뀐다. (https://serverfault.com/questions/627831/must-create-powershell-script-to-change-password-expiry-and-date-to-change-next)
 
$ADUserParams=@{ 
‘Searchbase’ = ‘CN=개똥이,OU=Users,OU=You domain name,DC=You domain name,DC=net’ 
‘Filter’ = ‘*’
‘Properties’ = ‘sAMAccountName’,’cn’,’sn’,’displayName’,’mail’,’description’,’UserPrincipalName’, ’employeeNumber’, ‘profilepath’
}
Get-ADUser @ADUserParams 
$ADUsers = Get-ADUser @ADUserParams 
ForEach ($ADUser in $ADUsers) { 
    $ADUser = Get-ADUser $ADUser -properties pwdlastset
    $ADUser.pwdlastset = 0 
    Set-ADUser -Instance $ADUser 
    $ADUser.pwdlastset = -1
    Set-ADUser -instance $ADUser 
}

Leave a Comment