du kan använda filsystemobjektåtkomsthändelsegranskning för att identifiera en specifik användare som skapade, raderade eller ändrade en specifik fil. I den här artikeln visar vi hur du konfigurerar händelsegranskning för filer i en delad nätverksmapp på Windows Server 2016. När du har konfigurerat revision kan du använda informationen från loggboken för att hitta användaren som raderade specifik fil på filservern.
Hur aktiverar du Granskningspolicy för fil-och mappåtkomst på Windows?
som standard är granskningen av Filsystemobjektåtkomst inte aktiverad på Windows Server. Du kan aktivera och konfigurera granskningsinställningar med Grupprincip. Om du behöver aktivera granskningsprinciper på flera servrar eller datorer kan du använda domän-GPO: er (konfigureras med MMC-konsolen gpmc.msc
). Om du bara vill konfigurera granskning på en server kan du använda lokal grupprincipredigerare.
- öppna konsolen för lokal grupprincipredigerare–
gpedit.msc
; - gå till GPO-avsnittet med avancerade granskningsprinciper: Windows-Inställningar – > säkerhetsinställningar – > avancerad Granskningsprincip – > Objektåtkomst;
- öppna granskningsfilsystemprincip och ange att du bara vill logga framgångsrika åtkomsthändelser till filsystemobjekt (konfigurera följande granskningshändelser – > framgång);
du kan också aktivera granskning av åtkomst till lokala objekt med hjälp av granskningsobjektåtkomstprincipen under Windows-Inställningar- > säkerhetsinställningar- > lokal princip – > Granskningsprincip. Att använda Filsystemsrevisionsprincipen är dock att föredra eftersom den bara spårar NTFS-åtkomsthändelser.
- spara ändringarna och uppdatera dina lokala grupppolicyinställningar med kommandot:
gpupdate /force
.
konfigurera inställningar för borttagning av filer i en delad mapp
nu måste du konfigurera granskning i egenskaperna för den delningsnätverksmapp du vill spåra åtkomst till. Kör File Explorer och öppna mappegenskaperna. Gå till fliken Säkerhet. Klicka på knappen Avancerat – > gå till fliken revision.
om meddelandet ”Du måste vara administratör eller har fått lämpliga behörigheter för att visa granskningsegenskaperna för det här objektet” visas, klicka på Fortsätt-knappen.
klicka sedan på knappen Lägg till för att ange den användare eller grupp som du vill fånga granskningshändelser för. Om du vill spåra åtkomsthändelser för alla användare anger du Gruppen alla.
då måste du ange vilka behörigheter som används för att komma åt objektet som ska loggas. Om du bara vill spara händelser för borttagning av filer i händelseloggen klickar du på knappen Visa avancerade behörigheter. I händelselistan, lämna revision endast för mapp och fil radering händelser-Ta bort och ta bort undermappar och filer.
$Path = "E:\Public"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl
om användaren tar bort någon fil eller mapp i den delade nätverksmappen visas filsystemet -> Audit Success file delete-händelsen i säkerhetsloggen med Händelse-ID 4663 från Microsoft Windows security auditing-källan.
öppna MMC-konsolen Event Viewer (eventvwr.msc
), expandera avsnittet Windows Logs -> säkerhet. Aktivera händelseloggen filter av EventID 4663.
öppna någon av de återstående händelserna i Event Viewer. Som du kan se innehåller den information om namnet på den raderade filen, kontot för användaren som raderade filen och processnamnet.
An attempt was made to access an object.Subject:Security ID: CORP\jsmithAccount Name: jsmithAccount Domain: CORPLogon ID: 0x32B12627Object:Object Server: SecurityObject Type: FileObject Name: E:\Distr\Backup.rarHandle ID: 0x7bc4Resource Attributes: S:AIProcess Information:Process ID: 0x4Process Name:Access Request Information:Accesses: DELETEAccess Mask: 0x10000
när du har aktiverat granskningspolicy för filåtkomst kan du hitta i säkerhetsloggen :
- vem raderade filen från den delade nätverksmappen och när den hände;
- vilken applikation (process) användes för att radera filen;
- vad är datumet för säkerhetskopian som ska återställas.
hur man skriver fil radering händelser till SQL-databas (MySQL/MSSQL)?
men även om granskningen av de raderade filerna är aktiverad kan det vara besvärligt att hitta något i loggarna. För det första är det ganska svårt att hitta en specifik post bland tusentals händelser (i Windows finns det inget bekvämt verktyg för att söka en händelse med ett flexibelt filter). För det andra, om en fil raderades för länge sedan, kan den här händelsen vara frånvarande i loggarna, eftersom den skrivits över av nya händelser.
du kan spara alla filer ta bort händelser till SQL-databasen. Du kan använda Microsoft SQL Server, Elasticsearch eller MySQL/MariaDB databaser för att lagra dina händelser.
i det här exemplet visar vi hur du loggar granskningshändelser till en separat databastabell på en MySQL. Jag kommer att använda följande tabellformat:
- servernamn;
- namn på den raderade filen;
- datum och tid;
- namn på användaren som har raderat filen.
MySQL-frågan för att skapa den här tabellen ser ut så här:
CREATE TABLE deleted_items (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
om du vill använda Microsoft SQL Server-databas, kolla in artikeln ” Hur man kör en MSSQL-Serverfråga från PowerShell?”
för att få händelser med EventID 4663 från säkerhetsloggen för den aktuella dagen kan du använda följande PowerShell-skript:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = $_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data."#text"
$User = $event.Event.EventData.Data."#text"
$Computer = $event.Event.System.computer
}
}
nästa PowerShell-skript skriver de data du får till MySQL-databasen på en fjärrserver (med IP-adressen 10.1.1.13):
Add-Type –Path 'C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = @{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = $_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data."#text"
$File = $File.Replace('\','|')
$User = $event.Event.EventData.Data."#text"
$Computer = $event.Event.System.computer
$sql.CommandText = "INSERT INTO deleted_items (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')"
$sql.ExecuteNonQuery()
}
}
$Reader.Close()
$Connection.Close()