Obavijesti kada je korisnik dodan u grupu Active Directory

Pogledajmo primjere procesa stvaranja jednostavnog sustava za obavještavanje administratora o dodavanju novog korisnika u sigurnosnu grupu Active Directory. Na primjer, želimo pratiti promjenu grupe administratora domene, a ako joj se doda novi korisnik, primit ćemo obavijest (putem pisma ili skočnog prozora).

Postoje dvije mogućnosti za organiziranje takvog rješenja:

  • Možete omogućiti reviziju događaja na kontrolerima domena i pratiti pojavu događaja kada je korisnik dodan u sigurnosnu grupu (EventID 4728)
  • Spremite lokalnu tekstualnu datoteku s popisom korisnika u određenoj grupi i povremeno je uspoređujte s trenutnim članovima grupe domena

sadržaj:

  • Revizija dodavanja korisnika u grupu na kontroleru domene
  • Usporedba trenutnog sastava grupe domena sa predloškom

Revizija dodavanja korisnika u grupu na kontroleru domene

U slučaju da su u vašem GPO-u omogućena pravila revizije Konfiguracija računala -> Postavke sustava Windows -> Postavke sigurnosti -> Napredna konfiguracija revizije -> Upravljanje računom -> Upravljanje sigurnosnom skupinom revizije, kad se korisnik doda u Active Directory grupu, događaj EventId se pojavljuje u Sigurnosnom dnevniku 4728 (Član je dodan u globalnu grupu koja omogućuje sigurnost).

Pomoću PowerShell-a možete pratiti pojavu ovog događaja u sigurnosnom zapisniku. Na primjer, sve događaje s ovim kodom prikazujemo u roku od 24 sata na kontroleru domene. Radi praktičnosti prikazat ćemo naziv AD grupe koja se promijenila, koji je račun dodan i tko je od administratora dodao korisnika u grupu (skripta slijedeći primjer iz članka Dobivanje popisa AD korisnika kreiranih za 24 sata).

$ time = (datum uzimanja) - (novo razdoblje - sat 24)
Get-WinEvent -FilterHashtable @ LogName = "Sigurnost"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
ako ($ događaj)

$ Time = Datum dobivanja $ _. Vrijeme izrađeno -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Tekst"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Tekst"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Tekst"
$ dc = $ event.Event.System.computer
$ dc + "|" + $ Vrijeme + "|" + "|" + $ ADGroup + "|" + $ NewUser + "|" + $ AdminUser

Sada na kontroleru domene morate stvoriti novi zadatak za planer i vezati njegovo pokretanje na događaj 4728. Kada se dogodi ovaj događaj, pošaljite korisniku poruku (kako vezati skriptu za događaj opisano je u članku Windows Event Triggers i pokretanje PowerShell skripte kada se dogodi događaj, neću ga ponoviti).

Međutim, problem je što se provjerava samo jedan DC zapisnik. Ako je korisnik dodan u grupu na drugom regulatoru domene, nećete vidjeti ovaj događaj. Možete, naravno, stvoriti pretplatu na događaje s nekoliko DC-a ili sortirati sve kontrolere sa skriptu, ali ako je u domeni velik broj DC-ova, sve to nije baš zgodno.

vijeće. Primjer petlje za nabrajanje svih DC-ova u domeni pomoću Get-ADDomainController i prikupljanje događaja iz njih može izgledati ovako (primjer iz ovog članka):

$ time = (datum uzimanja) - (novo razdoblje - sat 124)
$ DCs = Get-ADDomainController -Filter *
foreach ($ DC u $ DC)
Get-WinEvent -ComputerName $ DC -FilterHashtable @ LogName = "Sigurnost"; ID = 4728; StartTime = $ Time | Foreach
$ event = [xml] $ _. ToXml ()
ako ($ događaj)

$ Time = Datum dobivanja $ _. Vrijeme izrađeno -UFormat "% Y-% m-% d% H:% M:% S"
$ NewUser = $ event.Event.EventData.Data [0]. "# Tekst"
$ ADGroup = $ event.Event.EventData.Data [2]. "# Tekst"
$ AdminUser = $ event.Event.EventData.Data [6]. "# Tekst"
$ dc = $ event.Event.System.computer
$ dc + "|" + $ Vrijeme + "|" + "|" + $ ADGroup + "|" + $ NewUser + "|" + $ AdminUser



Razmislite o drugačijem pristupu.

Usporedba trenutnog sastava grupe domena sa predloškom

Pomoću cmdleta Get-ADGroupMember prikažite popis korisnika u grupi Administrator domena i rezultirajući popis spremite u tekstualnu datoteku (sastavljamo rekurzivni popis korisnika, uzimajući u obzir ugniježđene grupe).

(Get-ADGroupMember -Identity "Administratori domene" - rekurzivni) .Name | Izvanmrežna datoteka C: \ PS \ DomainAdmins.txt

Sada dodajte novog korisnika u grupu Administrator domena i ponovno spremite popis korisnika, ali u drugu datoteku.

(Get-ADGroupMember -Identity "Administratori domene" - rekurzivni) .Name | Izvan datoteke C: \ PS \ DomainAdminsCurrent.txt

Sada usporedite dvije datoteke i prikažite razlike na popisima:

$ oldadm = GC C: \ PS \ DomainAdmins.txt
$ newadm = GC C: \ PS \ DomainAdminsCurrent.txt
$ diff = Usporedi-Objekt -ReferenceObject $ oldadm -DifferenceObject $ newadm | Select-Object -ExpandProperty InputObject
pisanje-host $ razl

Prikazao se račun koji je dodan u grupu AD..

U konzoli možete prikazati poruku:

$ result = (Usporedi-Objekt -ReferenceObject $ oldadm -DifferenceObject $ diff | Where-Object $ _. SideIndicator -eq "=>" | Select-Object -ExpandProperty InputObject) -join ","
Ako ($ rezultat)
msg * "Korisnik dodan u grupu administratora domena: $ result"

Ili pošaljite e-poštu pomoću cmdleta Send-MailMessage:

Ako ($ rezultat)
Send-MailMessage -SmtpServer msg01 -Od [email protected] -To [email protected] -Predmet "Korisnik je dodan u grupu Administrator domena: $ result" -Body "Poruka je kreirana $ date" -Priority High

Ova se skripta može spremiti u datoteku admins_group_changes.ps1 i redovno pokrenuti pomoću alata za planiranje (kako stvoriti zadatak planera pomoću PowerShell-a). Kreirajmo novi zadatak za planer koji jednom dnevno pokreće našu PowerShell skriptu koja provjerava sastav grupe administratora domene s lokalno spremljenim popisom.

$ Trigger = Novo-zakazaniTaskTrigger -Ona 10:00 -Dnevno
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C: \ PS \ admins_group_changes.ps1"
Registrirajte se-ScheduledTask -TaskName "Provjeri administrativnu grupu" -Trigger $ Trigger -User $ User -Action $ Action -RunLevel Highest -Force

Tako će se sastav grupe administratora provjeravati jednom dnevno, a u slučaju promjena administrator će dobiti obavijest (pop-up poruku ili pismo).