u kunt objecttoegangsevenementcontrole gebruiken om een specifieke gebruiker te identificeren die een specifiek bestand heeft gemaakt, verwijderd of gewijzigd. In dit artikel laten we u zien hoe u gebeurteniscontrole configureert voor bestanden in een gedeelde netwerkmap op Windows Server 2016. Nadat u de controle hebt geconfigureerd, kunt u de informatie van de logboeken gebruiken om de gebruiker te vinden die een specifiek bestand op de bestandsserver heeft verwijderd.
hoe controlebeleid voor toegang tot bestanden en mappen inschakelen op Windows?
standaard is Objecttoegangscontrole voor bestandssysteem niet ingeschakeld op Windows Server. U kunt controle-instellingen inschakelen en configureren met Groepsbeleid. Als u controlebeleid op meerdere servers of computers moet inschakelen, kunt u groepsbeleidsobjecten van het domein gebruiken (configureerbaar met de mmc-console gpmc.msc
). Als u controle op slechts één server wilt configureren, kunt u de Editor voor lokaal groepsbeleid gebruiken.
- Open de Editor voor lokaal groepsbeleid–
gpedit.msc
; - Ga naar de sectie GPO met geavanceerd controlebeleid: Windows Settings – > Security Settings – > Advanced Audit Policy Configuration – > Object Access;
- Open het controlebestandssysteem policy en geef op dat u alleen succesvolle toegangsgebeurtenissen tot bestandssysteem-objecten wilt registreren (Configureer de volgende controlegebeurtenissen – > succes);
u kunt ook controle van toegang tot lokale objecten inschakelen met behulp van het Controleobjecttoegangsbeleid onder Windows-instellingen- > beveiligingsinstellingen- > Lokaal beleid – > controlebeleid. Het gebruik van het auditbeleid voor bestandssystemen verdient echter de voorkeur, omdat het alleen NTFS-toegangsgebeurtenissen bijhoudt.
- sla de wijzigingen op en werk uw lokale Groepsbeleid instellingen bij met het commando:
gpupdate /force
.
Controleinstellingen voor verwijderde bestanden configureren op een gedeelde map
nu moet u controle configureren in de eigenschappen van de netwerkmap share waartoe u toegang wilt volgen. Voer File Explorer en open de map eigenschappen. Ga naar het tabblad Beveiliging. Klik op de knop Geavanceerd – > ga naar het tabblad Controle.
als het bericht “U moet beheerder zijn of de juiste rechten hebben gekregen om de controle-eigenschappen van dit object te bekijken” verschijnt, klikt u op de knop Doorgaan.
klik vervolgens op de knop Toevoegen om de gebruiker of groep op te geven waarvoor u auditgebeurtenissen wilt vastleggen. Als u toegangsgebeurtenissen voor alle gebruikers wilt bijhouden, geeft u de groep Iedereen op.
vervolgens moet u opgeven welke machtigingen worden gebruikt om toegang te krijgen tot het object moet worden geregistreerd. Als u alleen gebeurtenissen voor het verwijderen van bestanden wilt opslaan in het gebeurtenislogboek, klikt u op de knop Geavanceerde machtigingen weergeven. In de gebeurtenislijst, laat controle alleen voor map en bestand verwijderen gebeurtenissen-verwijderen en verwijderen van submappen en bestanden.
$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
als de gebruiker nu een bestand of map in de gedeelde netwerkmap verwijdert, verschijnt het bestandssysteem -> Audit Success file delete event in het beveiligingslogboek met Event ID 4663 uit de Microsoft Windows security auditing source.
Open de logboeken mmc-console (eventvwr.msc
), vouw de sectie Windows Logs -> beveiliging uit. Activeer gebeurtenislogfilter met EventID 4663.
Open een van de resterende gebeurtenissen in de logboeken. Zoals u kunt zien, bevat het informatie over de naam van het verwijderde bestand, het account van de gebruiker die het bestand verwijderd en de procesnaam.
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
na het inschakelen van controlebeleid voor bestandstoegang, kunt u vinden in het beveiligingslogboek :
- wie het bestand uit de gedeelde netwerkmap heeft verwijderd en wanneer het gebeurde;
- welke toepassing (proces) werd gebruikt om het bestand te verwijderen;
- Wat is de datum waarop de back-up moet worden hersteld.
Hoe verwijder bestanden naar de SQL-Database (MySQL/MSSQL)?
echter, zelfs als de audit van de verwijderde bestanden is ingeschakeld, kan het lastig zijn om iets in de logs te vinden. Ten eerste is het heel moeilijk om een specifieke vermelding te vinden tussen duizenden gebeurtenissen (in Windows zijn er geen handige tool om een gebeurtenis te zoeken met een flexibel filter). Ten tweede, als een bestand lang geleden werd verwijderd, kan deze gebeurtenis afwezig zijn in de logs, omdat het werd overschreven door nieuwe gebeurtenissen.
u kunt alle gebeurtenissen voor het verwijderen van bestanden opslaan in de SQL-database. U kunt Microsoft SQL Server, Elasticsearch of MySQL/MariaDB databases gebruiken om uw evenementen op te slaan.
in dit voorbeeld laten we u zien hoe u auditgebeurtenissen logt in een aparte database tabel op een MySQL. Ik zal het volgende tabelformaat gebruiken:
- servernaam;
- naam van het verwijderde bestand;
- datum en tijd;
- naam van de gebruiker die het bestand heeft verwijderd.
de MySQL-query om deze tabel aan te maken ziet er zo uit:
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));
als je de Microsoft SQL Server database wilt gebruiken, bekijk dan het artikel ” Hoe voer je een MSSQL Server Query uit vanuit PowerShell?”
Om gebeurtenissen met EventID 4663 vanuit het logboek voor de huidige dag, kunt u gebruik maken van de volgende PowerShell script:
$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
}
}
Het volgende PowerShell script zal schrijven de gegevens die u krijgt van de MySQL database op een externe server (met het IP-adres 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()