Назад | Перейти на главную страницу

Пользователи заблокированы от DC, автоматически разблокируются администратором



Я работаю над типичной архитектурой Windows, содержащей контроллеры домена, серверы Exchange и т. Д.
Недавно я настроил сценарий для получения уведомлений, когда пользователь заблокирован. Работает отлично, но я заметил кое-что очень странное.

Я сообщаю некоторую информацию, такую ​​как машина, с которой пользователь был заблокирован, контроллер домена, ответственный за действие, и т. Д. (Я могу получить всю эту информацию в журналах на контроллерах домена. ID 4740 для блокировки, 4767 для разблокировки ).
Дело в том, что регулярно (примерно 1-2 раза в день) некоторые пользователи блокируются контроллером домена (например, если он несколько раз вводил пароль на этом DC). Конечно, пользователи не могут получить доступ к контроллерам домена, так что это первая странность. Более странно то, что эти пользователи автоматически разблокируются администратором примерно через 1 секунду.

Вы знаете, что может вызвать это? Я почти уверен, что в этом не может быть ничего злого.

Обратите внимание, что :

Спасибо за ваше время ! :)


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

#Get security user lockout events.  61 seconds should be sufficient, as the scheduled task run every minute.
#It leaves 1 sec for execution time.
#EventID 4740 is user lockout. 4767 is unlock.

$startTime = (get-date).addseconds(-61)

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$DomainControllers = (Get-ADDomainController -Filter *)

foreach ($DC in $DomainControllers) {

    $eventList = Get-WinEvent -ComputerName $DC.Name -filterhashtable @{logname="security";starttime=$startTime;id="4740"} -ErrorAction SilentlyContinue
    $emailBody = $null

    if ($eventList) {

        #Start a walk through the events to collect data.

        $eventList | foreach-object {
            [string]$lockoutTime = $_.timecreated
            $userName = $_.Properties[0].Value
            $user = Get-ADUser -Identity $userName -Properties *
            $name = $user.Name
            $department = $user.Department
            $site = $user.City
            $mail = $user.PrimarySmtpAddress
            $userSID = $_.Properties[2].Value
            $computerName = $_.Properties[1].Value -creplace '^\\+',''
            $IPAddress = [System.Net.Dns]::GetHostAddresses($computerName).IPAddressToString

            #Compile the alert text from each event

            $emailBody += "Utilisateur : $name`nDepartment : $department`nSite : $site`nLogin : $userName`nEmail : $mail`nOrdinateur fautif : $computerName`nAdresses IP : $IPAddress`nDate de verrouillage : $lockoutTime`nDC responsable du verrouillage : $($DC.Name)`nSID de l'utilisateur : $userSID"

            #Send mail to report the lockout
            Send-MailMessage -To "<####>" -From "<####>" -Subject "Blocage compte AD" -Body $emailBody -SmtpServer "####"


            #Create a popup on desktop
            $objForm = New-Object System.Windows.Forms.Form 
            $objForm.Text = "Unlocked AD accounts"
            $objForm.Size = New-Object System.Drawing.Size(300,115) 
            $objForm.StartPosition = "CenterScreen"

            $objLabel = New-Object System.Windows.Forms.Label
            $objLabel.Size = New-Object System.Drawing.Size(280,20)
            $objLabel.Location = New-Object System.Drawing.Size(10,15) 
            $objLabel.Text = "Compte de $name verrouillé."
            $objForm.Controls.Add($objLabel)

            $OKButton = New-Object System.Windows.Forms.Button
            $OKButton.Location = New-Object System.Drawing.Size(160,50)
            $OKButton.Size = New-Object System.Drawing.Size(85,23)
            $OKButton.Text = "Tant pis"
            $OKButton.Add_Click({$objForm.Close()})
            $objForm.Controls.Add($OKButton)

            $UnlockButton = New-Object System.Windows.Forms.Button
            $UnlockButton.Location = New-Object System.Drawing.Size(60,50)
            $UnlockButton.Size = New-Object System.Drawing.Size(85,23)
            $UnlockButton.Text = "Déverrouiller"
            $UnlockButton.Add_Click({Unlock-ADAccount $userName; $objForm.Close()})
            $objForm.Controls.Add($UnlockButton)
            if ((Get-ADUser $userName -Properties Lockedout).Lockedout) {
                [void] $objForm.ShowDialog()
            }
        }
    }
}

На всякий случай, если вы все еще искали ответ 11 месяцев спустя, обычно причина того, что «Имя вызывающего компьютера» является контроллером домена, заключается в том, что именно этот DC сообщает о блокировке.

DC1 имеет событие 4740, говорящее о том, что учетная запись пользователя была заблокирована, по сообщению DC2.

Если вы перейдете на DC2 и найдете то же событие 4740, вы увидите, что «Имя вызывающего компьютера» теперь указывает на настоящий компьютер, с которого пользователь был заблокирован.

У меня были события, исходящие от моего локального сервера Exchange, и это сбивало меня с толку так же, как и вы, до тех пор, пока я не вошел на сервер обмена, не поискал те же события блокировки и не увидел, откуда они.

Автоматическая разблокировка, вероятно, заключается в том, что DC2 разблокирует учетную запись после 30-минутной задержки блокировки по умолчанию и сообщает об этом DC1.

Это может быть похоже на учетную запись службы, поскольку в большинстве политик по умолчанию учетная запись службы автоматически разблокируется, если она заблокирована. Я наблюдал то же самое в своей среде. Надеюсь, что это поможет, и если у вас есть какие-либо предложения / предложения. Не стесняйтесь поделиться