Podívejme se na příklady procesu vytvoření jednoduchého systému pro informování správce o přidání nového uživatele do skupiny zabezpečení služby Active Directory. Chceme například sledovat změnu skupiny správců domén a pokud k ní bude přidán nový uživatel, dostaneme oznámení (dopisem nebo vyskakovacím oknem).
Pro uspořádání takového řešení existují dvě možnosti:
- Můžete povolit auditování událostí na řadičích domény a sledovat výskyt události, když je uživatel přidán do skupiny zabezpečení (EventID 4728)
- Uložte místní textový soubor se seznamem uživatelů v určité skupině a pravidelně jej porovnávejte s aktuálními členy doménové skupiny
Obsah:
- Audit přidávání uživatele do skupiny v řadiči domény
- Porovnání současného složení skupiny domén se šablonou
Audit přidávání uživatele do skupiny v řadiči domény
V případě, že máte ve svém GPO povoleno zásady auditu Konfigurace počítače -> Nastavení systému Windows -> Nastavení zabezpečení -> Pokročilá konfigurace auditu -> Správa účtu -> Správa zabezpečení skupiny auditu, poté, když je uživatel přidán do skupiny Active Directory, se v protokolu zabezpečení zobrazí událost EventId 4728 (Člen byl přidán do globální skupiny podporující zabezpečení).
Pomocí PowerShell můžete sledovat výskyt této události v protokolu zabezpečení. Například všechny události s tímto kódem zobrazujeme do 24 hodin na řadiči domény. Pro větší přehlednost zobrazíme název skupiny AD, která se změnila, který účet byl přidán a který z administrátorů přidal uživatele do skupiny (skript podle příkladu z článku Získání seznamu uživatelů AD vytvořených za 24 hodin).
$ time = (get-date) - (new-timespan -h 24)
Get-WinEvent -FilterHashtable @ LogName = "Security"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
if ($ event)
$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Text"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Text"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Text"
$ dc = $ event.Event.System.computer
$ dc + „|“ + $ Čas + „|“ + „|“ + $ ADGroup + „|“ + $ NewUser + „|“ + $ AdminUser
Nyní v řadiči domény musíte vytvořit nový úkol pro plánovače a svázat jeho spuštění s událostí 4728. Když k této události dojde, odešlete uživateli zprávu (jak svázat skript k události je popsán v článku Spouštěče událostí systému Windows a spuštění skriptu PowerShell, když nastane událost, nebudu ji opakovat).
Problém je však v tom, že je zkontrolován pouze jeden protokol DC. Pokud byl uživatel přidán do skupiny na jiném řadiči domény, tato událost se nezobrazí. Můžete si samozřejmě vytvořit předplatné událostí z několika řadičů DC nebo třídit skrze všechny řadiče skriptem, ale pokud je v doméně velké množství řadičů domény, není to všechno příliš pohodlné.
Tip. Příklad smyčky od výčtu všech řadičů domény v doméně pomocí funkce Get-ADDomainController a shromažďování událostí z nich může vypadat takto (příklad z tohoto článku):$ time = (get-date) - (new-timespan -hour 124)
$ DCs = Get-ADDomainController -Filter *
foreach ($ DC v $ DCs)
Get-WinEvent -ComputerName $ DC -FilterHashtable @ LogName = "Security"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
if ($ event)
$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Text"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Text"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Text"
$ dc = $ event.Event.System.computer
$ dc + „|“ + $ Čas + „|“ + „|“ + $ ADGroup + „|“ + $ NewUser + „|“ + $ AdminUser
Zvažte jiný přístup.
Porovnání současného složení skupiny domén se šablonou
Pomocí rutiny Get-ADGroupMember zobrazte seznam uživatelů ve skupině Domain Admin a uložte výsledný seznam do textového souboru (vytváříme rekurzivní seznam uživatelů s ohledem na vnořené skupiny).
(Get-ADGroupMember --Identity "Domain Admins" --recursive) .Name | Out-File C: \ PS \ DomainAdmins.txt
Nyní přidejte nového uživatele do skupiny Domain Admins a seznam uživatelů znovu uložte, ale do druhého souboru.
(Get-ADGroupMember --Identity "Domain Admins" --recursive) .Name | Out-File C: \ PS \ DomainAdminsCurrent.txt
Nyní porovnejte dva soubory a zobrazte rozdíly v seznamech:
$ oldadm = GC C: \ PS \ DomainAdmins.txt
$ newadm = GC C: \ PS \ DomainAdminsCurrent.txt
$ diff = Compare-Object -ReferenceObject $ oldadm -DifferenceObject $ newadm | Select-Object -ExpandProperty InputObject
write-host $ diff
Byl zobrazen účet, který byl přidán do skupiny AD..
V konzole můžete zobrazit zprávu:
$ result = (Compare-Object -ReferenceObject $ oldadm -DifferenceObject $ diff | Where-Object $ _. SideIndicator -eq "=>" | | Select-Object -ExpandProperty InputObject) -join ","
Pokud ($ výsledek)
msg * "Uživatel byl přidán do skupiny Domain Admins: $ result"
Nebo pošlete e-mail pomocí rutiny Send-MailMessage:
Pokud ($ výsledek)
Send-MailMessage -SmtpServer msg01 -Z [email protected] -To [email protected] -Subject "Uživatel byl přidán do skupiny Domain Admins: $ result" -Body "Zpráva byla vytvořena $ date" -Priority High
Tento skript lze uložit do souboru admins_group_changes.ps1 a spouštět pravidelně pomocí plánovače (jak vytvořit plánovač pomocí PowerShell). Vytvořme novou úlohu pro plánovač, který jednou denně spustí náš skript PowerShell, který zkontroluje složení skupiny správců domén s místně uloženým seznamem.
$ Trigger = New-ScheduledTaskTrigger -At 10:00 - Denně
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction - Execute "PowerShell.exe" -Argument "C: \ PS \ admins_group_changes.ps1"
Register-ScheduledTask -TaskName "Check Admins Group" -Trigger $ Trigger --User $ User -Action $ Action -RunLevel Highest -Force
Tedy složení skupiny administrátorů bude kontrolováno jednou denně a v případě změn bude administrátorovi zasláno oznámení (vyskakovací zpráva nebo dopis).