
Массово передавать один пароль локального администратора через командную строку опасно: секрет попадает в историю, журналы и процессы, а компрометация одной машины открывает остальные. Современная схема разделяет пароли доменных пользователей и локальных администраторов. Для локальных учётных записей используют Windows LAPS, для доменных — штатные средства Active Directory и ограниченную делегацию.

1. Определите, чей пароль требуется изменить
У доменной и локальной учётной записи разные владельцы и механизмы управления. Запишите имя объекта, набор компьютеров, причину ротации, согласованное окно и способ аварийного доступа. Не начинайте с инструмента: сначала отделите обычную плановую ротацию от реакции на инцидент.
| Объект | Предпочтительный способ | Где хранится результат |
|---|---|---|
| локальный администратор рабочих станций | Windows LAPS | Active Directory или Microsoft Entra ID |
| доменный пользователь | Set-ADAccountPassword | хеши в AD, без выгрузки пароля |
| сервисная учётная запись | gMSA либо процедура владельца сервиса | AD и конфигурация сервиса |
| аварийный локальный доступ | индивидуальный LAPS-пароль | только уполномоченным администраторам |
Смена сервисного пароля без карты зависимостей может остановить службы, задания и интеграции.
2. Проведите инвентаризацию и сделайте пилотную группу
Проверьте версии Windows, доступность контроллеров домена, репликацию, наличие старого Microsoft LAPS и права чтения атрибутов. Выберите несколько типичных машин и одну тестовую организационную единицу. Исключения фиксируйте явно, а не расширяйте область действия фильтром «все компьютеры».
Get-ADComputer -SearchBase 'OU=LAPS-Pilot,DC=example,DC=local' -Filter * -Properties OperatingSystem,LastLogonDate |
Select-Object Name,OperatingSystem,LastLogonDate
repadmin /replsummary
Команды чтения дают исходный список. Перед изменениями экспортируйте действующие GPO и список делегированных групп.
Подготовка административной станции и тестового пользователя
Доменный сценарий требует административной станции с RSAT Active Directory, доступа к выбранному writable DC, синхронизации времени и учётной записи с делегированным правом изменения именно нужного объекта. Не выдавайте Domain Admins ради единичного сброса. На Windows-клиенте установку RSAT выполняют из повышенной консоли по политике организации:
Get-WindowsCapability -Online -Name 'Rsat.ActiveDirectory.DS-LDS.Tools*'
# При State=NotPresent и разрешённой установке:
Add-WindowsCapability -Online -Name 'Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0'
Import-Module ActiveDirectory
Get-Command Set-ADAccountPassword,Get-ADUser,Get-ADUserResultantPasswordPolicy
На Windows Server используется соответствующая роль/компонент RSAT, а не тот же клиентский механизм. До изменения выберите контроллер и подтвердите пользователя по DN и SID:
$Dc = 'dc01.example.local'
$Identity = 'user.login'
$User = Get-ADUser -Identity $Identity -Server $Dc -Properties PasswordLastSet,LockedOut,Enabled
$User | Select-Object SamAccountName,DistinguishedName,SID,Enabled,LockedOut,PasswordLastSet
Get-ADUserResultantPasswordPolicy -Identity $User -Server $Dc
Get-ADDefaultDomainPasswordPolicy -Server $Dc
Пустой результат resultant policy может означать отсутствие fine-grained PSO для этого пользователя; тогда проверяют политику домена. Это не разрешение обойти длину, историю и минимальный возраст пароля. Если DN находится не в ожидаемой OU или аккаунт является сервисным, остановите пользовательский сценарий и уточните владельца.
3. Подготовьте Windows LAPS и права доступа
Windows LAPS встроен в поддерживаемые версии Windows. Для локального Active Directory подготовьте схему по официальной процедуре, затем выдайте компьютерам право обновлять собственный пароль и отдельно назначьте группы, которым разрешено чтение или сброс. Эти операции выполняют с административной станции и журналируют.
Import-Module LAPS
Get-LapsDiagnostics -OutputFolder C:\Temp\LapsDiagnostics
# Команды изменения схемы и делегации сначала выполняют в лаборатории.
Не выдавайте чтение LAPS-паролей широким группам поддержки. Проверьте наследование ACL и административную модель уровня рабочих станций.
Полный пилот Windows LAPS: схема и делегация
Для отдельной OU OU=LAPS-Pilot,DC=example,DC=local подготовьте восстановление AD и делегацию. Обновление схемы — операция уровня леса; оно не откатывается удалением новой GPO. Убедитесь, что она ещё не выполнена и что выбранный оператор уполномочен на изменение схемы. После подготовки из модуля LAPS выполняют следующие действия по отдельным ролям:
Import-Module LAPS
$PilotOu = 'OU=LAPS-Pilot,DC=example,DC=local'
# Один раз на лес, уполномоченным оператором схемы:
Update-LapsADSchema -Verbose
# Затем оператором с правом изменять ACL пилотной OU:
Set-LapsADComputerSelfPermission -Identity $PilotOu
Set-LapsADReadPasswordPermission -Identity $PilotOu -AllowedPrincipals 'EXAMPLE\LAPS-Readers'
Set-LapsADResetPasswordPermission -Identity $PilotOu -AllowedPrincipals 'EXAMPLE\LAPS-Rotators'
Find-LapsADExtendedRights -Identity $PilotOu
Группы Readers и Rotators должны существовать и иметь утверждённый состав. SelfPermission даёт компьютерам возможность обновлять свои атрибуты. Чтение, установка срока ротации и расшифрование — разные полномочия; не объединяйте их автоматически. В выводе ExtendedRights проверьте унаследованные широкие группы: явное добавление Readers не удаляет старые опасные разрешения. Источник и область изменения ACL фиксируют перед публикацией политики.
4. Настройте политику без общего пароля
В GPO задайте каталог хранения, имя управляемой локальной учётной записи, длину и сложность пароля, срок ротации и поведение после использования. Не записывайте пароль в GPO Preferences, скрипт запуска, CSV или систему заявок. Если встроенный Administrator переименован, подтвердите его фактический SID и имя на пилоте.
gpupdate /force
Get-LapsDiagnostics -OutputFolder C:\Temp\LapsDiagnostics
Get-WinEvent -LogName 'Microsoft-Windows-LAPS/Operational' -MaxEvents 20
Факт применения GPO ещё не доказывает, что новый секрет записался в каталог и доступен только нужной группе.
Конкретные параметры политики и проверка на устройстве
В GPMC создайте отдельную GPO для пилота, привяжите только к выбранной OU. В редакторе откройте Computer Configuration → Policies → Administrative Templates → System → LAPS. Если раздел отсутствует при Central Store, обновите LAPS.admx и соответствующий локализованный LAPS.adml из поддерживаемой системы в Central Store по принятой процедуре, сохранив прежние файлы.
Для примера задайте backup в Active Directory (BackupDirectory=2), длину 20, сложность 4 и возраст 30 дней; это параметры пилота, которые сверяют с локальной политикой паролей. Для встроенного Administrator оставьте AdministratorAccountName незаданным: встроенная учётная запись определяется по RID, даже при переименовании. Для специально созданной локальной учётной записи проверьте её существование и права отдельно. Автоматическое управление аккаунтом новых версий имеет отдельные требования и не подразумевается этим сценарием.
При DFL 2016+ можно настроить шифрование и определённую группу расшифрования. Разрешение чтения атрибута само по себе не выдаёт право расшифровать: ADPasswordEncryptionPrincipal проверяют отдельно. После применения GPO на пилотном компьютере из повышенной консоли выполните:
gpupdate /target:computer /force
Invoke-LapsPolicyProcessing
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-LAPS/Operational';Id=10018} -MaxEvents 5 |
Select-Object TimeCreated,Id,Message
На административной станции читайте только безопасные поля результата, исключив Password:
Get-LapsADPassword -Identity 'PC-TEST-01' |
Select-Object ComputerName,Account,PasswordUpdateTime,ExpirationTimestamp,Source,DecryptionStatus
Set-LapsADPasswordExpirationTime -Identity 'PC-TEST-01'
Последняя команда меняет срок в AD; устройство сменит пароль при следующей обработке политики. Reset-LapsPassword запускается локально на управляемом устройстве, а не на станции оператора для произвольного удалённого компьютера. После команды повторите проверку времени записи и события. Для отрицательного теста обычный оператор не должен получить секрет или успешное расшифрование; не выводите весь объект с паролем в transcript.
5. Проверьте чтение и управляемую ротацию
Уполномоченный администратор получает пароль только на время работы, не пересылает его открытым текстом и после использования инициирует ротацию. Проверяйте как успешный сценарий, так и отказ для обычного пользователя.
Get-LapsADPassword -Identity 'PC-TEST-01' -AsPlainText
Reset-LapsPassword
Get-WinEvent -LogName 'Microsoft-Windows-LAPS/Operational' -MaxEvents 10
Параметр -AsPlainText показывает секрет оператору, поэтому вывод не сохраняют в общий transcript или тикет. В автоматизации лучше работать с разграниченными системами секретов и аудитом доступа.
6. Меняйте пароль доменного пользователя отдельно
Для индивидуального сброса используйте ADUC или Set-ADAccountPassword с защищённым вводом. Сначала проверьте точный объект и область делегации. Пароль не должен присутствовать в аргументах команды, файле или истории терминала.
$User = Get-ADUser -Identity 'user.login'
$NewPassword = Read-Host 'Новый пароль' -AsSecureString
Set-ADAccountPassword -Identity $User -Reset -NewPassword $NewPassword
Set-ADUser -Identity $User -ChangePasswordAtLogon $true
При инциденте также отзывают активные сеансы и токены по действующей процедуре организации. Сброс пароля сам по себе не закрывает уже выданный доступ во всех системах.
Смена с известным старым паролем и административный сброс
Смена выполняется с прежним и новым паролями. Сброс с -Reset — отдельное привилегированное действие без старого пароля. Оно требует подтверждения личности и основания заявки. SecureString скрывает обычный вывод и исключает литерал из истории, но не превращает скомпрометированную административную станцию в безопасную.
$OldPassword = Read-Host 'Текущий пароль' -AsSecureString
$NewPassword = Read-Host 'Новый пароль' -AsSecureString
try {
Set-ADAccountPassword -Identity $User -Server $Dc -OldPassword $OldPassword -NewPassword $NewPassword -ErrorAction Stop
} finally {
if ($OldPassword) { $OldPassword.Dispose() }
if ($NewPassword) { $NewPassword.Dispose() }
}
Для делегированного сброса используют отдельный операторский контекст и тот же точный объект. Требование ChangePasswordAtLogon применяют к интерактивному пользователю после проверки доступности смены, а не ко всем сервисным аккаунтам.
$Operator = Get-Credential -Message 'Делегированный оператор AD'
$TemporaryPassword = Read-Host 'Временный пароль' -AsSecureString
try {
Set-ADAccountPassword -Identity $User -Server $Dc -Credential $Operator -Reset -NewPassword $TemporaryPassword -ErrorAction Stop
Set-ADUser -Identity $User -Server $Dc -Credential $Operator -ChangePasswordAtLogon $true -ErrorAction Stop
} finally {
if ($TemporaryPassword) { $TemporaryPassword.Dispose() }
}
Get-ADUser -Identity $Identity -Server $Dc -Properties PasswordLastSet,pwdLastSet |
Select-Object SamAccountName,PasswordLastSet,pwdLastSet
pwdLastSet=0 соответствует требованию смены при следующем входе. Не проверяйте пароль массовыми неверными входами: можно заблокировать учётную запись. Достаточно одного согласованного теста входа владельцем после репликации. Старые сеансы, Kerberos tickets, VPN и веб-токены имеют свои сроки и механизмы отзыва; смена пароля не гарантирует их мгновенное завершение.
Ноутбук вне офиса: порядок, который не создаёт тупик
У ноутбука без связи с DC остаются cached logon credentials, поэтому локальный вход старым паролем после серверного сброса возможен и не доказывает неуспешный сброс AD. Одновременно VPN, использующий доменный пароль, может уже требовать новое значение. Уточните pre-logon VPN, способы MFA и доступ к смене пароля до установки обязательной смены. Сценарий должен позволять устройству связаться с DC и обновить локальный кэш.
Не решайте проблему отключением MFA, добавлением пользователя в администраторы или рассылкой нового пароля в общей заявке. Проверка у владельца должна включать VPN, рабочую сессию, почту и приложения с сохранёнными учётными данными. Старые credentials в заданиях, мобильной почте и сетевых ресурсах могут создавать повторные неуспешные попытки и блокировку; найдите источник по событиям, а не сбрасывайте пароль каждый раз.
7. Не используйте общий PsPasswd с паролем в строке
Устаревшие сценарии часто передают пароль в PsExec/PsPasswd или цикле BAT. Такой секрет виден в истории, диагностике процессов, системе развёртывания и копиях скрипта. Один пароль на всём парке создаёт горизонтальный путь атаки.
Если LAPS пока невозможно внедрить, допустим только временный пилот через защищённый PowerShell Remoting: индивидуальные пароли, ограниченный список узлов, интерактивный SecureString, журналирование и немедленный переход к LAPS. Не отключайте WinRM-аутентификацию и firewall ради удобства.
8. Учтите сервисы, задания и автономные устройства
Перед ротацией сервисной учётной записи найдите службы, пулы приложений, задания планировщика, SQL Agent, NAS и сетевые устройства. Для Windows-служб предпочтительна gMSA: домен управляет паролем, а приложения не хранят статический секрет.
Get-ADServiceAccount -Filter * | Select-Object Name,Enabled
Get-CimInstance Win32_Service |
Where-Object StartName -Match 'example\\' |
Select-Object Name,StartName,State
Инвентаризация одной машины не показывает зависимости на остальных узлах. Назначьте владельца каждой найденной службы.
9. Проведите приёмку и расширяйте волнами
На пилоте подтвердите запись пароля в каталог, вход с новым паролем, отказ старого, автоматическую повторную ротацию, доступ только разрешённых групп и отсутствие ошибок LAPS. Затем расширяйте GPO небольшими волнами с паузой наблюдения.
- все компьютеры пилота получили политику;
- у каждого свой пароль и актуальный timestamp;
- helpdesk без полномочий не читает секрет;
- сервисы, RDP и локальная поддержка работают;
- события ротации попадают в централизованный аудит.
Отчёт должен содержать компьютеры и статусы, но не значения паролей.
10. Подготовьте возврат и обработку исключений
Для возврата отвяжите пилотную GPO, сохраните диагностические события и верните предыдущую политику управления локальной учётной записью. Не удаляйте атрибуты схемы AD как обычный rollback. Машины вне домена, долго отключённые ноутбуки и неподдерживаемые ОС ведите как отдельный реестр исключений с датой устранения.
Диагностика и возврат без старого общего секрета
Если политика применена, а timestamp не обновляется, проверьте DNS до DC, доверие компьютера, время, self permissions, поддерживаемость клиента и конфликт старого LAPS/Intune/GPO. Если пароль записан, но делегированная группа не может его расшифровать, проверьте encryption principal и членство, а не расширяйте Readers до Domain Users. Если требования длины конфликтуют с локальной политикой, исправьте согласованные параметры и повторите цикл.
Отвязка GPO прекращает управление по этой политике, но не возвращает прошлый пароль и не удаляет атрибуты схемы. Возврат означает восстановление согласованного механизма управления с индивидуальными секретами и проверенным аварийным доступом. Для сервисных учётных записей заранее перечислите службы и задания на всех узлах, определите порядок обновления и перезапуска. gMSA внедряют отдельным сценарием совместимости приложения; она не является автоматической заменой любого сервисного логина.
Источники: Microsoft Learn — Windows LAPS overview, Microsoft Learn — сценарий Windows LAPS с Active Directory, Microsoft Learn — Set-ADAccountPassword.
Дополнительная документация: Windows LAPS: параметры политики, Windows LAPS: PowerShell.
