Нека разгледаме примери за процеса на създаване на проста система за уведомяване на администратора за добавянето на нов потребител към групата за сигурност на Active Directory. Например искаме да проследим промяната на група администратори на домейни и ако към него се добави нов потребител, ще получим известие (чрез писмо или изскачащ прозорец).
Има два варианта за организиране на такова решение:
- Можете да активирате одит на събития на контролери на домейни и да проследявате появата на събитие, когато потребителят е добавен към група за сигурност (EventID 4728)
- Съхранявайте локален текстов файл със списък на потребителите в определена група и периодично го сравнявайте с текущите членове на групата домейни
Съдържание:
- Одит добавяне на потребител към група на контролер на домейн
- Сравнение на текущия състав на домейн групата с шаблона
Одит добавяне на потребител към група на контролер на домейн
В случай, че имате активирана политика за одит в вашата GPO Конфигурация на компютъра -> Настройки на Windows -> Настройки за защита -> Разширена конфигурация на одита -> Управление на акаунта -> Управление на групата за сигурност на одита, след това, когато потребителят е добавен към групата Active Directory, събитието EventId се появява в дневника за сигурност 4728 (Член е добавен към глобална група с активирана сигурност).
Използвайки PowerShell, можете да проследите появата на това събитие в дневника за сигурност. Например, ние показваме всички събития с този код за 24 часа на контролер на домейн. За удобство ще покажем името на AD групата, която се е променила, кой акаунт е добавен и кой от администраторите е добавил потребителя към групата (скрипт, следвайки примера от статията Получаване на списък на AD потребителите, създаден за 24 часа).
$ time = (дата на получаване) - (период от време -часа 24)
Get-WinEvent -FilterHashtable @ LogName = "Сигурност"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
ако ($ събитие)
$ Time = Дата на получаване $ _. TimeCreate -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Текст"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Текст"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Текст"
$ dc = $ event.Event.System.com компютър
$ dc + „|“ + $ Време + „|“ + „|“ + $ ADGroup + „|“ + $ NewUser + „|“ + $ AdminUser
Сега на контролера на домейна трябва да създадете нова задача за планиращия и да обвържете стартирането му с събитието 4728. Когато се случи това събитие, изпратете съобщение до потребителя (как да свържете скрипт към събитие е описано в статията Windows Event Triggers и Изпълнение на PowerShell скрипт, когато се случи събитие, няма да го повторя).
Проблемът обаче е, че се проверява само един дневник на DC. Ако потребителят е добавен към групата на друг контролер на домейн, няма да видите това събитие. Можете, разбира се, да създадете абонамент за събития от няколко DC или да сортирате всички контролери със скрипт, но ако в домейна има голям брой DC, всичко това не е много удобно.
съвет. Пример за цикъл от изброяване на всички DC в домейн, използващ Get-ADDomainController и събиране на събития от тях, може да изглежда така (пример от тази статия):$ time = (дата на получаване) - (нов период от време - час 124)
$ DCs = Get-ADDomainController -Filter *
foreach ($ DC в $ DC)
Get-WinEvent -ComputerName $ DC -FilterHashtable @ LogName = "Защита"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
ако ($ събитие)
$ Time = Дата на получаване $ _. TimeCreate -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Текст"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Текст"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Текст"
$ dc = $ event.Event.System.com компютър
$ dc + „|“ + $ Време + „|“ + „|“ + $ ADGroup + „|“ + $ NewUser + „|“ + $ AdminUser
Помислете за различен подход.
Сравнение на текущия състав на домейн групата с шаблона
Използвайки командлета Get-ADGroupMember, покажете списъка с потребители в групата на администратори на домейни и запишете получения списък в текстов файл (изграждаме рекурсивен списък на потребителите, като вземем предвид вложените групи).
(Get-ADGroupMember -Identity "Домейн администратори" -рекурсивен). Име | Изходен файл C: \ PS \ DomainAdmins.txt
Сега добавете нов потребител в групата на администратори на домейни и запазете списъка с потребители отново, но във втория файл.
(Get-ADGroupMember -Identity "Домейн администратори" -рекурсивен). Име | Изходен файл C: \ PS \ DomainAdminsCurrent.txt
Сега сравнете двата файла и покажете разликите в списъците:
$ oldadm = GC C: \ PS \ DomainAdmins.txt
$ newadm = GC C: \ PS \ DomainAdminsCurrent.txt
$ diff = Сравняване-Обект -РеференцияОбект $ oldadm -ДифференцияObject $ newadm | Select-Object -ExpandProperty InputObject
запис-хост $ разл
Показва се акаунтът, добавен към групата AD..
Можете да покажете съобщение в конзолата:
$ result = (Сравнение-Обект -РеференцияОбект $ oldadm -DifferenceObject $ diff | Where-Object $ _. SideIndicator -eq "=>" | Select-Object -ExpandProperty InputObject) -join ","
Ако ($ резултат)
msg * "Потребителят е добавен към групата на администратори на домейни: $ result"
Или изпратете имейл с командлета Send-MailMessage:
Ако ($ резултат)
Send-MailMessage -SmtpServer msg01 -от [email protected] -До администратора@winitpro.ru -Subject "Потребителят е добавен към групата на администратори на домейни: $ result" -Body "Съобщение създадено $ date" -Priority High
Този скрипт може да бъде запазен във файла admins_group_changes.ps1 и да се изпълнява редовно, като се използва планировчик (как да се създаде задача за планиране с помощта на PowerShell). Нека създадем нова задача за планиращия, който изпълнява нашия скрипт PowerShell веднъж на ден, който проверява състава на групата администратори на домейни с локално запазен списък.
$ Trigger = Ново планираноTaskTrigger -На 10:00 ч. -Дневно
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C: \ PS \ admins_group_changes.ps1"
Регистрация-ScheduledTask -TaskName "Проверка на администраторска група" -Trigger $ Trigger -User $ потребител -Action $ Action -RunLevel най-високо-сила
Така съставът на групата администратори ще се проверява веднъж на ден и в случай на промени, администраторът ще получи известие (изскачащо съобщение или писмо).