Как узнать срок окончания пароля у пользователя Active Directory
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik. В прошлой статье я вам показал как вы можете улучшить свою сетевую безопасность в Active Directory путем отключения протокола LLNMR, который просто в домене не нужен. В сегодняшней публикации я продолжу тематику активного каталога и хочу вас научить находить несколькими методами дату, когда закончиться срок окончания пароля у пользователя Active Directory. Данные методы вы можете использовать для автоматизации уведомлений, просто выявлении проблем с учетными записями и так далее. Думаю, что данный материал окажется вам полезным.
Для чего можете потребоваться дата истечения пароля
В Active Directory должны действовать парольные политики, которые определяют с точки зрения безопасности те временные периоды которые выделены под валидность пароля и не только. Очень плохо, когда у рядовых пользователей в свойствах учетной записи установлен параметр "Password Never Expires", так как это потенциальная жертва на взлом.
Поэтому пользователи должны периодически производить смену пароля, а вы как системный администратор должны сделать все, чтобы им это было доступно. Если пользователь упустит момент смены пароля, то есть высокая доля вероятности, что он поймает ситуацию:
- Он не сможет войти удаленно в корпоративную сеть, вы, конечно, можете выкрутиться подняв у себя на ADFS возможность смены пароля, но не у всех это есть
- У сотрудника стухнет пароль во время работы, ему его сменят, но за счет того, что у него могут быть активные RDP сессии или сохраненные учетные записи в различных сервисах, его учетная запись начнет постоянно блокироваться и он будет обращаться в техническую поддержку, чтобы они нашли причины блокировки
- Пароль может протухнуть в самый неподходящий момент, когда будет важная презентация и нужно подключиться к WiFi, и так далее
Понимая как вы можете отслеживать время истечения пароля пользователя в Active Directory, есть возможность заранее придумать механизмы оповещения и наладить процесс его своевременной смены.
Как определить срок действия пароля пользователя Active Directory средствами PowerShell
PowerShell это самый правильный и быстрый способ добиться поставленной цели, существуют разные подходы о которых мы и поговорим.
- 1️⃣Атрибут msDS-UserPasswordExpiryTimeComputed - используется в Active Directory для хранения времени истечения пароля пользователя. Этот атрибут вычисляется автоматически системой и представляет собой время, когда пароль пользователя должен истечь, основываясь на политике паролей, установленной для домена. Зная это мы можем легко воспользоваться командлетом Get-ADUser, чтобы получить нужную информацию.
# Получите информацию о пользователе
$user = Get-ADUser -Identity "имя_пользователя" -Properties msDS-UserPasswordExpiryTimeComputed# Преобразуйте значение в дату и время
$passwordExpiryDate = [DateTime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed")Write-Output "Срок окончания пароля: $passwordExpiryDate"
В моем примере есть замечательный пользователь Геннадий Барбоскин, у которого мы и посмотрим параметр msDS-UserPasswordExpiryTimeComputed отвечающий за срок действия пароля. В результате выполнения скрипта PowerShell в ISE оболочке, я вижу, что пароль еще будет валидным до 29 декабря.
Если нужно сделать массовую выборку из списка пользователей, который у вас в текстовом файле, то скрипт будет такой:
# Укажите путь к файлу с именами пользователей
$filePath = "C:\temp\users.txt"# Проверьте, существует ли файл
if (Test-Path $filePath) {
# Читаете имена пользователей из файла
$usernames = Get-Content -Path $filePathforeach ($username in $usernames) {
# Получите информацию о пользователе
$user = Get-ADUser -Identity $username -Properties msDS-UserPasswordExpiryTimeComputedif ($user) {
# Преобразуйте значение в дату и время
$passwordExpiryDate = [DateTime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed")
Write-Output "Пользователь: $username, Срок окончания пароля: $passwordExpiryDate"
} else {
Write-Output "Пользователь: $username не найден."
}
}
} else {
Write-Output "Файл не найден: $filePath"
}
Если нужно вывести срок действия пароля для всех пользователей нужной OU, можно воспользоваться такой конструкцией:
# Укажите DN (Distinguished Name) вашего OU
$ouDN = "CN=Users,DC=root,DC=pyatilistnik,DC=org"# Получите всех пользователей из указанного OU
$users = Get-ADUser -Filter * -SearchBase $ouDN -Properties msDS-UserPasswordExpiryTimeComputed# Переберите каждого пользователя и получите срок окончания пароля
foreach ($user in $users) {
# Преобразуйте значение в дату и время
$passwordExpiryDate = [DateTime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed")Write-Output "Пользователь: $($user.SamAccountName), Срок окончания пароля: $passwordExpiryDate"
}
Если выскочит ошибка Exception calling "FromFileTime" with "1" argument(s): "Not a valid Win32 FileTime, то это значит, что у определенной учетной записи стоит галка "Password Never Expires"
Чтобы изменить скрипт так, чтобы он искал всех пользователей, у которых в имени есть "bar", вам нужно использовать команду с фильтром.
# Получите информацию о пользователях, у которых в имени есть "bar"
$users = Get-ADUser -Filter { SamAccountName -like "*bar*" } -Properties msDS-UserPasswordExpiryTimeComputed# Переберите найденных пользователей и выведите срок окончания пароля
foreach ($user in $users) {
# Преобразуйте значение в дату и время
$passwordExpiryDate = [DateTime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed")Write-Output "Пользователь: $($user.Name) - Срок окончания пароля: $passwordExpiryDate"
}
- 2️⃣Второй метод это вычислить несколько других атрибутов: PasswordLastSet и ADDefaultDomainPasswordPolicy.
- PasswordLastSet - Этот атрибут хранит дату и время последнего изменения пароля учетной записи пользователя. Он используется для определения того, когда пользователь в последний раз обновлял свой пароль.
- ADDefaultDomainPasswordPolicy - Этот атрибут представляет собой политику паролей по умолчанию для домена Active Directory. Он определяет параметры, такие как минимальная длина пароля, сложность пароля, максимальный и минимальный срок действия пароля, а также количество неудачных попыток входа перед блокировкой учетной записи. Эта политика применяется ко всем пользователям в домене, если для них не установлены индивидуальные настройки.
Логика тут будет простая мы поймем максимальное значение пароля, дату когда он был установлен и когда истекает, все это поможет посчитать дату действия пароля.
# Получите информацию о пользователе
$user = Get-ADUser -Identity "имя_пользователя" -Properties "PasswordLastSet", "PasswordNeverExpires"# Получите политику паролей домена
$passwordPolicy = Get-ADDefaultDomainPasswordPolicy# Рассчитайте срок окончания пароля
if ($user.PasswordNeverExpires) {
Write-Output "Пароль никогда не истекает."
} else {
$maxPasswordAge = $passwordPolicy.MaxPasswordAge
$passwordExpiryDate = $user.PasswordLastSet + $maxPasswordAge
Write-Output "Срок окончания пароля: $passwordExpiryDate"
}
Как вычислить срок действия пароля пользователя Active Directory через командную строку
Есть очень старая универсальная утилита net user, получить с ее помощью срок действия пароля можно в одну строку. Запустите командную строку от имени администратора и введите:
net user barboskin.g /domain
В выводе найдите строку "Password expires".
Как найти срок действия пароля с помощью оснасток Active Directory
Существую и графические методы найти нужную нам информацию. Запустите оснастку ADUC (Active Directory - Пользователи и компьютеры). Перейдите в меню "View - Advanced Features". чтобы активировать дополнительные вкладки свойств объектов.
Открываем свойства нужной учетной записи и переходим на вкладку "Attribute Editor", в фильтре ставим галочку "Show only attributes that have values".
Далее после фильтрации вам необходимо найти атрибут pwdLastSet, в нем вы можете увидеть дату последней смены пароля. ЕЕ нужно запомнить.
Читайте так же - Как создать RAID на Dell PERC H330 Adapter
Далее откройте редактор групповой политики и посмотрите в GPO "Default Domain Policy" настройку "Maximum password age". В моем случае, это 60 дней. Значит прибавляем к pwdLastSet 60, получаем дату, когда подойдет срок действия пароля.
Еще есть утилита ADSIEdit.msc, в которой вы можете подключиться к "Default naming context", найти в нужном контейнере учетную запись, открыть ее свойства и найти атрибут pwdLastSet. Проделав описанные выше действия.
Вот такие интересные методы, понять по сроку действия пароля пользователя. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.