Active Directory (AD)는 많은 조직에서 사용자 관리 및 인증 서비스를 위해 사용됩니다. AD 사용자 계정의 비밀번호 만료를 이해하는 것은 보안 유지에 중요합니다. PowerShell을 사용하면 이 작업을 자동화하여 관리를 더 쉽게 할 수 있습니다. 이 글은 PowerShell을 사용하여 AD 사용자 계정의 비밀번호 만료를 단계별로 확인하는 방법을 설명합니다.
비밀번호 만료 확인 명령어
Active Directory 사용자 계정의 비밀번호 만료를 확인하려면 PowerShell의 Get-ADUser cmdlet을 여러 속성과 결합하세요. 아래는 특정 사용자의 비밀번호 만료를 확인하기 위한 기본 명령어입니다.
# Check user's password expiration
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"}}}
이 명령어는 “PasswordLastSet” (비밀번호가 마지막으로 설정된 시간), 비밀번호가 만료되지 않도록 설정되었는지 “PasswordNeverExpires”, 그리고 비밀번호에 만료일이 있는 경우, 그 만료일을 계산하여 표시합니다.
주석
Get-ADUser
cmdlet은 AD에서 사용자 정보를 검색하는 데 사용됩니다.-Identity
매개변수는 대상 사용자 이름을 지정합니다.-Properties
매개변수를 사용하면 검색할 속성을 지정할 수 있습니다. 기본적으로 모든 속성이 검색되는 것은 아닙니다.- 원하는 정보를 표시하고 사용자 정의 속성을 추가하려면
Select-Object
cmdlet을 사용하세요.
스크립트 예제 1: 만료된 사용자 목록
모든 Active Directory 사용자 중에서 비밀번호가 만료된 사용자를 식별하고 목록화하는 스크립트는 조직의 보안 정책 준수를 확인하고 계정 관리 작업을 자동화하는 데 도움이 될 수 있습니다.
다음 PowerShell 스크립트는 현재 날짜와 비교하여 비밀번호가 만료된 사용자를 감지하고 이러한 사용자의 목록을 출력합니다.
# List expired users
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)}}
주석
Import-Module ActiveDirectory
는 Active Directory 관련 cmdlet을 사용할 수 있게 합니다. AD 관련 스크립트를 실행하기 전에 이 줄은 항상 필요합니다.Get-Date
cmdlet은 현재 날짜를 가져오는 데 사용되며, 비밀번호 만료를 결정하는 기준으로 사용됩니다.Get-ADUser -Filter *
는 Active Directory의 모든 사용자를 대상으로 합니다.Where-Object
cmdlet은 비밀번호가 영구적으로 유효하지 않고 도메인의 비밀번호 정책에 의해 정의된 최대 유효 기간을 초과한 날짜가 오늘 날짜 이전인 사용자를 필터링합니다.- 필요한 정보만 선택하고 사용자 정의 속성
PasswordExpires
를 추가하여 비밀번호 만료 날짜를 계산하고 표시하려면Select-Object
cmdlet을 사용하세요.
이 스크립트는 만료된 사용자를 관리하기 쉽게 하여 보안을 유지하는 데 기여합니다.
스크립트 예제 2: 만료 전 자동 알림 이메일 발송
조직 내 사용자에게 비밀번호가 곧 만료될 예정임을 알리는 것은 사용자 경험을 개선하고 보안을 강화할 수 있습니다. 다음 PowerShell 스크립트는 특정 일수 내에 비밀번호가 만료될 사용자를 감지하고 이러한 사용자에게 자동으로 알림 이메일을 발송합니다.
# Sending notification emails before expiration
Import-Module ActiveDirectory
$notificationPeriod = 14 # Number of days before sending the notification
$smtpServer = "smtp.example.com" # SMTP server address
$fromEmail = "admin@example.com" # Sender's email address
$subject = "Your password will expire soon" # Email subject
$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 = "Dear $($user.Name),\n\nYour password will expire in less than $notificationPeriod days. Please
change your password as soon as possible.\n\nBest regards,\nYour IT Team"
Send-MailMessage -SmtpServer $smtpServer -From $fromEmail -To $toEmail -Subject $subject -Body $body
}
주석
- 이 스크립트는 사용자에게 알림을 시작할 때를 정의하는
$notificationPeriod
변수를 사용합니다. 이 예제에서는 14일 전으로 설정되어 있습니다. Get-ADUser
cmdlet은EmailAddress
,PasswordLastSet
,PasswordNeverExpires
속성을 포함한 사용자 정보를 검색합니다.Where-Object
cmdlet은 비밀번호 만료가 다가오는 사용자를 필터링합니다.foreach
루프는Send-MailMessage
cmdlet을 사용하여 관련 사용자 각각에게 이메일을 보내는 데 사용됩니다.
이 스크립트를 정기적으로 실행함으로써 사용자는 비밀번호가 만료되기 전에 적절한 조치를 취할 수 있으며, 이는 계정 보안을 유지하고 지원 티켓 수를 줄이는 데 도움이 됩니다.
스크립트 예제 3: 만료된 사용자 계정 자동 비활성화
보안 조치로서 비밀번호가 만료된 사용자 계정을 자동으로 비활성화하는 것은 무단 접근의 위험을 줄일 수 있습니다. 다음 PowerShell 스크립트는 비밀번호가 만료된 사용자 계정을 감지하고 이러한 계정을 자동으로 비활성화합니다.
# Automatically disabling expired users
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) {
# Disabling user account
Disable-ADAccount -Identity $user.SamAccountName
Write-Output "Disabled account: $($user.Name)"
}
주석
Import-Module ActiveDirectory
는 Active Directory 모듈을 가져와 AD 관련 cmdlet을 사용할 수 있게 합니다.Get-ADUser
cmdlet은 모든 사용자 정보를 검색하고Where-Object
를 사용하여 비밀번호가 만료된 사용자를 필터링합니다.foreach
루프 내에서,Disable-ADAccount
cmdlet은 비밀번호가 만료된 사용자의 계정을 비활성화하는 데 사용됩니다.- 사용자 계정이 비활성화될 때 콘솔에 출력됩니다.
이 스크립트는 큰 조직에서 계정 관리를 특히 유용하게 하며, 보안 정책 준수를 자동화하고 관리 작업을 줄입니다. 정기적으로 스크립트를 실행하면 비밀번호가 만료된 계정이 비활성화되어 시스템 보안이 강화됩니다.
보안 고려사항
비밀번호 정책 및 사용자 계정 관리를 자동화할 때는 여러 보안 고려사항을 염두에 두어야 합니다. 이러한 스크립트를 구현하고 운영할 때 다음 사항에 주의하세요.
- 최소 권한 원칙 적용: 스크립트를 실행하는 계정은 필요한 최소한의 권한을 부여받아야 합니다. 예를 들어, 사용자 비밀번호 정보를 읽기만 하는 경우에는 읽기 전용 권한을, 계정을 비활성화하는 작업에는 필요한 권한만 부여해야 합니다.
- 스크립트 보안 저장: 스크립트에는 잠재적으로 민감한 정보나 시스템을 변경할 수 있는 명령이 포함될 수 있으므로, 무단 접근으로부터 보호하기 위해 안전하게 저장해야 합니다.
- 로그 및 모니터링: 스크립트에 의해 이루어진 변경 사항은 적절히 로그되고 모니터링되어야 합니다. 이를 통해 예기치 않은 동작이나 보안 사고에 신속하게 대응할 수 있습니다.
- 알림 메커니즘 유지: 비밀번호 만료가 임박했음을 알리거나 계정을 자동으로 비활성화하는 스크립트의 경우, 조치가 취해질 때 관리자나 사용자에게 알릴 수 있는 메커니즘이 있어야 합니다.
- 정기적 검토 및 업데이트: 조직 정책의 변경이나 Active Directory 환경의 업데이트에 따라 스크립트는 정기적으로 검토하고 필요에 따라 업데이트해야 합니다.
이러한 보안 고려사항을 준수함으로써 이 스크립트에 의해 촉진되는 자동화된 과정은 조직의 보안 표준과 일치하면서 효율적으로 운영될 수 있습니다.
결론
Active Directory 사용자 계정의 비밀번호 만료를 확인하고 관리하기 위해 PowerShell을 사용하는 것은 조직 보안을 유지하는 데 필수적입니다. 이 글에서 소개된 스크립트를 활용함으로써, AD 사용자 계정의 비밀번호 만료 모니터링, 만료 전 알림, 그리고 보안 정책에 따른 자동 계정 비활성화를 효과적으로 달성할 수 있습니다.
이러한 자동화된 과정이 조직의 보안 정책을 지원하고 강화하는 것이 중요합니다. 그러나, 자동화는 최소 권한 원칙 적용, 스크립트의 안전한 저장, 적절한 로깅 및 모니터링, 알림 메커니즘 유지, 정기적인 검토 및 업데이트 등 다른 보안 고려사항과 함께 수행되어야 합니다.
최종적으로, 이러한 최선의 관행과 자동화 스크립트를 적절히 결합함으로써, Active Directory 환경 관리가 더 효율적이고 안전해질 수 있습니다.