как узнать срок действия пароля в домене cmd
Когда истекает пароль пользователя в AD, оповещаем пользователей о необходимости сменить пароль
В этой статье мы покажем, как с помощью PowerShell узнать, когда истекает пароль учетной записи пользователя в Active Directory, установить бессрочный пароль для учетной записи (PasswordNeverExpires = True) и заблаговременно оповестить пользователей о необходимости сменить пароль.
Если срок действия пароля пользователя в домене истек, учетная запись не блокируется, но не может использоваться для доступа к доменным ресурсам до тех пор, пока пользователь не сменит свой истекший пароль на новый. Чаще всего проблемы с истекшими паролями возникает у удаленных пользователей, которые не могут сменить свой пароль стандартными средствами.
Текущие настройки политики срока действия паролей в домене можно получить с помощью команды PowerShell
В нашем примере максимальный срок действия пароля пользователя в домене – 60 дней.
Как узнать срок действия пароля пользователя в Active Directory?
Можно узнать срок действия пароля и дату его последней смены из командной строки с помощь команды Net user:
net user aaivanov /domain
Необходимые данные присутствуют в значениях:
Для получения параметров учетных записей в AD мы будем использовать специальный модуль PowerShell для Active Directory, который позволяет получить значения различных атрибутов объектов AD (см. как установить и импортировать модуль AD PowerShell в Windows 10 и Windows Server 2012 R2/2016).
С помощью командлета Get-AdUser можно получить время последней смены пароля пользователя и проверить, установлена ли опция бессрочного пароля (PasswordNeverExpires):
Но как вы видите, в оснастке указана только время смены пароля. Когда истекает срок действия пароля — непонятно.
Чтобы получить не время последней смены пароля, а дату окончания его срока действия, нужно использовать специальный constructed-атрибут msDS-UserPasswordExpiryTimeComputed. Значение атрибута msDS-UserPasswordExpiryTimeComputed автоматически вычисляется на основании времени последней смены пароля и парольной политики домена
Параметр UserPasswordExpiryTimeComputed возвращает время в формате TimeStamp и для преобразования его в человеко-понятный вид я использую функцию FromFileTime:
Таким образом мы получили время истечения срока действия пароля пользователя.
Чтобы получить срок действия паролей для всех пользователей их определенного контейнера (OU) AD, можно воспользоваться таким скриптом PowerShell:
В результате появилась табличка со списком активных пользователей, сроком действия и временем последней смены пароля.
Можно вывести только список пользователей, чей пароль уже истек:
Отключить срок действия пароля для учетной записи
Если вам нужно сделать срок действия пароля определенной учетной записи неограниченным, нужно включить опцию Password Never Expires в свойствах пользователя в AD (это одно из битовых значений атрибута UserAccountControl).
Либо вы можете включить эту опцию через PowerShell:
Можно установить флаг Password Never Expires сразу для нескольких пользователей, список которых содержится в текстовом файле:
Можно вывести список всех пользователей, для которых отключено требование регулярной смены пароля:
Политика оповещения об окончании срока действия пароля
В Windows есть отдельный параметр групповой политики, позволяющий оповещать пользователей о необходимости сменить пароль.
По умолчанию эту политика включена на уровне локальных настроек Windows и уведомления начинают появляться за 5 дней до истечения срока действия пароля. Вы можете изменить количество дней, в течении которых должно появляться уведомление о смене пароля.
После включения этой политики, если пароль пользователя истекает, то при входе в систему в трее будет появляться уведомление о необходимости сменить пароль.
Также вы можете использовать простой PowerShel скрипт, который автоматически вызывает диалоговое окно со предложением сменить пароль, если он истекает менее чем через 5 дней:
Если пользователь нажимает ДА, появляется диалоговое окно Windows Security, которое вы видите при нажатии Ctrl+Alt+Del или Ctrl+Alt+End (при RDP подключении).
Данный скрипт нужно поместить в автозагрузку или запускать как logon скрипт групповых политик.
PowerShell скрипт для email-уведомления об истечении срока действия пароля
Если вы хотите индивидуально рассылать пользователям письма о том, что срок действия их паролей скоро истечет, можно использовать такой PowerShell скрипт.
Скрипт проверяет всех активных пользователей домена с истекающими паролями. За 7 дней до истечения пароля пользователю начинают отправляться письма на email адрес, указанный в AD. Письма отправляются до тех пор, пока пароль не будет изменен или просрочен.
Данный PowerShell скрипт нужно запускать регулярно на любом компьютере/сервере домена (проще всего через Task Scheduler). Естественно, нужно на вашем SMTP сервере добавить IP адрес хоста, с которого рассылаются письма, в разрешенные отправители без аутентификации.
Настройка политики паролей пользователей в Active Directory
Для обеспечения высокого уровня безопасности учетных записей в домене Active Directory администратору необходимо настроить и внедрить доменную политику паролей. Политика паролей должна обеспечивать достаточную сложность, длину пароля, частоту смены пароля пользователей и сервисных учетных записей. Тем самым можно усложнить злоумышленнику возможность подбора или перехвата паролей пользователей.
Политика паролей в Default Domain Policy
По-умолчанию в домене AD настройка общих требований к паролям пользователей осуществляется с помощью групповых политик. Политика паролей учетных записей домена настраивается в политике Default Domain Policy. Эта политика прилинкована к корню домена и обязательно должна применяться к контролеру домена с FSMO ролью PDC эмулятор.
Вы можете изменить настройки политики паролей из консоли управления GPO или с помощью PowerShell командлета Set-ADDefaultDomainPasswordPolicy:
Основные настройки политики паролей
Рассмотрим все доступные для настройки параметры управления паролями пользователями. Всего есть шесть параметров политики паролей:
Если пользователь пытается сменить пароль, которые не соответствует политике паролей в домене, у него появится ошибка:
Кроме того, нужно отдельно выделить настройки в разделе GPO: Политика блокировки учетной записи (Account Lockout Password):
Настройки парольных политик домена Active Directory по-умолчанию перечислены в таблице:
Политика | Значение по-умолчанию |
Enforce password history | 24 пароля |
Maximum password age | 42 дня |
Minimum password age | 1 день |
Minimum password length | 7 |
Password must meet complexity requirements | Включено |
Store passwords using reversible encryption | Отключено |
Account lockout duration | Не определено |
Account lockout threshold | 0 |
Reset account lockout counter after | Не определено |
В Security Compliance Toolkit Microsoft рекомендует использовать следующие настройки парольных политик:
Просмотр текущей парольной политики в домене
Вы можете посмотреть текущие настройки политики паролей в Default Domain Policy в консоли gpmc.msc (вкладка Settings).
Также можно вывести информацию о политике паролей с помощью PowerShell (на компьютере должен быть установлен модуль AD PowerShell):
Или можно проверить текущие настройки политики паролей AD на любом компьютере домена с помощью стандартной утилиты gpresult.
Несколько парольных политик в домене Active Directory
За управление доменной парольной политики отвечает контроллер домена, владелец FSMO роли PDC Emulator. Политика применяется к компьютерам домена, а не пользователям. Для редактирования настроек Default Domain Policy необходимы права администратора домена.
В домене может быть только одна политика паролей, которая применяется на корень домена и действует на всех пользователей без исключения (есть, конечно, нюансы, но о них ниже). Даже если вы создадите новую GPO с другими парольными настройками и примените ее к OU с параметрами Enforced и Block Inheritance, она не будет применяться к пользователям.
До версии Active Directory в Windows Server 2008 можно было настраивать только одну политику паролей для домена. В новых версиях AD вы можете создать отдельные политики паролей для различных групп пользователей с помощью гранулированных политик паролей Fine-Grained Password Policies (FGPP). Гранулированные политики паролей позволяют создавать и применять разные объекты параметров паролей (Password Settings Object — PSO). Например, вы можете создать PSO повышенной длиной или сложностью пароля для учетных записей доменных администраторов (см. статью о защите административных учетных записей в AD), или наоборот упростить (отключить) пароль для каких-то учетных записей.
Уведомления об истечении срока действия пароля в Active Directory средствами PowerShell
Предыстория
Началась вся история с того, что подошло время очередного IT аудита. Пришли серьезные дяденьки из Price Waterhouse Coopers, дали нам массу указаний и пару скриптов, которые надо было запустить на контроллере домена чтобы потом выслать им логи. После ознакомления с текстами скриптов (а мало-ли что там, безопасность превыше всего) логи были им предоставлены. И тут началось.
Требования PWC в большинстве случаев касались политик безопасности. Одно из них было — ввести password complexity policy и pasword lifetime. Сделать это, естественно, было довольно легко, но вскоре мы столкнулись с вытекающей проблемой: Windows не уведомляет пользователя об истечении срока действия его пароля если подключение осуществляется через VPN из внешней сети. Проблема оказалась довольно серьезной потому, что просто обновить пароль и разблокировать аккаунт такого пользователя было уже недостаточно. Нужно было чтобы ноутбук оказался в родной, офисной сети. С учетом того что некоторые пользователи «живут» в вечных командировках — проблема оказалась очень серьезной. Вручную отслеживать их — та еще головная боль, да и не по админски как-то. Тут и возникла мысль организовать рассылку автоматических уведомлений. После непродолжительного времени, потраченного на поиски, был найден неплохой скрипт, который отдаленно пытался выполнять нужные действия. Мне предстояло его доработать.
Так как это был мой первый опыт написания скрипта под PowerShell — времени было потрачено немало (почти полный рабочий день).
Скрипт
И вот что у меня получилось:
Команда запуска
Оба файла у меня лежат на почтовом сервере. Вы можете попробовать свой вариант.
Создание графика выполнения
На вкладке General жмем кнопку «Change user» выбираем пользователя, от имени которого всё это будет работать. У пользователя должны быть права на считывание параметров, необходимых для скрипта из AD. Ставим «Run whether user logged on or not» (запускать независимо от того, залогинен пользователь или нет). При сохранении задачи система попросит вас ввести пароль пользователя.
Далее вкладка Triggers. Тут всё просто — настраиваете время запуска как вам нужно.
Уведомления посылаются за 15, 7 и 3 и менее дней.
ВНИМАНИЕ
Exchange серверу нужно указать собственный адрес в качестве релея если планируется отправка на адреса, находящиеся вне домена (дублирование на личный адрес, например).
Некоторые, вероятно, спросят — «зачем же брать адрес из ExtensionAttribute если есть стандартное поле содержащее e-mail пользователя?». Ответ прост — копия каждого уведомления шлется также в IT department, у пользователя может быть не один адрес и некоторые системные аккаунты не имеют почтовых ящиков в принципе, но уведомления о них нужны для облегчения жизни уже непосредственно администраторам. Вписать адреса в ExtensionAttribute15 вы сможете зайдя в дерево Active Directory на контроллере домена с правами администратора. В свойствах аккаунта будет вкладка «Attribute Editor». Если адресов в поле будет несколько — разделять их следует запятой.
Использование Get-ADUser для получения разной информации о пользователях домена AD
Get-ADUser это один из основных командлетов PowerShell, который можно использовать для получения различной информации о пользователях Active Directory и их атрибутах. С помощью командлета Get-ADUser можно получить значение любого атрибута учетной записи пользователя AD, вывести список пользователей в домене с нужными атрибутами и экспортировать их в CSV, и использовать различные критерии для выборки доменных пользователей.
Комадлет Get-ADUser доступен начиная с PowerShell 2.0 и входит в специальный модуль для работы с Active Directory — Active Directory Module for Windows PowerShell (представлен в Windows Server 2008 R2). Командлеты модуля RSAT-AD-PowerShell позволяют выполнять различные операции с объектами каталога AD.
В этом примере мы покажем, как с помощью командлета PowerShell Get-ADUser получить информацию о времени последней смены пароля пользователя, когда истекает срок действия пароля и другие данные пользователей.
Как найти пользователя в AD и вывести его свойства с помощью Get-ADUser?
Для использования модуля RSAT-AD-PowerShell нужно запустить консоль PowerShell с правами администратора и импортировать модуль командой:
В Windows Server 2012 и выше модуль RSAT-AD-PowerShell устанавливается по-умолчанию при развертывании на сервере роли Active Directory Domain Services (AD DS). Для установки модуля на рядовом сервере домена нужно выполнить команду:
Вы можете установить модуль AD из PowerShell:
Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools
Import-Module «C:\PS\ADPoSh\Microsoft.ActiveDirectory.Management.dll»
Import-Module «C:\PS\ADPoSh\Microsoft.ActiveDirectory.Management.resources.dll»
Полный список всех аргументов командлета Get-ADUser можно получить так:
Чтобы вывести список всех учетных записей домена, выполните команду:
По-умолчанию командлет Get-ADUser возвращает только 10 основных атрибутов (из более чем 120 свойств учетных записей пользователей): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус аккаунта (Enabled: True/False согласно атрибуту UserAccountControl), и т.д.
В выводе командлета отсутствует информация о времени последней смены пароля пользователя.
Get-ADUSer –Server DC01.winitpro.loc –Identity tstuser
Чтобы вывести полную информации обо всех доступных атрибутах пользователя tuser, выполните команду:
Командлет Get-ADUser с параметром Properties * вывел список всех атрибутов пользователя AD и их значения.
Попробуем изменить параметры команды Get-ADUser, чтобы вывести только нужные нам атрибуты пользователя. Можно вывести сразу несколько атрибутов пользователя:
Теперь в информации о пользователе есть данные о статусе аккаунта (Expired:True/False), дате смены пароля и времени последнего входа в домен (lastlogontimestamp). Представим информацию в более удобном табличном виде и уберем все лишние атрибуты с помощью Select-Object –Property или Format-Table:
Получение пользователей из нескольких OU с помощью Get-ADUser
Чтобы вывести пользователей только из определенного контейнера домена (OU), воспользуйтесь параметром SearchBase:
Если вам нужно выбрать пользователей сразу из нескольких OU, используйте следующую конструкцию:
$OUs = «OU=Moscow,DC=winitpro,DC=local»,»OU=SPB,DC=winitpro,DC=loc»
$OUs | foreach
Получить Email адреса пользователей из AD
Email пользователя это один из атрибутов в Active Directory. Чтобы вывести список email адресов пользователей, вы должны добавить поле EmailAddress в выбираемые поля командлета Get-ADUser.
Вывести список активных учёток с почтовыми адресами:
Список пользователей, у которые нет email адреса:
Следующий пример позволяет выгрузить адресную книгу email адресов компании в виде csv файла, который в дальнейшем можно импортировать в Outlook или Mozilla Thunderbird:
Get-ADUser: экспорт пользователей домена в текстовый или CSV/Excel файл
Полученный список пользователей домена с атрибутами можно выгрузить в текстовый файл:
Или вы можете выгрузить пользователей AD в файл CSV, который в дальнейшем будет удобно экспортировать в Excel.
Get-ADUser –Filter: Сортировка и фильтрация списка пользователей AD
С помощью параметра –Filter вы можете фильтровать список пользователей по одному или нескольким атрибутам. В качестве аргументов этого параметра можно указать значения определённых атрибутов пользователей Active Directory. При использовании параметра –Filter командлет Get-ADUser выведет только пользователей, которые соответствуют критериям фильтра.
Например, выведем список активных (Enabled) учётных записей пользователей, чье имя содержит «Dmitry» (в примере ниже используется множественный фильтр, вы можете комбинировать условия с помощью стандартных логических операторов сравнения PowerShell):
Дополнительно с помощью sort-object вы можете отсортировать полученный список пользователей по определенному атрибуту. Кроме того, для выборки пользователей можно использовать командлет where. Здесь также можно использовать сразу несколько критериев фильтрации.
Таким образом, можно построить таблицу с любыми необходимыми атрибутами пользователей Active Directory.
Get-ADUser: разные примеры использования
Далее приведем еще несколько полезных вариантов запросов о пользователях Active Directory с помощью различных фильтров. Вы можете их комбинировать для получения необходимого списка пользователей домена:
Вывод пользователей AD, имя которых начинается с Roman:
Чтобы подсчитать общее количество всех аккаунтов в Active Directory:
Список всех активных (не заблокированных) учетных записей в AD:
Вывести всех пользователей, которые были созданы за последние 24 часа (пример отсюда):
Список учетных записей с истекшим сроком действия пароля (срок действия пароля настраивается в доменной политике):
Задача: для списка учетных записей, которые хранятся в текстовом файле (по одной учетной записи в строке), нужно получить телефон пользователя из AD и выгрузить информацию в текстовый csv файл (для дальнейшего формирования отчета в Exсel).
Пользователи, которые не меняли свой пароль в течении последних 90 дней:
Список групп, в которых состоит учетная запись пользователя
Вывести список пользователей из OU, которые состоят в определенной группе безопасности:
Вывести список компьютеров домена, на которые разрешено входить пользователю (ограничение через атрибут LogonWorkstations):