Включаем аудит доступа к папкам и файлам в Windows
Политики аудита файловой системы Windows позволяют отслеживать все события доступа к определенным файлам и папкам на диске. С помощью политик аудита вы можете выявить события создания, чтения, изменения, удаления файлов и папок на файловой системе NTFS в Windows. Чаще всего аудит файловой используется для контроля доступа и изменений в общих сетевых папках, к которым одновременно могут обращаться несколько пользователей.
Включить политику аудита доступа к объектам файловой системы Windows
По умолчанию в Windows отключен аудит событий доступа к файлам и папкам. Включить аудит можно с помощью групповой политики. На отдельностоящем сервере для настройки политика аудита используется консоль редактора локальной групповой политики (
gpedit.msc
). Если вам нужно включить аудит сразу на множестве компьютеров в домене AD, используйте консоль управления доменными GPO (
gpmc.msc
).
- Откройте редактор GPO и перейдите в раздел Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> System Audit Policies -> Object Access;
- Откройте политику Audit File System и укажите, что вы хотите сохранять в журнал только успешные события доступа к объектам файловой системы (Configure the following audit events -> Success);

- Сохраните изменения и обновите настройки локальной групповой политики с помощью команды
gpupdate /force
.
Можно включить локальную политику аудита файловой системы из командной строки. Вывести доступные категории аудита:
AuditPol.exe /list /subcategory:*
Включить аудит успешных событий доступа к объектам файловой системы:
AuditPol.exe /set /subcategory:"File System" /success:enable
Вывести настройки категории аудита:
AuditPol.exe /get /category:"Object Access"

Настройка аудита событий на файлах и папках Windows
Несмотря на то, что в Windows включена политика аудита доступа к файлам и папкам, фактически событий в Event Viewer еще не попадают. Администратор должен вручную настроить параметры аудита на файлах и папках, которые нужно отслеживать.
К примеру, вы хотите отслеживать события чтения, изменения и создания файлов в каталоге C:Docs.
- Откройте свойства папки и перейдите на вкладку Security -> Advanced -> Auditing;

- Нажмите кнопку Add и в поле Principal выберите пользователя или группы, чью события доступа нужно отслеживать. Если нужно отслеживать доступ для всех пользователей, выберите Users (или Everyone, если нужно контролировать доступ системных процессов);
- В списке Type укажите, что нужно отслеживать только успешные событий (
Success
); - В Applies to можно указать, нужно ли применить аудит для папки, файлов, вложенных объектов (по умолчанию выбрано This folder, subfolders and files);
- В списке Advanced permissions выберите только те действия с файлами и папками, которые вы хотите отправлять в журнал аудита. Например: события чтения (List folder/read data) и изменения файлов (Create files or folders / write or append data)

- Сохраните настройки аудита.
Можно включить аудит для каталога с помощью PowerShell:
$Path = "C:Docs"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('BUILTINUsers', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl
Настройки аудита папки можно вывести с помощью PowerShell:
(Get-Acl "C:Docs" -Audit).Audit

Чтобы рекурсивно просканировать все каталоги и найти папки, на которых включен аудит файловой системы, воспользуйтесь таким скриптом:
$folders=Get-ChildItem "c:docs" -Recurse |Where-Object {$_.PSIsContainer}
foreach ($folder in $folders)
{
$auditacl=(Get-Acl $folder.FullName -Audit).audit
if ($auditacl -ne "") {write-host $folder.FullName}
}
Просмотр событий аудита доступа к файлам и папкам в Windows
Теперь, если с файлами в указанной папке выполняются какие-то действия, политика аудита записывает их в Event Viewer. Чтобы просмотреть события:
-
- Запустите консоль Event Viewer (
eventvwr.msc
); - Перейдите в раздел Windows Logs -> Security и отфильтруйте лог по источнику:
Microsoft Windows security auditing
, Task Category:
File System
;
. - Откройте содержимое любого события. Например в событии с EventID 4663 (
An attempt was made to access an object
) содержится информация:О пользователе, который произвел действие над фалйов:
Subject: Account Name:
Имя файла:
Object Name:
Тип операции (изменение файла в этом случае):
Accesses: WriteData (or AddFile)

- Запустите консоль Event Viewer (
Однако из за ограниченных возможностей фильтрации и поиска в событиях Event Viewer, использовать эту консоль для поиска всех операции с определенным файлом довольно неудобно.
Для вывода всех событий, связанных с определенным объектом лучше использовть PowerShell. Следующий PowerShell скрипт выведет все события доступа, связанные с указанным файлом (для получения списка событий исопльзуется производительный командлет Get-WinEvent):
$fileName = "C:docs13131.txt"
$results = Get-WinEvent -FilterHashtable @{logname='Security'; id=4663,4659} |`
Where-Object { $_.message -match $fileName -and $_.message -notmatch "Account Name:s*machine$*"}`
foreach ($result in $results) {
$Account = $result.properties[1].Value
$objectName = $result.properties[6].Value
$accessMask = $result.properties[8].Value
if ( $accessMask -like "*00000000-*") { $accessMask=$result.properties[9].Value}
$accessMask2 = $result.properties[9].Value
$fileOperation = ""
switch -Wildcard ($accessMask) {
"*%%1538*" { $fileOperation = "READ_CONTROL" }
"*%%4416*" { $fileOperation = "ReadData (or ListDirectory)" }
"*%%4417*" { $fileOperation = "WriteData (or AddFile)" }
"*%%4418*" { $fileOperation = "AppendData (or AddSubdirectory or CreatePipeInstance)" }
"*%%4419*" { $fileOperation = "ReadEA" }
"*%%4420*" { $fileOperation = "WriteEA" }
"*%%4423*" { $fileOperation = "ReadAttributes" }
"*%%4424*" { $fileOperation = "WriteAttributes" }
"*%%4426*" { $fileOperation = "Delete" }
"*%%4428*" { $fileOperation = "ReadControl" }
"*%%4429*" { $fileOperation = "WriteDAC" }
"*%%4430*" { $fileOperation = "WriteOwner" }
"*%%4432*" { $fileOperation = "Synchronize" }
"*%%4433*" { $fileOperation = "AccessSystemSecurity" }
"*%%4434*" { $fileOperation = "MaximumAllowed" }
"*%%4436*" { $fileOperation = "GenericAll" }
"*%%4437*" { $fileOperation = "GenericExecute" }
"*%%4438*" { $fileOperation = "GenericWrite" }
"*%%4439*" { $fileOperation = "GenericRead" }
"*%%1537*" { $fileOperation = "DELETE" }
default { $fileOperation = "Unknown" }
}
Write-Host $result.Id $result.TimeCreated $Account $objectName $fileOperation
}

Вы можете отправлять собранные события аудита в вашу систему сбора логов, базу данных, текстовый лог файл или отправлять email уведомление через Send-MailMessage при доступе/модификации отслеживаемого файла.
Windows Server 2019
Включаем аудит доступа к папкам и файлам в Windows