Смена пароля пользователя домена windows

Обновлено: 07.07.2024

В этой статье описывается изменение пароля пользователя active Directory Windows LDS с помощью LDAP.

Применяется к: Windows Active Directory
Исходный номер КБ: 269190

Аннотация

Вы можете установить Windows Active Directory и пароль пользователя LDS с помощью протокола доступа к облегченным каталогам (LDAP) с учетом определенных ограничений. В этой статье описывается настройка или изменение атрибута пароля.

Эти действия также применяются к пользователям ADAM и LDS и объектам userProxy так же, как это делается с пользователями AD.

Эта статья применяется к Windows 2000. Поддержка Windows 2000 заканчивается 13 июля 2010 г. Центр Windows 2000 года является отправной точкой для планирования стратегии миграции с 2000 г. Windows 2000 г. Дополнительные сведения см. в политике жизненного цикла поддержки Майкрософт.

Дополнительная информация

Пароль хранится в базе данных AD и LDS на объекте пользователя в атрибуте unicodePwd. Этот атрибут можно написать в ограниченных условиях, но его невозможно прочитать. Атрибут можно изменить только; она не может быть добавлена при создании объекта или запрашивается поиском.

Чтобы это подключение было возможным с помощью TLS/SSL:

Синтаксис атрибута unicodePwd — octet-string; однако служба каталогов ожидает, что в строке octet-string будет содержаться строка UNICODE (как указывает имя атрибута). Это означает, что любые значения для этого атрибута, переданные в LDAP, должны быть строками UNICODE, кодируемыми BER (Основные правила кодирования) в качестве октета-строки. Кроме того, строка UNICODE должна начинаться и заканчивается кавычками, которые не являются частью нужного пароля.

Существует два возможных способа изменения атрибута unicodePwd. Первый похож на обычную операцию по смене пароля пользователя. В этом случае запрос на изменение должен содержать как операцию удаления, так и операцию добавления. Операция удаления должна содержать текущий пароль с кавычками вокруг него. Операция добавления должна содержать нужный новый пароль с кавычками вокруг него.

Второй способ изменения этого атрибута аналогичен администратору, сбросив пароль для пользователя. Для этого клиент должен связаться как пользователь с достаточными разрешениями, чтобы изменить пароль другого пользователя. Этот запрос на изменение должен содержать одну операцию замены новым нужным паролем, окруженным кавычками. Если у клиента достаточно разрешений, этот пароль становится новым паролем независимо от старого пароля.

date

31.08.2020

directory

Active Directory, PowerShell

comments

комментариев 18

В этой статье мы рассмотрим, как изменить (сбросить) пароль одного или сразу нескольких пользователей Active Directory из командной строки PowerShell с помощью командлета Set-ADAccountPassword.

ADUC - сбросить пароль пользователю

Но вам не удастся использовать консоль ADUC, когда необходимо сбросить пароль сразу множеству пользователей, использовать процедуру сброса пароля в качестве одного из действий скрипта. В этом случае можно сбросить пароли в AD из командной строки PowerShell.

Как сбросить пароль пользователю в AD?

Для сброса пароля пользователя в AD используется командлет Set-ADAccountPassword, входящий в модуль Active Directory для Windows PowerShell (в десктопых версиях Windows он входит в состав RSAT, а в серверных редакциях устанавливается в виде отдельного компонента AD DS Snap-Ins and Command-Line Tools). Перед использованием модуля его необходимо импортировать в сессию PowerShell:

Для сброса пароля ваша учетной запись должна обладать соответствующими правами. Естественно, обычные пользователи AD по-умолчанию не могут сбросить пароль других аккаунтов, чтобы эта возможность появилась, пользователю (группе пользователей) нужно делегировать право на сброс пароля на контейнер AD, либо добавить его в доменную группу Account Operators.

Чтобы проверить, что у вашей учетной записи есть право на сброс пароля определенного пользователя, откройте его свойства, перейдите на вкладку Security -> Advanced -> Effective Access -> укажите имя своей учетной записи -> убедитесь, что у вас есть разрешение Reset Password.

Active Directory эффективные разрешения на сброс пароля пользователяeffektivnie_rasresheniya_reset_password

Чтобы сбросить пароль для пользователя с учетной записью dakimov и установить новый пароль SuperStr0n@p1, выполните команду:

Set-ADAccountPassword dakimov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “SuperStr0n@p1” -Force -Verbose) –PassThru

Set-ADAccountPassword сброс пароля в Active Directory из Powershell

По умолчанию командлет возвращает объект и ничего не отображает в консоли. Чтобы вывести информацию об объекте пользователя в AD мы используем параметр –PassThru.

В качестве имени пользователя можно указать sAMAccountName (как в нашем случае), objectGUID, SID пользователя, или его DN (Distinguished Name, например CN=Akimov,OU-Users,DC=winitpro,DC=ru).

Если при смене пароля пользователя не указывать параметр –Reset, необходимо указать старый и новый пароль учетной записи.

Примечание. Если при сбросе пароля с помощью командлета Set-ADAccountPassword появляется ошибка:

Set-ADAccountPassword : The password does not meet the length, complexity, or history requirement of the domain.

Это означает что к указанному паролю применяются некоторые требования сложности, длины и т.д., определенные в доменной политике паролей или гранулированной политике паролей, действующей на учетку.

Если у вас включено ведение истории PowerShell команд, и вы не хотите, чтобы пароли в открытом виде отображались в консоли PoSh, пароль как и при создании пользователя нужно преобразовать в безопасную строку (подробнее о защите паролей в скриптах PowerShell здесь):

$NewPasswd=Read-Host "Введите новый пароль пользователя" –AsSecureString

задать новый пароль пользователя в ad из powershell

Теперь сбросим пароль:

Set-ADAccountPassword dakimov -Reset –NewPassword $NewPasswd –PassThru

При сбросе пароля можно принудительно снять блокировку ученой записи, даже если она заблокирована (как найти с какого компьютера блокируется учетная запись, смотрите в статье Поиск источника блокировки пользователя в Active Directory):

Unlock-ADAccount –Identity dakimov

Чтобы пользователь при следующем входе в домен сменил данный пароль на новый, нужно изменить его свойства в AD, выполнив команду:

Set-ADUser -Identity dakimov -ChangePasswordAtLogon $true

Вы можете совместить в одной строке команду смены пароля и включение требования сменить пароль (атрибут userAccountControl):

Set-ADAccountPassword dakimov -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True

С помощью командлета Get-ADUser вы можете убедиться, что пароль сброшен успешно, выведя время последней смены пароля аккаунта:

Get-ADUser dakimov -Properties * | select name, pass*

Get-ADUser время последней смены пароля

При сбросе пароля на контроллере домена (DC) регистрируется событие EventID 4724. Это событие помогает определить учетную запись, которая выполнила сброс пароля пользователя.

Изменить пароль нескольких пользователей в AD

Выше мы показали, как из PowerShell сбросить пароль одного пользователя в AD. Рассмотрим теперь другой сценарий – когда вам нужно сменить пароли сразу нескольких пользователей.

Самый простой случай – вам нужно сбросить пароли всех пользователей с определенными свойствами учеток. Например, нужно заставить сбросить пароль всем сотрудникам департамента Sales на одинаковый и заставить его сменить при следующем входе:

get-aduser -filter "department -eq 'Sales Dept' -AND enabled -eq 'True'" | Set-ADAccountPassword -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True

Задача по смене пароля локального администратора в домене

Представим простую ситуацию. У вас есть домен Active Directory в котором 50 и более компьютеров. На каждом из них есть локальная учетная запись администратора, используется она чаще всего для второй линии, чтобы производить обслуживание рабочих станций. Вам потребовалось сменить пароль для учетной записи "Администратор", как быть, вы же не будите бегать и ручками все менять.

Ранее во времена Windows Server 2008R2, можно было легко обновить пароль локального администратора с помощью групповых политик, я об этом рассказывал, но в следующих версиях Windows Server 2012 R2 и выше, уже данная опция не доступна, кнопки просто неактивны.

Не активные кнопки сброса пароля учетной записи администратор в групповой политике

Не знаю, с какой целью Microsoft убрала данную возможность, очень странный ход, поэтому пойдем другим путем. Мы напишем простой скрипт на PowerShell, который возьмет список DNS-имен серверов и на каждом из них он поменяет пароль для нужной нам локальной учетной записи.

Скрипт PowerShell по изменению пароля локальной учетной записи на удаленном компьютере

Для того, чтобы наш скрипт нормально отработал нам нужно выполнить некоторые требования:

  1. Иметь права администратора на том компьютере, где будет изменяться пароль для локальной учетной записи, я уверен, что вы все доменные администраторы
  2. Выяснить версию PowerShell, так как я приведу два варианта скрипта по изменению пароля, и тут нужно понимать, какой командлет поддерживает ваша версия.
  3. Подготовить список с именами серверов и сформировать текстовый файл, по идее все.

Подготовка файла со списком серверов

Давайте я покажу формат и структуру файла, в котором будет содержаться список наших серверов. Создайте обычный txt файл и задайте ему имя. у меня пусть будет comps.txt. Далее скопируйте в него список ваших FQDN имен серверов, ОДНА СТРОКА - ОДНО имя.

Файл со списком имен серверов для скрипта PowerShell

Скрипт для массовой смены пароля у локального администратора для PowerShell 5.1 и ниже

Хочу напомнить, что если вы скачаете готовый скрипт у меня в виде ps1 файла. то вам нужно разрешить запуск неподписанных скриптов в powerShell, если будите запускать из под PowerShell ISE. то ничего дополнительного делать не нужно

Я уверен, что на серверах из списка вы администратор. Я для примера буду производить смену пароля у локальной учетной записи "Администратор", хотя по хорошему вы ее должны переименовать или отключить вообще, создав другую. Откройте PowerShell ISE и скопируйте скрипт.

$computer = "C:\Temp\comps.txt"
foreach($computerName in (Get-Content $computer))

Скрипт для массовой смены пароля у локального администратора для PowerShell 5.1 и ниже

Можно использовать еще вот такой вариант для списка:

$computer = "C:\Temp\comps.txt"
foreach ($computerName in (Get-Content $computer))
Write-Host "Tryimg to process computer $computerName"

If (Test-Connection -ComputerName $computerName -Count 2 -Quiet)
Write-Host "Компьютер отвечает на Ping";

$credential = Get-Credential -UserName "Администратор" -Message "Вводим новый пароль";

If ($credential -eq $null)
Write-Warning "The username and/or the password is empty! I quit.";
Exit;
>

$user = [adsi]"WinNT://$computer/$($credential.GetNetworkCredential().Username),user";
$user.SetPassword($credential.GetNetworkCredential().Password);
$user.SetInfo();
>
Else
Write-Warning "Компьютер не отвечает.";
>
>

Как массово поменять пароль администратора

Или вариант для одного компьютера

$computer = Read-Host -Prompt "Введите имя компьютера";
If (Test-Connection -ComputerName $computer -Count 2 -Quiet) Write-Host "The computer responded to our ping request. Connecting. ";
$credential = Get-Credential -UserName "Администратор" -Message "Вводим новый пароль";
If ($credential -eq $null) Write-Warning "The username and/or the password is empty! I quit.";
Exit;
>
$user = [adsi]"WinNT://$computer/$($credential.GetNetworkCredential().Username),user";
$user.SetPassword($credential.GetNetworkCredential().Password);
$user.SetInfo();
> Else Write-Warning "Компьютер не отвечает.";
>

Как поменять пароль локального администратора

Скрипт для массовой смены пароля у локального администратора для PowerShell 5.1 и выше

В Windows 10 build 1607 и выше, новый Powershell 5.1 представил Set-LocalUser командлет. Вы можете использовать его для этой задачи вместо адаптера ADSI, но для этого требуется, чтобы на удаленных компьютерах была включена служба удаленного взаимодействия Powershell (которая по умолчанию отключена). Чтобы разрешить прием удаленных команд, вам необходимо запустить run Enable-PSRemoting в терминале Powershell с повышенными привилегиями на удаленном компьютере.

Если удаленное взаимодействие PS включено, измененный сценарий будет выглядеть следующим образом:


1. Введите новый пароль (пароль должен быть не меньше 8 символов)
2. Установите галочку на пункте "Требовать смену пароля при следующем входе в систему" - если требуется.
3. Разблокировать учетную запись пользователя - если пользователь был заблокирован системой.


Если все данные ввели правильно то появится окно об удачной смене пароля


Теперь мы рассмотрим процедуру изменения срока пароля для сервера со службой домена Active Directory

Срок истечения пароля AD

Откройте "Пуск" -> "Администрирование" -> "Управление групповой политикой"



Далее откроется окно "Управление групповой политикой", в блоке слева откройте дерево
"Лес: Имя Вашего домена"
-> "Домены"
-> "Имя Вашего домена"
-> "Default Domain Policy"

затем в блоке справа выберите вкладку "Параметры".

Во вкладке "Параметры" откройте вкладки "Политики" -> "Конфигурация Windows" -> "Параметры безопасности" -> "Политика учетных записей / Политика паролей"


В списке "Политика учетных записей / Политика паролей" нажмите правой кнопкой мыши на "Максимальный срок действия пароля 42 дня" и в контекстном меню выберите "Изменить"


Перед Вами откроется "Редактор управления групповыми политиками"

В этом редакторе, в блоке слева откройте дерево:

"Конфигурация компьютера" -> "Политики" -> "Конфигурация Windows" -> "Параметры безопасности" -> "Политики учетных записей" -> "Политика паролей"

В блоке справа откройте "Максимальный срок действия пароля 42 дня"


В открывшемся окне в значении "Срок истечения действия пароля" введите 0 или нужное Вам значение
Значение "0" - говорит системе о том что - функция "Срок истечения действия пароля" - отключена.
В таком режиме срок действия пароля - бесконечный.

Читайте также: