Учётная запись заблокирована и не может использоваться для входа в сеть
Политика безопасности аккаунтов домена в большинстве организаций требует обязательной блокировки учётной записи пользователя Active Directory, если неверный пароль вводился несколько раз подряд. Обычно учётная запись блокируется контроллером домена на несколько минут (5–30), в течение которых пользователь не может войти в домен AD. Через некоторое время (установленное политикой безопасности домена) учётная запись пользователя автоматически разблокируется. Временная блокировка учётной записи AD снижает риск атак методом переборы (брут-форс) на пароли учётных записей пользователей AD.
Если учётная запись пользователя в домене заблокирована, при попытке входа в Windows появляется предупреждение:
Учётная запись заблокирована и не может использоваться для входа в сеть
В Windows на английском языке сообщение выглядит так:
The referenced account is currently locked out and may not be logged on to ….
Как загружать переменную с учетными данными при открытии Powershell
В Powershell есть возможность загружать переменные (и другие данные) при открытии самой консоли. Например мы сможем единожды объявить переменные ‘$credential_local’, ‘$credential_domain’, ‘$credential_forest’ и каждый раз открывать консоль Powershell они сами будут импортироваться.
Первое что нужно сделать — проверить существования файла ‘Microsoft.PowerShell_profile.ps1’, который является профилем Powershell. Путь до этого файла лежит следующей переменной (если работаете в сессии PSsession — ничего не вернется):
Если этого файла нет — его нужно создать (c PS 6+ он должен создаваться автоматически):
В этот файл мы помещаем один из скриптов написанных выше:
Теперь, открывая консоль, вы всегда сможете вызвать эту переменную:
…
Рекомендую
— Добавление пользователя в группу «Администраторы»
Напоминаю — При создании учётной записи через PowerShell, она не будет состоять ни в одной из локальных групп[Пользователи, Администраторы…, а значит пока мы не добавили её в группу, толку от неё нет. Короче не забываем добавить пользователя в группу
Здесь я буду добавлять пользователя в группу «Администраторы», тем самым сделаю его локальным администратором. Вы же конечно можете добавить пользователя в группу «Пользователи» если авторизовываться вам нужно, а быть локальным администратором — не нужно.
Первым делом нужно посмотреть точное название группы, делается это при помощи командлета отображающего все локальные группы — Get-LocalGroup:
Get-LocalGroup
Это действие обязательное, так как название группы может быть, как на русском так и на английском языке и команда для русского языка не сработает на английском и наоборот :c
И так я вижу, что название групп у меня на русском, и нужная мне группа называется — «Администраторы».(Рис.9)
Рис.9 — Список локальных групп.
Теперь нужно посмотреть членов этой группыКто находится в списке, командлет — Get-LocalGroupMember(Рис.10):
Get-LocalGroupMember -Group "Администраторы"
Как видим в группе «Администраторы» числится две учётных записи — «UserFirstdeer» и «Администратор».
Рис.10 — Просмотр членов локальной группы.
Теперь нужно добавить нашего пользователя в группу, для этого воспользуемся командлетом — Add-LocalGroupMember:
Add-LocalGroupMember -Group "ИМЯ_ГРУППЫ" -Member "ПОЛЬЗОВАТЕЛЬ"
Для того чтобы удалить пользователя из группы воспользуемся командлетом — Remove-LocalGroupMember:
Remove-LocalGroupMember -Group "ИМЯ_ГРУППЫ" -Member "ПОЛЬЗОВАТЕЛЬ"
В моём случае так(Рис.10):
Add-LocalGroupMember -Group "Администраторы" -Member "firstdeer"
Рис.11 — Добавление пользователя в группу.
Всё ок! Наш пользователь в группе. Теперь пользователь может авторизовываться в системе.
Как мы делали то же самое в графическом интерфейсе и в командной строке — Работа с локальной учётной записью в Windows [GUI/CMD]
У меня всё!
Поделиться публикацией
Была ли вам полезна статья? Есть возможность
поддержать проект.
Удаленное взаимодействие «один ко многим»
Иногда может потребоваться выполнить задачу в интерактивном режиме на удаленном компьютере. Удаленное взаимодействие гораздо более эффективно при выполнении задачи на нескольких удаленных компьютерах одновременно. С помощью командлета выполните команду на одном удаленном компьютере или нескольких одновременно.
В предыдущем примере на три сервера были отправлены запросы состояния службы времени Windows. Командлет был помещен в блок сценария . На самом деле сценарий выполняется на удаленном компьютере и результаты возвращаются на локальный компьютер в виде десериализованных объектов.
Передача предыдущей команды в подтверждает, что результаты действительно десериализованы.
Обратите внимание, что в десериализованных объектах отсутствует большинство методов. Это значит, что они не являются активными объектами, они инертны
Нельзя запускать или останавливать службу с помощью десериализованного объекта, так как он является моментальным снимком состояния этого объекта на момент выполнения команды на удаленном компьютере.
Это не значит, что вы не можете запускать или прекращать работу службы с помощью метода . Это просто значит, что метод должен быть вызван в удаленном сеансе.
Чтобы доказать это, далее я остановлю службу времени Windows на всех трех удаленных серверах с помощью метода Stop() .
Как отмечалось в предыдущей главе, если для выполнения задачи существует командлет, рекомендуется использовать его, а не метод. В предыдущем сценарии вместо метода остановки советую выполнить командлет . Чтобы доказать свою точку зрения, я решил использовать метод Stop() , так как многие люди ошибочно полагают, что в рамках удаленного взаимодействия PowerShell вызывать методы невозможно. Их нельзя вызывать в возвращаемом объекте, потому что он десериализован, но можно вызывать в самом удаленном сеансе.
Сброс пароля пользователя
Сброс пароля пользователя с помощью интерфейса Windows |
-
Чтобы открыть оснастку «Active Directory — пользователи и компьютеры», нажмите кнопку Пуск, выберите Панель управления, дважды щелкните Администрирование, а затем дважды щелкните Active Directory — пользователи и компьютеры.
-
В дереве консоли щелкните пункт Пользователи.
Местонахождение
Active Directory — пользователи и компьютеры\domain node\Пользователи
Или щелкните папку, которая содержит нужную учетную запись пользователя.
-
В области сведений щелкните правой кнопкой мыши имя пользователя, пароль которого следует переустановить, а затем выберите команду Смена пароля.
-
Введите пароль и затем подтвердите его.
-
Если необходимо, чтобы пользователь изменил этот пароль при следующем входе в систему, установите флажок Требовать смену пароля при следующем входе в систему.
Дополнительная информация
- Для выполнения этой процедуры необходимо быть членом группы «Операторы учета», «Администраторы домена» или «Администраторы предприятия» в доменных службах Active Directory либо должны быть делегированы соответствующие полномочия. По соображениям безопасности для выполнения этой процедуры рекомендуется использовать команду Запуск от имени.
- Чтобы открыть оснастку «Active Directory — пользователи и компьютеры» другим способом, нажмите кнопку Пуск, выберите пункт Выполнить, а затем введите dsa.msc.
- Службы, проверка подлинности которых выполняется по с учетной записи пользователя, необходимо сбросить, если пароль учетной записи пользователя для соответствующей службы был изменен.
- Задачу этой процедуры можно также выполнить, используя Модуль Active Directory для Windows PowerShell. Чтобы открыть Модуль Active Directory, нажмите кнопку Пуск и последовательно выберите пункты Администрирование и Модуль Active Directory для Windows PowerShell. Дополнительные сведения см. в статье «Сброс пароля пользователя» (страница может быть на английском языке) (https://go.microsoft.com/fwlink/?LinkId=138370). Дополнительные сведения о Windows PowerShell см. в статье о Windows PowerShell (страница может быть на английском языке) (https://go.microsoft.com/fwlink/?LinkId=102372).
Переустановка пароля пользователя с помощью командной строки |
-
Чтобы открыть командную строку, нажмите кнопку Пуск, выберите пункт Выполнить, введите cmd, а затем нажмите кнопку ОК.
-
Введите указанную ниже команду и нажмите клавишу ВВОД.
dsmod user <UserDN> -pwd <NewPassword> -mustchpwd {yes|no}
Параметр | Описание |
---|---|
<DN_пользователя> |
Задает различаемое имя пользователя, пароль которого будет переустановлен. |
-pwd |
Задает <новый_пароль>. |
<новый_пароль> |
Задает пароль, который заменит текущий пароль пользователя. |
-mustchpwd |
Задает флаг pwdExpired. |
{yes|no} |
Задает значение флага pwdExpired. |
Для просмотра полного синтаксиса данной команды и сведений о вводе в командную строку информации учетной записи пользователя введите следующую команду, а затем нажмите клавишу ВВОД.
dsmod user /?
Дополнительная информация
- Для выполнения этой процедуры необходимо быть членом группы «Операторы учета», «Администраторы домена» или «Администраторы предприятия» в доменных службах Active Directory либо получить соответствующие полномочия путем делегирования. По соображениям безопасности для выполнения этой процедуры рекомендуется использовать команду Запуск от имени.
- Если пароль не назначен, при первой попытке пользователя войти в систему (с помощью пустого пароля) отобразится сообщение «Необходимо изменить пароль при первом входе в систему». Когда пользователь изменит пароль, процесс входа продолжится.
- Службы, проверка подлинности которых выполняется по учетной записи пользователя, необходимо сбросить, если пароль учетной записи пользователя для соответствующей службы был изменен.
- Задачу этой процедуры можно также выполнить, используя Модуль Active Directory для Windows PowerShell. Чтобы открыть Модуль Active Directory, нажмите кнопку Пуск и последовательно выберите пункты Администрирование и Модуль Active Directory для Windows PowerShell. Дополнительные сведения см. в статье «Сброс пароля пользователя» (страница может быть на английском языке) (https://go.microsoft.com/fwlink/?LinkId=138370). Дополнительные сведения о Windows PowerShell см. в статье о Windows PowerShell (страница может быть на английском языке) (https://go.microsoft.com/fwlink/?LinkId=102372).
Импорт и экспорт пароля из обычного файла
В Powershell есть команда ConvertTo-SecureString, которая может преобразовывать обычные строки в объект SecureString. Результатом команды будет такой же объект, который был у команды Get-Credential , свойства ‘Password’:
Для того что бы безопасно сохранять эти данные в файл мы можем зашифровать их с помощью команды ConvertFrom-SecureString:
Результат команды выше будет та же строка, что была у пароля при выполнении команды Export-CliXML:
Мы можем открыть этот, и преобразовать зашифрованный пароль в объект SecureString:
Создание объекта PSCredential
Любой ключ -Credential в командах ожидает получить объект PSCredential, а не просто пароль. Мы можем создать такой объект следующим способом:
Т.е. с этим способом мы можем создать учетные данные в нужном формате, но для этого мы должны будем хранить файл с паролем в чистом виде.
Как сбросить пароль пользователю в 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.
Чтобы сбросить пароль для пользователя с учетной записью dakimov и установить новый пароль SuperStr0n@p1, выполните команду:
Set-ADAccountPassword dakimov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “SuperStr0n@p1” -Force -Verbose) –PassThru
По умолчанию командлет возвращает объект и ничего не отображает в консоли. Чтобы вывести информацию об объекте пользователя в AD мы используем параметр –PassThru.
В качестве имени пользователя можно указать sAMAccountName (как в нашем случае), objectGU >
Если при смене пароля пользователя не указывать параметр –Reset, необходимо указать старый и новый пароль учетной записи.
Set-ADAccountPassword : The password does not meet the length, complexity, or history requirement of the domain.
Это означает что к указанному паролю применяются некоторые требования сложности, длины и т.д., определенные в доменной политике паролей или гранулированной политике паролей, действующей на учетку.
Если у вас включено ведение истории PowerShell команд, и вы не хотите, чтобы пароли в открытом виде отображались в консоли PoSh, пароль как и при создании пользователя нужно преобразовать в безопасную строку (подробнее о защите паролей в скриптах PowerShell здесь):
$NewPasswd=Read-Host «Введите новый пароль пользователя» –AsSecureString
Теперь сбросим пароль:
Set-ADAccountPassword dakimov -Reset –NewPassword $NewPasswd –PassThru
При сбросе пароля можно принудительно снять блокировку ученой записи, даже если она заблокирована (как найти с какого компьютера блокируется учетная запись, смотрите в статье Поиск источника блокировки пользователя в Active Directory):
Unlock-ADAccount –Identity dakimov
Чтобы пользователь при следующем входе в домен сменил данный пароль на новый, выполните команду:
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*
При сбросе пароля на контроллере домена (DC) регистрируется событие EventID 4724. Это событие помогает определить учетную запись, которая выполнила сброс пароля пользователя.
Сводка
Каждый Windows на основе компьютера поддерживает историю паролей учетной записи машины, которая содержит текущие и предыдущие пароли, используемые для учетной записи. Когда два компьютера пытаются проверить подлинность друг с другом, а изменение текущего пароля еще не получено, Windows зависит от предыдущего пароля. Если последовательность изменений пароля превышает два изменения, участвующие компьютеры могут не общаться, и вы можете получать сообщения об ошибках. Например, при репликации Active Directory вы получаете сообщения об ошибках с отказом в доступе.
Это поведение также применяется к репликации между контроллерами домена того же домена. Если контроллеры домена, не реплицируемые, находятся в двух различных доменах, внимательно посмотрите на отношения доверия.
Нельзя изменить пароль учетной записи машины с помощью оснастки Active Directory Users and Computers. Но сбросить пароль можно с помощью Netdom.exe средства. Средство Netdom.exe включено в Windows средства поддержки для Windows Server 2003, в Windows Server 2008 R2 и в Windows Server 2008.
Средство Netdom.exe сбрасывает пароль учетной записи на компьютере локально (известный как локальный секрет). Это изменение записывается на объект учетной записи компьютера на Windows домена, который находится в том же домене. Одновременное написание нового пароля в обоих местах гарантирует синхронизацию по крайней мере двух компьютеров, участвующих в операции. Запуск репликации Active Directory гарантирует получение изменений другими контроллерами домена.
Следующая процедура описывает использование команды netdom для сброса пароля учетной записи компьютера. Эта процедура чаще всего используется на контроллерах домена, но также применяется к любой учетной записи Windows компьютера.
Необходимо запустить средство локально с Windows, пароль которого необходимо изменить. Кроме того, для запуска Netdom.exe необходимо иметь административные разрешения на локальном уровне и на объекте учетной записи компьютера в Active Directory.
Использование параметров учетных данных
В следующем примере кода показано, как использовать параметры учетных данных. В этом примере демонстрируется функция с именем , которая приведена в книге The Pester Book. Эта функция определяет параметр учетных данных с помощью техник, описанных в предыдущем разделе. Функция вызывает с помощью переменной , создаваемой функцией. Это позволяет вам изменить пользователя, выполняющего . Так как для значения по умолчанию используются пустые учетные данные, функцию можно выполнять без предоставления учетных данных.
В следующих разделах приведены различные методы по предоставлению учетных данных функции .
Запрос учетных данных
Использование может сделать код громоздким. Обычно при использовании параметра Credential только с именем пользователя командлет автоматически запрашивает пароль. Такое поведение обеспечивается атрибутом .
Примечание
При задании показанного значения реестра в этих примерах предполагается, что у вас установлены функции веб-сервера Windows. Выполните и при необходимости.
Указание учетных данных в переменной
Вы также можете предварительно указать переменную учетных данных и передать ее параметру Credential функции . Используйте этот метод с инструментами непрерывной интеграции и непрерывного развертывания (CI/CD), такими как Jenkins, TeamCity и Octopus Deploy. Пример использования Jenkins можно найти в записи блога Hodge Автоматизация с помощью Jenkins и PowerShell в Windows — часть 2.
В этом примере используется метод .NET для создания объекта учетных данных и защищенной строки для передачи в пароле.
Для этого примера защищенная строка создается с использованием пароля в формате открытого текста. Все упомянутые ранее инструменты CI/CD предоставляют защищенный метод для указания пароля во время выполнения. При использовании таких инструментов замените пароль в формате обычного текста переменной, определенной в используемом инструменте CI/CD.
Выполнение без учетных данных
Так как по умолчанию переменная принимает значение пустого объекта учетных данных, вы можете выполнять команду без учетных данных, как показано в этом примере:
Проверка и восстановление доверительного отношения компьютера с доменом с помощью PowerShell
Если вы не можете аутентифицироваться на компьютере под доменной учетной записью с ошибкой “Не удалось установить доверительные отношения между этой рабочей станцией и основным доменом”, вам нужно войти на компьютер под локальной учетной записью с правами администратора. Также можно отключить сетевой кабель и авторизоваться на компьютере под доменной учетной записью, которая недавно заходила на этот компьютер, с помощью кэшированных учетных данных (Cached Credentials).
Откройте консоль PowerShell и с помощью командлета Test-ComputerSecureChannel проверьте соответствует ли локальный пароль компьютера паролю, хранящемуся в AD.
Test-ComputerSecureChannel –verbose
1 | Test-ComputerSecureChannel–verbose |
Если пароли не совпадают и компьютер не может установить доверительные отношения с доменом, команда вернет значение False –
The Secure channel between the local computer and the domain winitpro.ru is broken
1 | The Secure channel between the local computer andthe domain winitpro.ru isbroken |
Чтобы принудительно сбросить пароль учётной записи данного компьютера в AD, нужно выполнить команду:
Test-ComputerSecureChannel –Repair –Credential (Get-Credential)
1 | Test-ComputerSecureChannel–Repair–Credential(Get-Credential) |
Для выполнения операции сброса пароля нужно указать учетную запись и пароль пользователя, у которого достаточно полномочий на сброс пароля учетной записи компьютера. Этому пользователя должны быть делегированы права на компьютеры в Active Directory (можно использовать и члена группы Domain Admins, но это не комильфо).
После этого нужно еще раз выполнить команду
Test-ComputerSecureChannel
1 | Test-ComputerSecureChannel |
и убедится, что она возвращает True (
The Secure channel between the local computer and the domain winitpro.ru is in good condition
1 | The Secure channel between the local computer andthe domain winitpro.ru isingood condition |
).
Итак, пароль компьютера сброшен без перезагрузки и без ручного перевоода в домен. Теперь вы можете аутентифицировать на компьютере под доменной учетной записью.Также для принудительной смены пароля можно использовать командлет Reset-ComputerMachinePassword.
Reset-ComputerMachinePassword -Server dc01.corp.winitpro.ru -Credential corp\domain_admin
1 | Reset-ComputerMachinePassword-Server dc01.corp.winitpro.ru-Credential corp\domain_admin |
dc01.corp.winitpro.ru
1 | dc01.corp.winitpro.ru |
– имя ближайшего DC, на котором нужно сменить пароль компьютера.
Имеет смысл сбрасывать пароль компьютера каждый раз, перед тем как вы создаете снапшот виртуальной машины или точку восстановления компьютера. Это упростит вам жизнь при откате к предыдущему состоянию компьютера.
Если у вас есть среда разработки или тестирования, где приходится часто восстанавливать предыдущее состояние ВМ из снапшотов, возможно стоит с помощью GPO точечно отключить смену пароля в домене для таких компьютеров. Для этого используется политика Domain member: Disable machine account password changes из секции Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options. Можно нацелить политики на OU с тестовыми компьютерам или воспользоваться WMI фильтрами GPO.
С помощью командлета Get-ADComputer (из модуля Active Directory Windows PowerShell) можно проверить время последней смены пароля компьютера в AD:
Get-ADComputer –Identity spb-pc22121 -Properties PasswordLastSet
1 | Get-ADComputer–Identity spb-pc22121-Properties PasswordLastSet |
Комадлеты Test-ComputerSecureChannel и Reset-ComputerMachinePassword доступны, начиная с версии PowerShell 3.0. В Windows 7/2008 R2 придется обновить версию PoSh.
Также можно проверить наличие безопасного канала между компьютером и DC командой:
nltest /sc_verify:corp.winitpro.ru
1 | nltest sc_verifycorp.winitpro.ru |
Следующие строки подтверждают, что доверительные отношения были успешно восстановлены:
Trusted DC Connection Status Status = 0 0x0 NERR_Success
Trust Verification Status = 0 0x0 NERR_Success
1 |
Trusted DC Connection Status Status=0x0NERR_Success Trust Verification Status=0x0NERR_Success |
Политики аудита входа в систему для контроллеров домена
Чтобы включить фиксацию события блокировки учётной записи в журналах контроллера домена, необходимо активировать следующие политики аудита для контроллеров домена. Перейдите в раздел GPO Computer Configuration → Policies → Windows Settings → Security Settings → Advanced Audit Policy → Logon/Logoff и включите следующие политики:
- Audit Account Lockout
- Audit Logon
- Audit Logoff
В русскоязычной версии это соответственно Конфигурация компьютера → Политики → Конфигурация Windows → Параметры безопасности → Конфигурация расширенной политики аудита → Политика аудита → Вход/Выход, политики:
- Аудит блокировки учетной записи
- Аудит входа в систему
- Аудит выхода из системы
Самый простой способ включить эту политику — через консоль gpmc.msc, отредактировав Default Domain Controller Policy или используя Default Domain Policy на уровне всего домена.
Обратите внимание, что для использования параметров «Конфигурация расширенной политики аудита» также необходимо в Локальной политике безопасности (secpol.msc) включить по пути Параметры безопасности → Локальные политики → Параметры безопасности параметр «Аудит: принудительно переопределяет параметры категории политики аудита параметрами подкатегории политики аудита (Windows Vista или следующие версии)». Это значение по умолчанию установлено на «Включён», поэтому если вы не отключали эту политику, то вам не нужно о ней беспокоиться.