za pomocą inspekcji zdarzeń dostępu do obiektów systemu plików można zidentyfikować konkretnego użytkownika, który utworzył, usunął lub zmodyfikował określony plik. W tym artykule pokażemy, jak skonfigurować inspekcję zdarzeń dla plików w udostępnionym folderze sieciowym w systemie Windows Server 2016. Po skonfigurowaniu inspekcji można użyć informacji z przeglądarki zdarzeń, aby znaleźć użytkownika, który usunął określony plik na serwerze plików.
jak włączyć zasady kontroli dostępu do plików i folderów w systemie Windows?
domyślnie Kontrola dostępu do obiektów systemu plików nie jest włączona w systemie Windows Server. Ustawienia audytu można włączyć i skonfigurować za pomocą zasad grupy. Jeśli chcesz włączyć zasady audytu na wielu serwerach lub komputerach, możesz użyć GPO domeny (konfigurowalne za pomocą konsoli mmc gpmc.msc
). Jeśli chcesz skonfigurować inspekcję tylko na jednym serwerze, możesz użyć lokalnego Edytora zasad grupy.
- Otwórz konsolę Edytora zasad grupy lokalnej–
gpedit.msc
; - przejdź do sekcji GPO z zaawansowanymi zasadami audytu: Ustawienia systemu Windows – > ustawienia zabezpieczeń – > Zaawansowana konfiguracja zasad audytu – > dostęp do obiektów;
- Otwórz Zasady audytu systemu plików i określ, że chcesz rejestrować tylko pomyślne zdarzenia dostępu do obiektów systemu plików( skonfiguruj następujące zdarzenia audytu – > sukces);
możesz również włączyć kontrolę dostępu do obiektów lokalnych, korzystając z zasad dostępu do obiektów Audyt w ustawieniach systemu Windows -> ustawienia zabezpieczeń -> Zasady lokalne -> Zasady audytu. Preferowane jest jednak stosowanie zasad kontroli systemu plików, ponieważ śledzi ona tylko zdarzenia dostępu NTFS.
- Zapisz zmiany i zaktualizuj ustawienia zasad lokalnych grupy za pomocą polecenia:
gpupdate /force
.
Konfigurowanie ustawień inspekcji usuniętych plików w folderze udostępnionym
teraz musisz skonfigurować inspekcję we właściwościach udostępnionego folderu sieciowego, do którego chcesz śledzić dostęp. Uruchom Eksplorator plików i otwórz Właściwości folderu. Przejdź do zakładki bezpieczeństwo. Kliknij przycisk Zaawansowane- > przejdź do karty audyt.
Jeśli pojawi się komunikat „musisz być administratorem lub masz odpowiednie uprawnienia do przeglądania właściwości audytu tego obiektu”, kliknij przycisk Kontynuuj.
, a następnie kliknij przycisk Dodaj, aby określić użytkownika lub grupę, dla których chcesz przechwytywać zdarzenia audytu. Jeśli chcesz śledzić zdarzenia dostępu dla wszystkich użytkowników, określ grupę Wszyscy.
następnie należy określić, które prawa dostępu do obiektu mają być rejestrowane. Aby zapisać tylko zdarzenia usuwania plików w dzienniku zdarzeń, kliknij przycisk Pokaż zaawansowane uprawnienia. Na liście zdarzeń pozostaw kontrolę tylko dla zdarzeń usuwania folderów i plików-Usuń i usuń podfoldery i pliki.
$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
teraz, jeśli użytkownik usunie dowolny plik lub folder w udostępnionym folderze sieciowym, Zdarzenie File System -> Audit Success file delete pojawi się w dzienniku zabezpieczeń z ID zdarzenia 4663 ze źródła inspekcji zabezpieczeń systemu Microsoft Windows.
Otwórz konsolę MMC przeglądarki zdarzeń (eventvwr.msc
), rozwiń sekcję dzienniki systemu Windows -> bezpieczeństwo. Włącz filtr dziennika zdarzeń przy pomocy EventID 4663.
Otwórz dowolne z pozostałych zdarzeń w przeglądarce zdarzeń. Jak widać, zawiera informacje o nazwie usuniętego pliku, koncie użytkownika, który usunął plik i nazwie procesu.
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
po włączeniu zasad kontroli dostępu do plików można znaleźć w dzienniku zabezpieczeń:
- kto usunął Plik z udostępnionego folderu sieciowego i kiedy to się stało;
- jaka aplikacja (proces) została użyta do usunięcia pliku;
- jaka jest data przywrócenia kopii zapasowej.
Jak zapisać zdarzenia usuwania plików do bazy danych SQL (MySQL / MSSQL)?
jednak nawet jeśli kontrola usuniętych plików jest włączona, może być kłopotliwe znalezienie czegoś w dziennikach. Po pierwsze, dość trudno jest znaleźć konkretny wpis wśród tysięcy zdarzeń (w Windows nie ma wygodnego narzędzia do wyszukiwania zdarzenia za pomocą elastycznego filtra). Po drugie, jeśli plik został usunięty dawno temu, to zdarzenie może być nieobecne w logach, ponieważ zostało nadpisane przez nowe zdarzenia.
możesz zapisać wszystkie zdarzenia usuwania plików w bazie danych SQL. Do przechowywania zdarzeń można użyć baz danych Microsoft SQL Server, Elasticsearch lub MySQL/MariaDB.
w tym przykładzie pokażemy, jak rejestrować zdarzenia audytu do osobnej tabeli bazy danych w MySQL. Użyję następującego formatu tabeli:
- Nazwa serwera;
- Nazwa usuniętego pliku;
- Data i godzina;
- nazwa użytkownika, który usunął plik.
zapytanie MySQL do utworzenia tej tabeli wygląda tak:
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));
jeśli chcesz korzystać z bazy danych Microsoft SQL Server, sprawdź artykuł ” Jak uruchomić zapytanie serwera MSSQL z PowerShell?”
aby uzyskać zdarzenia z EventID 4663 z dziennika zabezpieczeń dla bieżącego dnia, możesz użyć następującego skryptu PowerShell:
$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
}
}
następny skrypt PowerShell zapisze dane, które trafisz do bazy danych MySQL na zdalnym serwerze (z adresem 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;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()