Jednostavan sustav revizije uklanjanja datoteka i mapa za Windows Server

Svaki Windows administrator suočen je sa situacijom kada bijesni korisnici žele znati tko je točno izbrisao mega važnu datoteku s godišnjim izvješćem u zajedničkoj mapi na datotečnom poslužitelju. Te se informacije mogu dobiti samo ako izvršite reviziju brisanja datoteka i mapa na datotečnom poslužitelju, a u protivnom ostaje samo za vraćanje izbrisane datoteke iz sigurnosne kopije (a već ih radite?) I slegnite ramenima.

No čak i ako je uključena revizija brisanja datoteka, pronalazak nečega u zapisnicima može biti problematičan. Prvo, teško je pronaći željeni zapis među tisućama događaja (nema zdravih načina pretraživanja događaja koji su zanimljivi fleksibilnim filtriranjem u sustavu Windows), a drugo, ako je datoteka odavno izbrisana, ovaj događaj može jednostavno izostati iz dnevnika, jer bila je prepisana novijem.

U ovom ćemo članku pokazati primjer organizacije na ugrađenim Windows alatima. sustavi revizije brišu datoteke i mape u mrežnom direktoriju (datotečni poslužitelj) sa snimanjem događaja u zasebnoj bazi podataka u MySQL-u.

Zbog postojanja baze podataka s podacima o svim izbrisanim datotekama, administrator će moći dati odgovore na pitanja:

  • Tko je i kada izbrisao datoteku
  • Iz koje je datoteke izbrisana datoteka?
  • U kojem trenutku trebate vratiti sigurnosnu kopiju

Prije svega, na Windows datotečnom poslužitelju morate omogućiti reviziju događaja koji osiguravaju da se podaci o brisanju datoteke zabilježe u zapisu sustava. Ovaj smo postupak već ispitali u članku Revizija pristupa datotekama i mapama u sustavu Windows.

Revizija se može omogućiti zajedničkom politikom. Pristup objektu revizije u odjeljku s pravilima Sigurnosne postavke -> Lokalna politika -> Politika revizije

Ili (po mogućnosti) naprednim revizijskim politikama u GPO-u: Sigurnosne postavke -> Napredna konfiguracija politike revizije -> Pristup objektu -> Sustav datoteka datoteka revizije.

vijeće. Provođenje revizije nameće dodatne troškove sistemskim resursima. Koristite s oprezom, posebno za visoko učitane datotečne poslužitelje..

U svojstvima zajedničke mrežne mape (Sigurnost -> Napredno -> Revizija) uklanjanje datoteka u kojima želimo nadzirati, za grupu svako omogućiti reviziju brisanja mapa i datoteka (brisanje podmape i slika).

vijeće. Revizija brisanja datoteka u određenoj mapi također se može omogućiti putem PowerShell-a:

$ Path = "D: \ javno"
$ AuditChangesRules = Novi objektni sistem.Security.AccessControl.FileSystemAuditRule ('Svi', 'Izbriši, ObrišiSubdirektorije i Fifile', 'Nema', 'Nema', 'Uspjeh')
$ Acl = Get-Acl-Path $ Path
$ Acl.AddAuditRule ($ AuditChangesRules)
Set-Acl -Path $ Path -AclObject $ Acl

Kada se datoteka uspješno obriše, događaj ID-a događaja pojavljuje se u sigurnosnom dnevniku sustava 4663 od izvora Microsoft Windows provjera sigurnosti. Opis događaja sadrži podatke o nazivu izbrisane datoteke, računu pod kojim je izvršeno brisanje i nazivu procesa.

Dakle, događaji koji nas zanimaju zapisani smo u dnevnik, vrijeme je da napravimo tablicu na MySQL poslužitelju koja se sastoji od sljedećih polja:

  • Naziv poslužitelja
  • Ime udaljene datoteke
  • Vrijeme uklanjanja
  • Ime korisnika koji je izbrisao datoteku

MySQL upit za stvaranje takve tablice izgledat će ovako:

CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR (100), ime datoteke VARCHAR (255), dt_time DATETIME, user_name VARCHAR (100), PRIMARY KEY (ID));

primjedba. Detaljno smo ispitali značajke rada s MySQL bazom podataka u članku Rad s MySQL bazom podataka iz PowerShell-a

Skripta za prikupljanje podataka iz dnevnika događaja. Filtriramo dnevnik događaja sa ID 4663 za tekući dan.

$ today = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ LogName = "Sigurnost"; starttime = "$ danas"; id = 4663 | Foreach
$ event = [xml] $ _. ToXml ()
ako ($ događaj)

$ Time = Datum dobivanja $ _. Vrijeme izrađeno -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6]. "# Tekst"
$ User = $ event.Event.EventData.Data [1]. "# Tekst"
$ Computer = $ event.Event.System.computer

Sljedeća skripta bilježi primljene podatke u MySQL bazu podataka na udaljenom poslužitelju:

Set-ExecutionPolicy RemoteSigned
Add-Type-Path 'C: \ Programske datoteke (x86) \ MySQL \ MySQL Connector Net 6.9.8 \ Skupštine \ v4.5 \ MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'server = 10.7.7.13; uid = posh; pwd = P @ ssw0rd; baza podataka = aduser'
$ Veza.Otvorite ()
$ sql = Novi objekt MySql.Data.MySqlClient.MySqlCommand
$ sql.Connection = $ veza
$ today = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ LogName = "Sigurnost"; starttime = "$ danas"; id = 4663 | Foreach
$ event = [xml] $ _. ToXml ()
ako ($ događaj)

$ Time = Datum dobivanja $ _. Vrijeme izrađeno -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6]. "# Tekst"

$ File = $ File.Replace ('\', '|')
$ User = $ event.Event.EventData.Data [1]. "# Tekst"
$ Computer = $ event.Event.System.computer
$ sql.CommandText = "UMETITE INTO track_del (server, ime datoteke, dt_time, korisničko ime) VALUES ('$ Computer', '$ File', '$ Time', '$ User')"
$ sql.ExecuteNonQuery ()


$ Reader.Zatvori ()
$ Connection.Close ()

Sada, kako biste saznali tko je izbrisao datoteku "dokument1 - Kopija.DOC", dovoljno je pokrenuti sljedeću skriptu u PowerShell konzoli.

$ DeletedFile = "% document1 - Kopiraj.DOC%"
Set-ExecutionPolicy RemoteSigned
Add-Type-Path 'C: \ Programske datoteke (x86) \ MySQL \ MySQL Connector Net 6.9.8 \ Skupštine \ v4.5 \ MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'server = 10.7.7.13; uid = posh; pwd = P @ ssw0rd; baza podataka = aduser'
$ Veza.Otvorite ()
$ MYSQLCommand = Novi objekt MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = Novi objekt MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = Novi objektni sustav.Data.DataSet
$ MYSQLCommand.Connection = $ veza
$ MYSQLCommand.CommandText = "SELECT korisničko ime, dt_time iz track_del-a gdje je naziv datoteke LIKE '$ DeletedFile'"
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, "podaci")
foreach ($ DataSet u $ MYSQLDataSet.tables [0])

write-host "Korisnik:" $ DataSet.user_name "at:" $ DataSet.dt_time

$ Connection.Close ()

U konzoli dobivamo korisničko ime i vrijeme brisanja datoteke.

primjedba. jer otkriven je problem, chir znak "\" nije zapisan u bazu podataka, zamijenili smo ga s "|". Prema tome, ako trebate odrediti puni put do datoteke, prilikom dohvaćanja iz baze podataka, možete izvršiti obrnutu zamjenu $ DataSet.file_name.Replace ('|', '\'). Hvala Alex Kornev na komentaru.!

Skripta za izbacivanje podataka iz dnevnika u bazu podataka može se izvesti jednom na kraju dana prema planeru ili prekinuti na događaju brisanja (na događaju), što zahtijeva mnogo resursa. Sve ovisi o zahtjevima sustava..

vijeće. Morate biti sigurni da je sigurnosni dnevnik dovoljno velik da može sadržavati sve događaje dana. U protivnom ćete morati izvršavati zadatak izbacivanja podataka iz dnevnika u bazu podataka češće od 1 puta dnevno, ili općenito kod okidača. Za radnu stanicu Maksimalna veličina dnevnika obično postavljeni barem 64 Mb na sjeveru - 262 MB. Ostavite mogućnost prepisa na (Prepišite događaje prema potrebi).

Ako želite, analogno tome, jednostavnom web stranicom možete reagirati na php da biste dobili informacije o krivcima za brisanje datoteka u prikladnijem obliku. Zadatak rješava bilo koji php programer za 1-2 sata.

Važan savjet. Ako zapisnik sadrži podatke o brisanju datoteke od strane korisnika, nemojte žuriti da ih nedvosmisleno protumačite kao namjerne ili čak zlonamjerne. Mnogi programi (posebno MS Office programi griješe) prilikom spremanja podataka prvo stvaraju privremenu datoteku, spremaju je u nju i brišu staru verziju datoteke. U tom slučaju ima smisla dodatno upisati u bazu podataka naziv procesa koji je izvršio brisanje datoteke (polje ProcessName događaja) i analizirati brisanje datoteka uzimajući u obzir tu činjenicu. Ili potpuno radikalno filtrirajte događaje iz takvih procesa smeća, na primjer, winword.exe, excel.exe itd..

Dakle, predložili smo ideju i određeni opći okvir sustava revizije i pohranu podataka o izbrisanim datotekama u mrežnim kuglicama, a po želji se mogu lako izmijeniti kako bi odgovarali vašim potrebama.