Sie können die Dateisystemobjektzugriffsereignisüberwachung verwenden, um einen bestimmten Benutzer zu identifizieren, der eine bestimmte Datei erstellt, gelöscht oder geändert hat. In diesem Artikel zeigen wir Ihnen, wie Sie die Ereignisüberwachung für Dateien in einem freigegebenen Netzwerkordner unter Windows Server 2016 konfigurieren. Nach dem Konfigurieren der Überwachung können Sie die Informationen aus der Ereignisanzeige verwenden, um den Benutzer zu finden, der eine bestimmte Datei auf dem Dateiserver gelöscht hat.
Wie aktiviere ich die Überwachungsrichtlinie für den Datei- und Ordnerzugriff unter Windows?
Standardmäßig ist File System Object Access Audit auf Windows Server nicht aktiviert. Sie können Überwachungseinstellungen mithilfe von Gruppenrichtlinien aktivieren und konfigurieren. Wenn Sie Überwachungsrichtlinien auf mehreren Servern oder Computern aktivieren müssen, können Sie Domänen-Gruppenrichtlinienobjekte verwenden (konfigurierbar über die mmc-Konsole gpmc.msc
). Wenn Sie die Überwachung nur auf einem Server konfigurieren möchten, können Sie den lokalen Gruppenrichtlinien-Editor verwenden.
- Öffnen Sie die Konsole des Editors für lokale Gruppenrichtlinien –
gpedit.msc
; - Wechseln Sie zum Abschnitt Gruppenrichtlinienobjekt mit erweiterten Überwachungsrichtlinien: Windows-Einstellungen -> Sicherheitseinstellungen – > Konfiguration der erweiterten Überwachungsrichtlinie – > Objektzugriff;
- Öffnen Sie die Audit-Dateisystemrichtlinie und geben Sie an, dass nur erfolgreiche Zugriffsereignisse auf Dateisystemobjekte protokolliert werden sollen (Konfigurieren Sie die folgenden Überwachungsereignisse -> Erfolg);
Sie können auch die Überwachung des Zugriffs auf lokale Objekte mithilfe der Überwachungsobjektzugriffsrichtlinie unter Windows-Einstellungen -> Sicherheitseinstellungen -> Lokale Richtlinie -> Überwachungsrichtlinie aktivieren. Die Verwendung der Dateisystemüberwachungsrichtlinie ist jedoch vorzuziehen, da nur NTFS-Zugriffsereignisse verfolgt werden.
- Speichern Sie die Änderungen und aktualisieren Sie Ihre lokalen Gruppenrichtlinieneinstellungen mit dem Befehl:
gpupdate /force
.
Konfigurieren von Datei- und Überwachungseinstellungen in einem freigegebenen Ordner
Jetzt müssen Sie die Überwachung in den Eigenschaften des freigegebenen Netzwerkordners konfigurieren, auf den Sie den Zugriff verfolgen möchten. Führen Sie den Datei-Explorer aus und öffnen Sie die Ordnereigenschaften. Gehen Sie zur Registerkarte Sicherheit. Klicken Sie auf die Schaltfläche Erweitert -> Wechseln Sie zur Registerkarte Überwachung.
Wenn die Meldung „Sie müssen Administrator sein oder die entsprechenden Berechtigungen zum Anzeigen der Überwachungseigenschaften dieses Objekts erhalten haben“ angezeigt wird, klicken Sie auf die Schaltfläche Weiter.
Klicken Sie dann auf die Schaltfläche Hinzufügen, um den Benutzer oder die Gruppe anzugeben, für die Sie Überwachungsereignisse erfassen möchten. Wenn Sie Zugriffsereignisse für alle Benutzer verfolgen möchten, geben Sie die Gruppe Jeder an.
Anschließend müssen Sie angeben, welche Berechtigungen für den Zugriff auf das Objekt protokolliert werden sollen. Um nur Ereignisse zum Löschen von Dateien im Ereignisprotokoll zu speichern, klicken Sie auf die Schaltfläche Erweiterte Berechtigungen anzeigen. Lassen Sie in der Ereignisliste die Überwachung nur für Ordner– und Dateilöschereignisse – Löschen und Löschen von Unterordnern und Dateien.
$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
Wenn der Benutzer nun eine Datei oder einen Ordner im freigegebenen Netzwerkordner löscht, wird das Ereignis File System -> Audit Success file delete im Sicherheitsprotokoll mit der Ereignis-ID 4663 aus der Microsoft Windows-Sicherheitsüberwachungsquelle angezeigt.
Öffnen Sie die mmc-Konsole der Ereignisanzeige (eventvwr.msc
) und erweitern Sie den Abschnitt Windows-Protokolle -> Sicherheit. Aktivieren Sie den Ereignisprotokollfilter nach der EventID 4663.
Öffnen Sie eines der verbleibenden Ereignisse in der Ereignisanzeige. Wie Sie sehen, enthält es Informationen zum Namen der gelöschten Datei, zum Konto des Benutzers, der die Datei gelöscht hat, und zum Prozessnamen.
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
Nach dem Aktivieren der Dateizugriffsüberwachungsrichtlinie finden Sie im Sicherheitsprotokoll :
- Wer hat die Datei aus dem freigegebenen Netzwerkordner gelöscht und wann es passiert ist;
- Welche Anwendung (Prozess) wurde verwendet, um die Datei zu löschen;
- An welchem Datum muss die Sicherung wiederhergestellt werden.
Wie schreibe ich Ereignisse zum Löschen von Dateien in die SQL-Datenbank (MySQL / MSSQL)?
Selbst wenn die Prüfung der gelöschten Dateien aktiviert ist, kann es jedoch schwierig sein, etwas in den Protokollen zu finden. Erstens ist es ziemlich schwierig, einen bestimmten Eintrag unter Tausenden von Ereignissen zu finden (in Windows gibt es kein praktisches Tool zum Suchen eines Ereignisses mit einem flexiblen Filter). Zweitens, wenn eine Datei vor langer Zeit gelöscht wurde, fehlt dieses Ereignis möglicherweise in den Protokollen, da es durch neue Ereignisse überschrieben wurde.
Sie können alle Dateilöschereignisse in der SQL-Datenbank speichern. Sie können Microsoft SQL Server-, Elasticsearch- oder MySQL / MariaDB-Datenbanken zum Speichern Ihrer Ereignisse verwenden.
In diesem Beispiel zeigen wir Ihnen, wie Sie Überwachungsereignisse in einer separaten Datenbanktabelle in MySQL protokollieren. Ich werde das folgende Tabellenformat verwenden:
- Servername;
- Name der gelöschten Datei;
- Datum und Uhrzeit;
- Name des Benutzers, der die Datei gelöscht hat.
Die MySQL-Abfrage zum Erstellen dieser Tabelle sieht folgendermaßen aus:
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));
Wenn Sie die Microsoft SQL Server-Datenbank verwenden möchten, lesen Sie den Artikel „Wie führe ich eine MSSQL Server-Abfrage von PowerShell aus?“
Um Ereignisse mit der EventID 4663 aus dem Sicherheitsprotokoll für den aktuellen Tag abzurufen, können Sie das folgende PowerShell-Skript verwenden:
$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
}
}
Das nächste PowerShell-Skript schreibt die Daten, die Sie erhalten, in die MySQL-Datenbank auf einem Remoteserver (mit der IP-Adresse 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()