Opozori, ko je uporabnik dodan v skupino Active Directory

Oglejmo si primere postopka ustvarjanja preprostega sistema za obveščanje skrbnika o dodajanju novega uporabnika v varnostno skupino Active Directory. Na primer, želimo izslediti spremembo skupine skrbnikov domen in če je temu dodan nov uporabnik, bomo prejeli obvestilo (po pošti ali v pojavnem oknu).

Obstajata dve možnosti za organizacijo takšne rešitve:

  • Omogočite lahko nadzor dogodkov na nadzornikih domene in sledite pojavu dogodka, ko je uporabnik dodan v varnostno skupino (EventID 4728)
  • Shranite lokalno besedilno datoteko s seznamom uporabnikov v določeni skupini in jo občasno primerjajte s trenutnimi člani skupine domen

Vsebina:

  • Revizija dodajanja uporabnika v skupino na krmilniku domene
  • Primerjava trenutne sestave skupine domen s predlogo

Revizija dodajanja uporabnika v skupino na krmilniku domene

V primeru, da imate v vašem GPO omogočeno revizijsko politiko Konfiguracija računalnika -> Nastavitve sistema Windows -> Varnostne nastavitve -> Napredna konfiguracija revizije -> Upravljanje računa -> Upravljanje varnostne skupine revizije, ko se uporabnik doda v skupino Active Directory, se dogodek EventId prikaže v varnostnem dnevniku 4728 (Član je bil dodan v globalno skupino, ki podpira varnost).

S programom PowerShell lahko v varnostnem dnevniku spremljate pojav tega dogodka. Na primer, vse dogodke s to kodo prikažemo v 24 urah na krmilniku domene. Za lažje prikazovanje bomo prikazali ime skupine AD, ki se je spremenila, kateri račun je bil dodan in kdo od skrbnikov je uporabnika v skupino dodal (skript po vzoru članka iz članka Pridobitev seznama uporabnikov AD, ustvarjen v 24 urah).

$ time = (datum-datum) - (novi čas -ur 24)
Get-WinEvent -FilterHashtable @ LogName = "Varnost"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
če ($ dogodek)

$ Time = Datum pridobitve $ _. TimeCreate -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Besedilo"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Besedilo"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Besedilo"
$ dc = $ event.Event.System.com Computer
$ dc + “|” + $ Čas + "|" + „|“ + $ ADGroup + "|" + $ NewUser + "|" + $ AdminUser

Zdaj morate na krmilniku domene ustvariti novo nalogo za razporejevalnik in njegovo vezavo zavezati na dogodek 4728. Ko se ta dogodek zgodi, uporabniku pošljite sporočilo (kako vezati skript na dogodek je opisano v članku Windows Event Triggers in Running PowerShell script, ko se dogodek zgodi, ga ne bom ponovil).

Vendar je težava v tem, da je preverjen le en enosmerni dnevnik. Če je bil uporabnik v skupino dodan na drugem krmilniku domene, tega dogodka ne boste videli. Seveda lahko ustvarite naročnino na dogodke iz več DC-jev ali razvrstite vse krmilnike s skriptom, če pa je v domeni veliko število DC-jev, vse to ni zelo priročno.

Namig. Primer zanke pri naštevanju vseh DC-jev v domeni z uporabo Get-ADDomainController in zbiranje dogodkov iz njih lahko izgleda tako (primer iz tega članka):

$ time = (datum-datum) - (nov časovni razpon -our 124)
$ DCs = Get-ADDomainController -Filter *
foreach ($ DC v $ DC)
Get-WinEvent -ComputerName $ DC -FilterHashtable @ LogName = "Varnost"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
če ($ dogodek)

$ Time = Datum pridobitve $ _. TimeCreate -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Besedilo"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Besedilo"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Besedilo"
$ dc = $ event.Event.System.com Computer
$ dc + “|” + $ Čas + "|" + „|“ + $ ADGroup + "|" + $ NewUser + "|" + $ AdminUser



Razmislite o drugačnem pristopu.

Primerjava trenutne sestave skupine domen s predlogo

Z ukaznim ukazom Get-ADGroupMember prikažite seznam uporabnikov v skupini Administrator domene in dobljeni seznam shranite v besedilno datoteko (sestavimo rekurziven seznam uporabnikov ob upoštevanju ugnezdenih skupin).

(Get-ADGroupMember -Identity "Domain Admins" -recursive) .Name | Izhodna datoteka C: \ PS \ DomainAdmins.txt

Zdaj dodajte novega uporabnika v skupino upravnikov domene in ponovno shranite seznam uporabnikov, vendar v drugo datoteko.

(Get-ADGroupMember -Identity "Domain Admins" -recursive) .Name | Out-File C: \ PS \ DomainAdminsCurrent.txt

Zdaj primerjajte dve datoteki in prikažite razlike na seznamih:

$ oldadm = GC C: \ PS \ DomainAdmins.txt
$ newadm = GC C: \ PS \ DomainAdminsCurrent.txt
$ diff = Primerjaj-Objekt -ReferenceObject $ oldadm -DifferenceObject $ newadm | Izberi-objekt-razširi lastnost InputObject
zapisovanje gostitelja $ razl

Prikazan je bil račun, ki je bil dodan skupini AD..

V konzoli lahko prikažete sporočilo:

$ result = (Primerjaj-Objekt -ReferenceObject $ oldadm -DifferenceObject $ diff | Where-Object $ _. SideIndicator -eq "=>" | Select-Object -ExpandProperty InputObject) -join ","
Če ($ rezultat)
msg * "Uporabnik dodan skupini domenskih administratorjev: $ result"

Ali pa pošljite e-poštno sporočilo s cmdletom Send-MailMessage:

Če ($ rezultat)
Send-MailMessage -SmtpServer msg01 -Od [email protected] -To [email protected] -Subject "Uporabnik je bil dodan v skupino upraviteljev domene: $ result" -Body "Sporočilo je ustvarjeno $ date" -Priority High

Ta skript lahko shranite v datoteko admins_group_changes.ps1 in jo zaženete redno s planerjem (kako ustvariti nalogo načrtovalca s pomočjo PowerShell-a). Ustvarimo novo nalogo za planer, ki enkrat na dan zažene naš skript PowerShell, ki preverja sestavo skupine skrbnikov domen z lokalno shranjenim seznamom.

$ Trigger = Novo načrtovanoTaskTrigger -Ob 10:00 zjutraj
$ User = "NT ORGAN \ SISTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C: \ PS \ admins_group_changes.ps1"
Registriraj-ScheduledTask -TaskName "Preveri skupino administratorjev" -Trigger $ Trigger -User $ User -Action $ Action -PonLevel Highest -Force

Tako bo sestava skupine skrbnikov enkrat dnevno preverjena, v primeru sprememb pa bo administrator prejel obvestilo (pojavno sporočilo ali pismo).