Egyszerű fájl- és mappatávolítási ellenőrző rendszer a Windows Server számára

Bármely Windows rendszergazda olyan helyzetben van, amikor a dühös felhasználók meg akarják tudni, ki pontosan törölte a mega fontos fájlt az éves jelentéssel a fájlkiszolgáló megosztott mappájában. Ez az információ csak akkor szerezhető be, ha megvizsgálja a fájlok és mappák törlését a fájlkiszolgálón, különben csak a törölt fájl visszaállítása a biztonsági másolatból (és máris megtette őket?), És vállat vont..

De még akkor is, ha be van kapcsolva a fájl törlés ellenőrzése, problémás lehet a naplókban valami megtalálása. Először, meglehetősen nehéz megtalálni a kívánt rekordot több ezer esemény közül (nincs ésszerű eszköz a érdekes esemény kereséséhez rugalmas szűréssel a Windows rendszerben), és másodszor, ha a fájlt régen törölték, akkor ez az esemény egyszerűen hiányzik a naplóból, mert újabb írta.

Ebben a cikkben a beépített Windows eszközök szervezeti példáját mutatjuk be Az ellenőrző rendszerek fájlokat és mappákat törölnek egy megosztott hálózati könyvtárban (fájlkiszolgáló) események rögzítésével egy külön adatbázisban a MySQL-ben.

Mivel létezik egy adatbázis, amely tartalmazza az összes törölt fájlt, az adminisztrátor a következő kérdésekre ad választ:

  • Ki és mikor törölte a fájlt
  • Milyen alkalmazásból törli a fájlt?
  • Mikor kell visszaállítania egy biztonsági másolatot

Mindenekelőtt a Windows fájlkiszolgálón engedélyeznie kell az események ellenőrzését, amely biztosítja, hogy a fájl törlésével kapcsolatos információkat rögzítsék a rendszernaplóban. Ezt az eljárást már a Fájlok és mappák hozzáférésének ellenőrzése című cikkben vizsgáltuk meg.

Az ellenőrzést egy közös házirend segítségével lehet engedélyezni. Objektum-hozzáférés ellenőrzése az irányelvek szakaszban Biztonsági beállítások -> Helyi házirend -> Ellenőrzési házirend

Vagy (lehetőleg) a csoportházirend-objektum fejlett ellenőrzési politikáin keresztül: Biztonsági beállítások -> Speciális ellenőrzési házirend-konfiguráció -> Objektum-hozzáférés -> Audit fájlrendszer.

tanács. Az ellenőrzés végrehajtása további költségeket ró a rendszer erőforrásaira. Óvatosan használja, különösen a nagy terhelésű fájlkiszolgálók esetén..

A megosztott hálózati mappa tulajdonságaiban (Biztonság -> Speciális -> Felügyelet) azoknak a fájloknak a eltávolítása, amelyeket meg akarunk figyelni, a csoport számára mindenki lehetővé teszi a mappák és fájlok törlésének ellenőrzését (Törlés almappákat és fájlok).

tanács. Egy adott mappában lévő fájlok ellenőrzési törlése a PowerShell használatával is engedélyezhető:

$ Path = "D: \ Public"
$ AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule ('Mindenki', 'Törlés, DeleteSubdirectoriesAndFiles', 'Nincs', 'Nincs', 'Siker')
$ Acl = Get-Acl -Path $ elérési út
$ Acl.AddAuditRule ($ AuditChangesRules)
Set-Acl -Path $ Path -AclObject $ Acl

A fájl sikeres törlésekor az Event ID esemény megjelenik a rendszer biztonsági naplójában 4663 forrásból Microsoft Windows biztonsági audit. Az esemény leírása információkat tartalmaz a törölt fájl nevéről, a fiókról, amelyben a törlést végrehajtották, és a folyamat nevére.

Tehát a számunkra érdekes eseményeket a naplóba írják, ideje létrehozni egy táblázatot a MySQL szerveren, amely a következő mezőkből áll:

  • Szerver neve
  • Távoli fájlnév
  • Eltávolítási idő
  • A fájlt törlő felhasználó neve

A MySQL lekérdezés egy ilyen tábla létrehozásához a következőképpen néz ki:

Létrehozása tábla track_del (azonosító INT NEM NULL AUTO_INCREMENT, szerver VARCHAR (100), fájlnév VARCHAR (255), dt_time DATETIME, felhasználónév VARCHAR (100), PRIMARY KULCS (ID));

megjegyzés. A MySQL adatbázis használatával kapcsolatos részleteket a PowerShell MySQL adatbázis kezelése című cikkben vizsgáltuk meg részletesen

Szkript az eseménynaplóból származó információk gyűjtésére. Szűrjük az eseménynaplót az ID 4663 azonosítóval az aktuális napra.

$ ma = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ LogName = "Biztonság"; starttime = "$ today"; id = 4663 | Foreach
$ esemény = [xml] $ _. ToXml ()
if ($ esemény)

$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6]. "# Szöveg"
$ Felhasználó = $ event.Event.EventData.Data [1]. "# Szöveg"
$ Computer = $ event.Event.System.computer

A következő szkript rögzíti a kapott adatokat egy távoli kiszolgáló MySQL adatbázisában:

Set-ExecutionPolicy RemoteSigned
Kiegészítő típus - 'C: \ Program Files (x86) elérési út: \ MySQL \ MySQL Connector Net 6.9.8 \ Összeállítások \ v4.5 \ MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'szerver = 10.7.7.13; uid = posh; pwd = P @ ssw0rd; adatbázis = használó'
$ Connection.Open ()
$ sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$ sql.Connection = $ kapcsolat
$ ma = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ LogName = "Biztonság"; starttime = "$ today"; id = 4663 | Foreach
$ esemény = [xml] $ _. ToXml ()
if ($ esemény)

$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6]. "# Szöveg"

$ File = $ File.Replace ('\', '|')
$ Felhasználó = $ event.Event.EventData.Data [1]. "# Szöveg"
$ Computer = $ event.Event.System.computer
$ sql.CommandText = "INSERT INTO track_del (szerver, fájlnév, dt_time, felhasználónév) ÉRTÉKEK ('$ Computer', '$ File', '$ Time', '$ User')
$ sql.ExecuteNonQuery ()


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

Most, hogy megtudja, ki törölte a fájlt "document1 - Copy.DOC", elegendő a következő szkript futtatása a PowerShell konzolon.

$ DeletedFile = "% document1 - Copy.DOC%"
Set-ExecutionPolicy RemoteSigned
Kiegészítő típus - 'C: \ Program Files (x86) elérési út: \ MySQL \ MySQL Connector Net 6.9.8 \ Összeállítások \ v4.5 \ MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ ConnectionString = 'szerver = 10.7.7.13; uid = posh; pwd = P @ ssw0rd; adatbázis = használó'
$ Connection.Open ()
$ MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = Új objektum System.Data.DataSet
$ MYSQLCommand.Connection = $ kapcsolat
$ MYSQLCommand.CommandText = "SELECT user_name, dt_time from track_del, ahol a fájlnév LIKE '$ DeletedFile'"
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, "data")
foreach ($ DataSet a $ MYSQLDataSet.table-ban [0])

write-host "Felhasználó:" $ DataSet.user_name "itt:" $ DataSet.dt_time

$ Connection.Close ()

A konzolban megkapjuk a felhasználónevet és a fájl törlési idejét.

megjegyzés. mert problémát észleltek, a "\" chir karaktert nem írják az adatbázisba, helyettesítettük "|" -val. Ennek megfelelően, ha meg kell adnia a fájl teljes elérési útját, amikor az adatbázisból lekérdezi, akkor végrehajthatja a $ DataSet.file_name.Replace ('|', '\') fordított cseréjét. Köszönet Alex Kornevnek a megjegyzésért.!

Az adatoknak a naplóból az adatbázisba történő törlésére szolgáló szkript a nap végén egyszerre futtatható az ütemező szerint, vagy letehet egy törlési eseményre (eseményen), amely erőforrás-igényesebb. Minden a rendszerigényektől függ..

tanács. Gondoskodnod kell arról, hogy a biztonsági napló elég nagy-e ahhoz, hogy tartalmazza a nap összes eseményét. Ellenkező esetben napi egyszeri gyakorisággal vagy általában eseményindítóval kell az adatokat a naplóból az adatbázisba dönteni. Munkahelyre Maximális naplóméret általában legalább meg 64 Mb északon - 262 MB. Hagyja felül az felülírási lehetőséget (Az eseményeket felülírja szükség szerint).

Ha kívánja, analógia útján reagálhat egy egyszerű weboldalra a php-re, hogy információkat szerezzen a fájlok kényelmesebb formában történő törlésének bűnöséről. A feladatot bármelyik php programozó meg tudja oldani 1-2 órán belül.

Fontos tipp. Ha a napló információkat tartalmaz egy fájl egy felhasználó általi törléséről, ne siess egyértelműen értelmezni azt szándékos vagy akár rosszindulatúnak is. Számos program (főleg az MS Office programjai) az adatok mentésekor először ideiglenes fájlt hoz létre, elmenti a dokumentumba, és törli a fájl régi verzióját. Ebben az esetben érdemes az adatbázisba írni a fájl törlését végrehajtó folyamat nevét (az esemény ProcessName mezője), és elemezni a fájlok törlését, figyelembe véve ezt a tényt. Vagy teljesen radikálisan szűrheti az ilyen szemetes folyamatok eseményeit, például a Winword.exe, az Excel.exe stb..

Ezért javaslatot tettünk az ellenőrzési rendszer ötletére és egy általános keretére, valamint a törölt fájlokkal kapcsolatos információk tárolására a hálózati labdákban, ha szükséges, könnyen módosítható az Ön igényeihez.