Vous ne savez toujours pas comment suivre qui a supprimé le fichier / dossier de Windows server 2016 avec la stratégie d’audit ? Jetez un oeil à ce blog.
Chez Bobcares, nous avons constaté plusieurs erreurs liées à Windows dans le cadre de nos Services de gestion de serveurs pour les hébergeurs Web et les fournisseurs de services en ligne.
Aujourd’hui, nous allons voir comment suivre les fenêtres de fichiers / dossiers supprimées.
- Comment suivre Qui a supprimé le fichier / Dossier de Windows Server 2016 avec la Stratégie d’audit
- Comment activer la Stratégie d’audit d’accès aux fichiers et aux dossiers sous Windows
- Configuration des paramètres d’audit de fichiers supprimés sur un dossier partagé
- Comment écrire des événements de suppression de fichier dans la base de données SQL (MySQL/ MSSQL)
- Enregistrement des événements d’audit de suppression de fichier dans un fichier texte
Comment suivre Qui a supprimé le fichier / Dossier de Windows Server 2016 avec la Stratégie d’audit
Voyons maintenant comment nos ingénieurs de support trouvent qui a supprimé le fichier / dossier du serveur.
Nous utilisons l’audit d’événements d’accès aux objets du système de fichiers pour identifier un utilisateur spécifique qui a créé, supprimé ou modifié un fichier spécifique.
Nous allons maintenant voir comment configurer l’audit d’événements pour les fichiers sur un dossier réseau partagé sur Windows Server 2016. Après avoir configuré l’audit, nous utilisons les informations de l’observateur d’événements pour trouver l’utilisateur qui a supprimé un fichier spécifique sur le serveur de fichiers.
Cependant, lorsque nous supprimons un fichier d’un dossier réseau partagé, il est immédiatement supprimé au lieu d’être envoyé à la corbeille de l’utilisateur.
Comment activer la Stratégie d’audit d’accès aux fichiers et aux dossiers sous Windows
Par défaut, l’audit d’accès aux objets du système de fichiers ne sera pas activé sur Windows Server. Nous pouvons activer et configurer les paramètres d’audit à l’aide de la stratégie de groupe. Voici les étapes que nous suivons pour configurer l’audit sur un serveur à l’aide de l’Éditeur de stratégie de groupe local.
-
- Tout d’abord, nous ouvrons la console de l’Éditeur de stratégie de groupe local – gpedit.msc
- Ensuite, nous passons à la section GPO avec des stratégies d’audit avancées: Paramètres Windows > > Paramètres de sécurité > > Configuration avancée de la Stratégie d’audit > > Accès aux objets
- Après cela, nous ouvrons la stratégie du système de fichiers d’audit et spécifions que nous voulons enregistrer uniquement les événements d’accès réussis aux objets du système de fichiers (Configurez les événements d’audit suivants > > Succès)
- Enfin, nous enregistrons les modifications et mettons à jour les paramètres de la stratégie de groupe locale à l’aide de la commande ci-dessous.
gpupdate /force
Configuration des paramètres d’audit de fichiers supprimés sur un dossier partagé
Maintenant, nous configurons l’audit dans les propriétés du dossier réseau de partage auquel nous voulons suivre l’accès.
1. Tout d’abord, nous exécutons l’Explorateur de fichiers et ouvrons les propriétés du dossier. Nous allons dans l’onglet Sécurité et cliquez sur le bouton Avancé. Ensuite, nous passons à l’onglet Audit.
2. Si le message ci-dessous apparaît, cliquez sur le bouton Continuer.
You must be an administrator or have been given the appropriate privileges to view the audit properties of this object
3. Ensuite, nous cliquons sur le bouton Ajouter pour spécifier l’utilisateur ou le groupe pour lequel nous voulons capturer les événements d’audit. Si nous voulons suivre les événements d’accès pour tous les utilisateurs, nous spécifions le groupe Tout le monde.
4. Après cela, nous spécifions également les autorisations utilisées pour accéder à l’objet qui doivent être enregistrées. Pour enregistrer uniquement les événements de suppression de fichiers dans le journal des événements, cliquez sur le bouton Afficher les autorisations avancées. Dans la liste des événements, nous ne laissons l’audit que pour les événements de suppression de dossiers et de fichiers – Supprimer et supprimer les sous-dossiers et les fichiers.
Dans le cas où l’utilisateur supprime un fichier ou un dossier dans le dossier réseau partagé. Ensuite, l’événement de suppression du fichier de réussite de l’audit du système de fichiers – > apparaît dans le journal de sécurité avec l’ID d’événement 4663 de la source d’audit de sécurité Microsoft Windows.
Ensuite, nous ouvrons la console MMC de l’observateur d’événements (eventvwr.msc), développez la section de sécurité des journaux Windows – >. Activez le filtre du journal des événements par l’EventID 4663.
Après cela, nous ouvrons l’un des événements restants dans l’Observateur d’événements. Nous voyons qu’il contient des informations sur le nom du fichier supprimé, le compte de l’utilisateur qui a supprimé le fichier et le nom du processus.
An attempt was made to access an object.Subject:Security ID: CORP\jonAccount Name: jonAccount 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
Après avoir activé la stratégie d’audit d’accès aux fichiers, nous pouvons trouver les détails ci-dessous dans le journal de sécurité:
- Qui a supprimé le fichier du dossier réseau partagé et quand cela s’est produit
- Quelle application (processus) a été utilisée pour supprimer le fichier
- Quelle est la date de la sauvegarde à restaurer
Comment écrire des événements de suppression de fichier dans la base de données SQL (MySQL/ MSSQL)
Cependant, même si l’audit des fichiers supprimés est activé, il peut être gênant de trouver quelque chose dans la base de données SQL (MySQL/ MSSQL)
journaux. Premièrement, il est assez difficile de trouver une entrée spécifique parmi des milliers d’événements. Deuxièmement, si un fichier a été supprimé il y a longtemps, cet événement peut être absent des journaux, car il a été remplacé par de nouveaux événements.
Nous enregistrons tous les événements de suppression de fichiers dans la base de données SQL. Pour cela, nous utilisons les bases de données Microsoft SQL Server, Elasticsearch ou MySQL/MariaDB pour stocker les événements.
Par exemple, voyons comment consigner les événements d’audit dans une table de base de données distincte sur MySQL. Nous pouvons utiliser le format de tableau suivant:
- Nom du serveur
- Nom du fichier supprimé
- Date et heure
- Nom de l’utilisateur qui a supprimé le fichier
La requête MySQL pour créer ce tableau ressemble à ci-dessous:
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));
Pour obtenir des événements avec EventID 4663 à partir du journal de sécurité pour la journée en cours, nous utilisons le script PowerShell suivant:
$today = get-date -DisplayHint date -UFormat %Y-%m-%dGet-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}}
Le prochain script PowerShell écrira les données que nous obtenons dans la base de données MySQL sur un serveur distant (avec l’adresse IP 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;;database=aduser'}$Connection.Open()$sql = New-Object MySql.Data.MySqlClient.MySqlCommand$sql.Connection = $Connection$today = get-date -DisplayHint date -UFormat %Y-%m-%dGet-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()
Après avoir enregistré des événements dans une base de données externe, nous pouvons effacer ce journal des événements.
Maintenant, pour savoir qui a supprimé le fichier « Rapport annuel.DOC », nous exécutons le script ci-dessous dans la console PowerShell.
$DeletedFile = "%AnnualReport.DOC%"Set-ExecutionPolicy RemoteSignedAdd-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;;database=aduser'}$Connection.Open()$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter$MYSQLDataSet = New-Object System.Data.DataSet$MYSQLCommand.Connection=$Connection$MYSQLCommand.CommandText="SELECT user_name,dt_time from deleted_items where file_name LIKE '$DeletedFile'"$MYSQLDataAdapter.SelectCommand=$MYSQLCommand$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")foreach($DataSet in $MYSQLDataSet.tables){write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time}$Connection.Close()
Enfin, maintenant, nous voyons le nom d’utilisateur et l’heure à laquelle le fichier a été supprimé dans la console PS.
Enregistrement des événements d’audit de suppression de fichier dans un fichier texte
Si nous ne voulons pas utiliser un serveur de base de données distinct, nous enregistrons les événements d’audit de suppression de fichier dans un fichier journal en texte brut. Pour cela, nous utilisons ce script PowerShell pour enregistrer la sortie dans un fichier texte:
$Outfile = "C:\Logs\Deleted-file-history-log.txt"$today = get-date -DisplayHint date -UFormat %Y-%m-%dGet-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"$strLog = $Computer + " " + $File + " " + $Time + " " + $User$strLog | out-file $Outfile –append}}