Как посмотреть кто удалил файл из общей папки
Просмотр полной версии : Кто удаляет файлы?
Вирусов точно нет, т.к. стоит NOD32.
гы.
как самонадеяно.
Подробнее можно, какие файлы, как, когда удаляет. Пока версий много: начиная от мастера очиски рабочего стола (он, сцука, ярлыки трет :gigi: ), заканчивая NOD32.
Вам смешно. А меня пытаются подставить. Конечно есть свидетели, что я здесь ничего не удалял, да и вообще за компы не садился.
Подробнее можно, какие файлы, как, когда удаляет.
Всякие *.doc, exel`евские, картинки, файлы баз данных и т.п.
Помогите поймать вредителя.
1. Заходим в LSP: Start -> Settings -> Control Panel -> Administrative tols -> local security policy
2. Включаем аудит доступа к файлам: Local policy -> Audit Policy. Выставляем Object Access в Success, Failure.
3. Выделяем папку, откуда исчезают файлы. Смотрим её свойства -> Security
4. На закладке Security выбираем Advanced, далее — Auditing. Жмём Add.
5. Выбираем группу Everyone, жмём на Check names (название должно подчеркнуться). Жмём ОК
6. Выбираем Delete, всё закрываем.
Потом смотрим в Event Viewer -> Security, ищем нужные файлы
Локальная политика безопасности -> Локальные политики -> Политика аудита.
Аудит доступа к объектам выставляю Отказ.
Выделяю папку -> Свойства -> Безопасность -> Дополнительно -> Аудит -> Добавить
Выбрал группу «Все», нажал «Проверить имена». Жму Ок.
Далее, выбрать Удаление и поставить галочки. А где именно в столбцах: Успех и Отказ, или только отказ?
ruslansstu1146494329
В общем я поставил в политике аудита -> Аудит доступа к объектам: Успех и Отказ.
ruslansstu1146494940
Решил все это дело проверить.
Создал папку, скопировал туда несколько файлов и с другой машины по сети решил удалить. Во что я получил:
Тип события: Аудит успехов
Источник события: Security
Категория события: Доступ к объектам
Код события: 560
Дата: 01.05.2006
Время: 18:41:56
Пользователь: NATASHAАдминистратор
Компьютер: NATASHA
Описание:
Открытие объекта:
Сервер объекта: Security
Тип объекта: File
Имя объекта: D:РусланКопия WineLinux College.files
Код дескриптора: 2276
Код операции:
Код процесса: 4
Имя файла рисунка:
Основной пользователь: NATASHA$
Домен: COMPAUD
Код входа: (0x0,0x3E7)
Пользователь-клиент: Администратор
Домен клиента: NATASHA
Код входа клиента: (0x0,0xA7881)
Доступ DELETE
Привилегии —
Счетчик ограниченного SID: 0
Жаль, что не пишет с какой машины произведено удаление.
Жаль, что не пишет с какой машины произведено удаление.
Всё прекрасно пишет. Комп «NATASHA».
NaimaD1146518236
Компьютер: NATASHA
Жаль, что не пишет с какой машины произведено удаление.
Всё прекрасно пишет. Комп «NATASHA».
Компьютер: NATASHA
э-э-э. дело в том, что комп НАТАША — это тачка, на которой был запущен Эвент Вьюер, то бишь комп, на котором удаляли файлы, а не с которого удаляли файлы; думается, в одноранговой сетке узнать (только средствами оси) кто удалял — не карма
Пользователь: NATASHAАдминистратор
хмм. и одноранговая сеть
Это говорит о том, что удаляют локально. из под учетки локального администратора.
Т.е. это может быть radmin или аналог, telnet (или опять-же аналог) или вредный сервис — прога.
или удалают по сети подключаясь к этому компу под логин-паролем админа — сменить — проверить.
В пакет friendly pinger http://www.kilievich.com/fpinger/ входит логгер сетевых подключений. (по IP)
Сожно попробовать.
Или чтоб наверняка, filemon от sysinternals. Так определишь приложение, которое удаляет. но придется ловить момент.
Аудит удаления и доступа к файлам и запись событий в лог-файл средствами Powershell
Я думаю, многие сталкивались с задачей, когда к Вам приходят и спрашивают: «У нас тут файл пропал на общем ресурсе, был и не стало, похоже кто-то удалил, Вы можете проверить кто это сделал?» В лучшем случае вы говорите, что у вас нет времени, в худшем пытаетесь найти в логах упоминание данного файла. А уж когда включен файловый аудит на файловом сервере, логи там, мягко говоря «ну очень большие», и найти что-то там — нереально.
Вот и я, после очередного такого вопроса (ладно бекапы делаются несколько раз в день) и моего ответа, что: «Я не знаю кто это сделал, но файл я Вам восстановлю», решил, что меня это в корне не устраивает…
Начнем.
Для начала включим к групповых политиках возможность аудита доступа к файлам и папкам.
Локальные политики безопасности->Конфигурация расширенной политики безопасности->Доступ к объектам
Включим «Аудит файловой системы» на успех и отказ.
После этого на необходимые нам папки необходимо настроить аудит.
Проходим в свойства папки общего доступа на файловом сервере, переходим в закладку «Безопасность», жмем «Дополнительно», переходим в закладку «Аудит», жмем «Изменить» и «Добавить». Выбираем пользователей для которых вести аудит. Рекомендую выбрать «Все», иначе бессмысленно. Уровень применения «Для этой папки и ее подпапок и файлов».
Выбираем действия над которыми мы хотим вести аудит. Я выбрал «Создание файлов/дозапись данных» Успех/Отказ, «Создание папок/дозапись данных» Успех/отказ, Удаление подпапок и файлов и просто удаление, так же на Успех/Отказ.
Жмем ОК. Ждем применения политик аудита на все файлы. После этого в журнале событий безопасности, будет появляться очень много событий доступа к файлам и папкам. Количество событий прямопропорционально зависит от количества работающих пользователей с общим ресурсом, и, конечно же, от активности использования.
Итак, данные мы уже имеем в логах, остается только их оттуда вытащить, и только те, которые нас интересуют, без лишней «воды». После этого акурратно построчно занесем наши данные в текстовый файл разделяя данные симовлами табуляции, чтобы в дальнейшем, к примеру, открыть их табличным редактором.
А теперь очень интересный скрипт.
Скрипт пишет лог об удаленных файлах.
Как оказалось при удалении файлов и удалении дескрипторов создается одно и тоже событие в логе, под При этом в теле сообщения могут быть разные значения «Операции доступа»: Запись данных (или добавление файла), DELETE и т.д.
Конечно же нас интересует операция DELETE. Но и это еще не все. Самое интересное, то что, при обычном переименовании файла создается 2 события с ID 4663, первое с Операцией доступа: DELETE, а второе с операцией: Запись данных (или добавление файла). Значит если просто отбирать 4663 то мы будем иметь очень много недостоверной информации: куда попадут файлы и удаленные и просто переименованные.
Однако мной было замечено, что при явном удалении файла создается еще одно событие с ID 4660, в котором, если внимательно изучить тело сообщения, содержится имя пользователя и еще много всякой служебной информации, но нет имени файла. Зато есть код дескриптора.
Однако предшествующим данному событию было событие с ID 4663. Где как раз таки и указывается и имя файла, и имя пользователя и время, и операция как не странно там DELETE. И самое главное там имеется номер дескриптора, который соответствует номеру дескриптора из события выше (4660, помните? которое создается при явном удалении файла). Значит теперь, чтобы точно знать какие файлы удалены, необходимо просто найти все события с ID 4660, а так же предшествующие каждому этому событию, событие с кодом 4663, в котором будет содержаться номер нужного дескриптора.
Эти 2 события генерируются одновременно при удалении файла, но записываются последовательно, сначала 4663, потом 4660. При этом их порядковые номера различаются на один. У 4660 порядковый номер на единицу больше чем у 4663.
Именно по этому свойству и ищется нужное событие.
Т.е. берутся все события с ID 4660. У них берется 2 свойства, время создания и порядковый номер.
Далее в цикле по одному берется каждое событие 4660. Выбирается его свойства, время и порядковый номер.
Далее в переменную $PrevEvent заносится номер нужного нам события, где содержится нужная информация об удаленном файле. А так же определяются временные рамки в которых необходимо искать данное событие с определенным порядковым номером (с тем самым который мы занесли в $PrevEvent). Т.к. событие генерируется практически одновременно, то поиск сократим до 2х секунд: + — 1 секунда.
(Да, именно +1 сек и -1 сек, почему именно так, не могу сказать, было выявлено экспериментально, если не прибавлять секунду, то некоторые может не найти, возможно связано с тем, что возможно два эти события могут создаваться один раньше другой позже и наоборот).
Сразу оговорюсь, что искать только по порядковому номеру по всем событиям в течении часа — очень долго, т.к. порядковый номер находиться в теле события, и чтобы его определить, нужно пропарсить каждое событие — это очень долго. Именно поэтому необходим такой маленький период в 2 секунда (+-1сек от события 4660, помните?).
Именно в этом временном промежутке ищется событие с необходимым порядковым номером.
После того как оно найдено, работают фильтры:
Т.е. не записываем информацию об удаленных временных файлах (.*tmp), файлах блокировок документов MS Office (.*lock), и временных файлах MS Office (.*
$*)
Таким же образом берем необходимые поля из этого события, и пишем их в переменную $BodyL.
После нахождения всех событий, пишем $BodyL в текстовый файл лога.
Для лога удаленных файлов я использую схему: один файл на один месяц с именем содержащим номер месяца и год). Т.к. удаленных файлов в разы меньше чем файлов к которым был доступ.
В итоге вместо бесконечного «рытья» логов в поисках правды, можно открыть лог-файл любым табличным редактором и просмотреть нужные нам данные по пользователю или файлу.
Рекомендации
Вам придется самим определить время в течении которого вы будете искать нужные события. Чем больше период, тем дольше ищет. Все зависит от производительности сервера. Если слабенький — то начните с 10 минут. Посмотрите, как быстро отработает. Если дольше 10 минут, то либо увеличьте еще, вдруг поможет, либо наоборот уменьшите период до 5 минут.
После того как определите период времени. Поместите данный скрипт в планировщик задач и укажите, что выполнять данный скрипт необходимо каждые 5,10,60 минут (в зависимости какой период вы указали в скрипте). У меня указано каждый 60 минут. $time = (get-date) — (new-timespan -min 60).
Простая система аудита удаления файлов и папок для Windows Server
Любой администратор Windows сталкивался с ситуацией, когда разъяренные пользователи хотят узнать, кто именно удалил мега важный файл с годовым отчетом в общей папке на файловом сервере. Эту информацию можно получить только при условии ведения аудита удаления файлов и папок на файловом сервере, иначе останется только восстановить удаленный файл из резервной копии (а вы их уже делаете?) и развести руками.
Но, даже при включенном аудите удаления файлов, найти что-то в логах бывает проблематично. Во-первых, найти нужную запись среди тысячи событий довольно сложно (в Windows отсутствуют вменяемые средства поиска интересующего события с возможностью гибкой фильтрации), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, т.к. было перезатерто более новыми.
В этой статье мы покажем пример организации на встроенных средствах Windows системы аудита удаления файлов и папок в общем сетевом каталоге (файловом сервере) с записью событий в отдельную базу данных на MySQL.
Благодаря наличию БД с информацией обо всех удаленных файлах администратор сможет дать ответы на вопросы:
- Кто и когда удалил файл
- Из какого приложения удален файл
- На какой момент времени нужно восстанавливать бэкап
В первую очередь на файловом сервере Windows нужно включить аудит событий, обеспечивающий запись информации об удалении файлов в журнал системы. Эту процедуру мы уже рассматривали в статье Аудит доступа к файлам и папкам в Windows.
Аудит может быть включен через общую политику Audit Object Access в разделе политик Security Settings -> Local Policy -> Audit Policy
Или (предпочтительнее) через расширенные политики аудита в GPO: Security Settings -> Advanced Audit Policy Configuration -> Object Access -> Audit File System.
В свойствах общей сетевой папки (Security -> Advanced -> Auditing), удаление файлов в котором мы хотим отслеживать, для группы Everyone включим аудит событий удаления папок и файлов (Delete subfoldersand files).
Совет. Аудит удаления файлов в конкретной папке можно включить и через PowerShell:
$Path = «D: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
При успешном удалении файла в журнале безопасности системы появляется событие Event ID 4663 от источника Microsoft Windows security auditing. В описании события есть информация об имени удаленного файла, учетной записи из-под которой было выполнено удаление и имени процесса.
Итак, интересующие нас события пишутся в журнал, настала пора создать на сервере MySQL таблицу, состоящую из следующих полей:
- Имя сервера
- Имя удаленного файла
- Время удаления
- Имя пользователя, удалившего файл
MySQL запрос на создание такой таблицы будет выглядеть так:
CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
Скрипт сбора информации из журнала событий. Мы фильтруем журнал по событию с ID 4663 за текущий день
Следующий скрипт запишет полученные данные в БД MySQL на удаленном сервере:
Теперь, чтобы узнать, кто удалил файл «document1 — Copy.DOC», достаточно в консоли PowerShell выполнить следующий скрипт.
В консоли получаем имя пользователя и время удаления файла.
Скрипт сброса данных из журнала в БД можно выполнять один раз в конце дня по планировщику или повесить на событие удаления (On Event), что более ресурсоемко. Все зависит от требования к системе.
При желании по аналогии можно реагировать простую веб страницу на php для получения информации о виновниках удаления файлов в более удобном виде. Задача решается силами любого php программиста за 1-2 часа.
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.
Я думаю, многие сталкивались с задачей, когда к Вам приходят и спрашивают: «У нас тут файл пропал на общем ресурсе, был и не стало, похоже кто-то удалил, Вы можете проверить кто это сделал?» В лучшем случае вы говорите, что у вас нет времени, в худшем пытаетесь найти в логах упоминание данного файла. А уж когда включен файловый аудит на файловом сервере, логи там, мягко говоря «ну очень большие», и найти что-то там — нереально.
Вот и я, после очередного такого вопроса (ладно бекапы делаются несколько раз в день) и моего ответа, что: «Я не знаю кто это сделал, но файл я Вам восстановлю», решил, что меня это в корне не устраивает…
Начнем.
Для начала включим к групповых политиках возможность аудита доступа к файлам и папкам.
Локальные политики безопасности->Конфигурация расширенной политики безопасности->Доступ к объектам
Включим «Аудит файловой системы» на успех и отказ.
После этого на необходимые нам папки необходимо настроить аудит.
Проходим в свойства папки общего доступа на файловом сервере, переходим в закладку «Безопасность», жмем «Дополнительно», переходим в закладку «Аудит», жмем «Изменить» и «Добавить». Выбираем пользователей для которых вести аудит. Рекомендую выбрать «Все», иначе бессмысленно. Уровень применения «Для этой папки и ее подпапок и файлов».
Выбираем действия над которыми мы хотим вести аудит. Я выбрал «Создание файлов/дозапись данных» Успех/Отказ, «Создание папок/дозапись данных» Успех/отказ, Удаление подпапок и файлов и просто удаление, так же на Успех/Отказ.
Жмем ОК. Ждем применения политик аудита на все файлы. После этого в журнале событий безопасности, будет появляться очень много событий доступа к файлам и папкам. Количество событий прямопропорционально зависит от количества работающих пользователей с общим ресурсом, и, конечно же, от активности использования.
Итак, данные мы уже имеем в логах, остается только их оттуда вытащить, и только те, которые нас интересуют, без лишней «воды». После этого акурратно построчно занесем наши данные в текстовый файл разделяя данные симовлами табуляции, чтобы в дальнейшем, к примеру, открыть их табличным редактором.
#Задаем период, в течении которого мы будем запускать один раз скрипт, и искать нужные нам события. Здесь период задан - 1 час. Т.е. проверяются все события за последний час.
$time = (get-date) - (new-timespan -min 60)
#$BodyL - переменная для записи в лог-файл
$BodyL = ""
#$Body - переменная, в которую записываются ВСЕ события с нужным ID.
$Body = Get-WinEvent -FilterHashtable @{LogName="Security";ID=4663;StartTime=$Time}|where{ ([xml]$_.ToXml()).Event.EventData.Data |where {$_.name -eq "ObjectName"}|where {($_.'#text') -notmatch ".*tmp"} |where {($_.'#text') -notmatch ".*~lock*"}|where {($_.'#text') -notmatch ".*~$*"}} |select TimeCreated, @{n="Файл_";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "ObjectName"} | %{$_.'#text'}}},@{n="Пользователь_";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "SubjectUserName"} | %{$_.'#text'}}} |sort TimeCreated
#Далее в цикле проверяем содержит ли событие определенное слово (к примеру название шары, например: Secret)
foreach ($bod in $body){
if ($Body -match ".*Secret*"){
#Если содержит, то пишем в переменную $BodyL данные в первую строчку: время, полный путь файла, имя пользователя. И #в конце строчки переводим каретку на новую строчку, чтобы писать следующую строчку с данными о новом файле. И так #до тех пор, пока переменная $BodyL не будет содержать в себе все данные о доступах к файлам пользователей.
$BodyL=$BodyL+$Bod.TimeCreated+"`t"+$Bod.Файл_+"`t"+$Bod.Пользователь_+"`n"
}
}
#Т.к. записей может быть очень много (в зависимости от активности использования общего ресурса), то лучше разбить лог #на дни. Каждый день - новый лог. Имя лога состоит из Названия AccessFile и даты: день, месяц, год.
$Day = $time.day
$Month = $Time.Month
$Year = $Time.Year
$name = "AccessFile-"+$Day+"-"+$Month+"-"+$Year+".txt"
$Outfile = "serverServerLogFilesAccessFileLog"+$name
#Пишем нашу переменную со всеми данными за последний час в лог-файл.
$BodyL | out-file $Outfile -append
А теперь очень интересный скрипт.
Скрипт пишет лог об удаленных файлах.
#Переменная $Time тут имеет такое же назначение как в предыдущем скрипте.
$time = (get-date) - (new-timespan -min 60)
#$Events - содержит время и порядковый номер записи евента с ID=4660. И сортируем по порядковому номеру.
#!!!!Это важное замечание!!! При удалении файла создается сразу 2 записи, с ID=4660 и ID=4663.
$Events = Get-WinEvent -FilterHashtable @{LogName="Security";ID=4660;StartTime=$time} | Select TimeCreated,@{n="Запись";e={([xml]$_.ToXml()).Event.System.EventRecordID}} |sort Запись
#Самые важные команды поиска. Опишу принцип ниже, после листинга скрипта.
$BodyL = ""
$TimeSpan = new-TimeSpan -sec 1
foreach($event in $events){
$PrevEvent = $Event.Запись
$PrevEvent = $PrevEvent - 1
$TimeEvent = $Event.TimeCreated
$TimeEventEnd = $TimeEvent+$TimeSpan
$TimeEventStart = $TimeEvent- (new-timespan -sec 1)
$Body = Get-WinEvent -FilterHashtable @{LogName="Security";ID=4663;StartTime=$TimeEventStart;EndTime=$TimeEventEnd} |where {([xml]$_.ToXml()).Event.System.EventRecordID -match "$PrevEvent"}|where{ ([xml]$_.ToXml()).Event.EventData.Data |where {$_.name -eq "ObjectName"}|where {($_.'#text') -notmatch ".*tmp"} |where {($_.'#text') -notmatch ".*~lock*"}|where {($_.'#text') -notmatch ".*~$*"}} |select TimeCreated, @{n="Файл_";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "ObjectName"} | %{$_.'#text'}}},@{n="Пользователь_";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "SubjectUserName"} | %{$_.'#text'}}}
if ($Body -match ".*Secret*"){
$BodyL=$BodyL+$Body.TimeCreated+"`t"+$Body.Файл_+"`t"+$Body.Пользователь_+"`n"
}
}
$Month = $Time.Month
$Year = $Time.Year
$name = "DeletedFiles-"+$Month+"-"+$Year+".txt"
$Outfile = "serverServerLogFilesDeletedFilesLog"+$name
$BodyL | out-file $Outfile -append
Как оказалось при удалении файлов и удалении дескрипторов создается одно и тоже событие в логе, под ID=4663. При этом в теле сообщения могут быть разные значения «Операции доступа»: Запись данных (или добавление файла), DELETE и т.д.
Конечно же нас интересует операция DELETE. Но и это еще не все. Самое интересное, то что, при обычном переименовании файла создается 2 события с ID 4663, первое с Операцией доступа: DELETE, а второе с операцией: Запись данных (или добавление файла). Значит если просто отбирать 4663 то мы будем иметь очень много недостоверной информации: куда попадут файлы и удаленные и просто переименованные.
Однако мной было замечено, что при явном удалении файла создается еще одно событие с ID 4660, в котором, если внимательно изучить тело сообщения, содержится имя пользователя и еще много всякой служебной информации, но нет имени файла. Зато есть код дескриптора.
Однако предшествующим данному событию было событие с ID 4663. Где как раз таки и указывается и имя файла, и имя пользователя и время, и операция как не странно там DELETE. И самое главное там имеется номер дескриптора, который соответствует номеру дескриптора из события выше (4660, помните? которое создается при явном удалении файла). Значит теперь, чтобы точно знать какие файлы удалены, необходимо просто найти все события с ID 4660, а так же предшествующие каждому этому событию, событие с кодом 4663, в котором будет содержаться номер нужного дескриптора.
Эти 2 события генерируются одновременно при удалении файла, но записываются последовательно, сначала 4663, потом 4660. При этом их порядковые номера различаются на один. У 4660 порядковый номер на единицу больше чем у 4663.
Именно по этому свойству и ищется нужное событие.
Т.е. берутся все события с ID 4660. У них берется 2 свойства, время создания и порядковый номер.
Далее в цикле по одному берется каждое событие 4660. Выбирается его свойства, время и порядковый номер.
Далее в переменную $PrevEvent заносится номер нужного нам события, где содержится нужная информация об удаленном файле. А так же определяются временные рамки в которых необходимо искать данное событие с определенным порядковым номером (с тем самым который мы занесли в $PrevEvent). Т.к. событие генерируется практически одновременно, то поиск сократим до 2х секунд: + — 1 секунда.
(Да, именно +1 сек и -1 сек, почему именно так, не могу сказать, было выявлено экспериментально, если не прибавлять секунду, то некоторые может не найти, возможно связано с тем, что возможно два эти события могут создаваться один раньше другой позже и наоборот).
Сразу оговорюсь, что искать только по порядковому номеру по всем событиям в течении часа — очень долго, т.к. порядковый номер находиться в теле события, и чтобы его определить, нужно пропарсить каждое событие — это очень долго. Именно поэтому необходим такой маленький период в 2 секунда (+-1сек от события 4660, помните?).
Именно в этом временном промежутке ищется событие с необходимым порядковым номером.
После того как оно найдено, работают фильтры:
|where{ ([xml]$_.ToXml()).Event.EventData.Data |where {$_.name -eq "ObjectName"}|where {($_.'#text') -notmatch ".*tmp"} |where {($_.'#text') -notmatch ".*~lock*"}|where {($_.'#text') -notmatch ".*~$*"}}
Т.е. не записываем информацию об удаленных временных файлах (.*tmp), файлах блокировок документов MS Office (.*lock), и временных файлах MS Office (.*~$*)
Таким же образом берем необходимые поля из этого события, и пишем их в переменную $BodyL.
После нахождения всех событий, пишем $BodyL в текстовый файл лога.
Для лога удаленных файлов я использую схему: один файл на один месяц с именем содержащим номер месяца и год). Т.к. удаленных файлов в разы меньше чем файлов к которым был доступ.
В итоге вместо бесконечного «рытья» логов в поисках правды, можно открыть лог-файл любым табличным редактором и просмотреть нужные нам данные по пользователю или файлу.
Рекомендации
Вам придется самим определить время в течении которого вы будете искать нужные события. Чем больше период, тем дольше ищет. Все зависит от производительности сервера. Если слабенький — то начните с 10 минут. Посмотрите, как быстро отработает. Если дольше 10 минут, то либо увеличьте еще, вдруг поможет, либо наоборот уменьшите период до 5 минут.
После того как определите период времени. Поместите данный скрипт в планировщик задач и укажите, что выполнять данный скрипт необходимо каждые 5,10,60 минут (в зависимости какой период вы указали в скрипте). У меня указано каждый 60 минут. $time = (get-date) — (new-timespan -min 60).
PS
У меня оба эти скрипта работают для сетевого ресурса в 100Гб, на котором ежедневно активно работают в среднем 50 пользователей.
Время поиска удаленных файлов за час — 10-15 минут.
Время поиска всех файлов, к которым был доступ — от 3 до 10 минут. В зависимости от нагрузки на сервер.
- Remove From My Forums
-
Вопрос
-
Здравствуйте, есть windows server 2016, на нем есть шара с файлами. Вопрос стандартный, кто удаляет файлы.
Настроил аудит, в локальных политиках безопасности. В свойствах нужной папки указал аудит чего и кем.
Но, в в журнале «Безопасность», стали появляться события не только этой папки, в еще многих других, событий столько, что хватает на 3 минуты лога.
Как узнать какие еще папки под аудитом или отключить для всех, кроме нужной. Ручной поиск не дал никаких результатов, сервер новый, аудит включается первый раз из коробки, диски новые. Спасибо.
Ответы
-
если 128мб это 3 минуты лога, то увеличив журнал до 5гб вы получите 2 часа (или около того)
дальше у вас есть 2 политики аудита: стандартная и расширенная. Вы настроили первую, которая расчитана на использование с 2003 серверами и winXP, а вторая для использования на более новых серверах и клиентах. Итог — выключаем стандартную политику
и настраиваем расширенную. Чтоб не логировало разный мусор, отключаем мониторинг открытья файлов и пр операции которые нас не интересуют и которых 99% на сервере. Дальше смотрим лог, и гуглим как отключить те блоки
событий которых много и которые не интересны. Аудит это масштабная тема, которую нужно решать вдумчиво.Если у вас регистрируются обращения к файлам которые вы не мониторите (вы не настраивали) — то сходите посмотрите действительно ли там что-то настроено, или вы изтрактовали событие неправильно.
The opinion expressed by me is not an official position of Microsoft
-
Изменено
3 июня 2020 г. 12:16
-
Предложено в качестве ответа
Vector BCOModerator
3 июня 2020 г. 14:23 -
Помечено в качестве ответа
Vector BCOModerator
9 июня 2020 г. 6:34
-
Изменено
Любой администратор Windows сталкивался с ситуацией, когда разъяренные пользователи хотят узнать, кто именно удалил мега важный файл с годовым отчетом в общей папке на файловом сервере. Эту информацию можно получить только при условии ведения аудита удаления файлов и папок на файловом сервере, иначе останется только восстановить удаленный файл из резервной копии (а вы их уже делаете?) и развести руками.
Но, даже при включенном аудите удаления файлов, найти что-то в логах бывает проблематично. Во-первых, найти нужную запись среди тысячи событий довольно сложно (в Windows отсутствуют вменяемые средства поиска интересующего события с возможностью гибкой фильтрации), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, т.к. было перезатерто более новыми.
В этой статье мы покажем пример организации на встроенных средствах Windows системы аудита удаления файлов и папок в общем сетевом каталоге (файловом сервере) с записью событий в отдельную базу данных на MySQL.
Благодаря наличию БД с информацией обо всех удаленных файлах администратор сможет дать ответы на вопросы:
- Кто и когда удалил файл
- Из какого приложения удален файл
- На какой момент времени нужно восстанавливать бэкап
В первую очередь на файловом сервере Windows нужно включить аудит событий, обеспечивающий запись информации об удалении файлов в журнал системы. Эту процедуру мы уже рассматривали в статье Аудит доступа к файлам и папкам в Windows.
Аудит может быть включен через общую политику Audit Object Access в разделе политик Security Settings -> Local Policy -> Audit Policy
Или (предпочтительнее) через расширенные политики аудита в GPO: Security Settings -> Advanced Audit Policy Configuration -> Object Access -> Audit File System.
Совет. Ведения аудита накладывает дополнительные расходы на ресурсы системы. Нужно с осторожностью применять его, особенно для высоконагруженных файловых серверов.
В свойствах общей сетевой папки (Security -> Advanced -> Auditing), удаление файлов в котором мы хотим отслеживать, для группы Everyone включим аудит событий удаления папок и файлов (Delete subfoldersand files).
Совет. Аудит удаления файлов в конкретной папке можно включить и через PowerShell:
$Path = "D: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
При успешном удалении файла в журнале безопасности системы появляется событие Event ID 4663 от источника Microsoft Windows security auditing. В описании события есть информация об имени удаленного файла, учетной записи из-под которой было выполнено удаление и имени процесса.
Итак, интересующие нас события пишутся в журнал, настала пора создать на сервере MySQL таблицу, состоящую из следующих полей:
- Имя сервера
- Имя удаленного файла
- Время удаления
- Имя пользователя, удалившего файл
MySQL запрос на создание такой таблицы будет выглядеть так:
CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
Скрипт сбора информации из журнала событий. Мы фильтруем журнал по событию с ID 4663 за текущий день
$today = get-date -DisplayHint date -UFormat %Y-%m-%d Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach { $event = [xml]$_.ToXml() if($event) { $Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S" $File = $event.Event.EventData.Data[6]."#text" $User = $event.Event.EventData.Data[1]."#text" $Computer = $event.Event.System.computer } }
Следующий скрипт запишет полученные данные в БД MySQL на удаленном сервере:
Set-ExecutionPolicy RemoteSigned Add-Type –Path ‘C:Program Files (x86)MySQLMySQL Connector Net 6.9.8Assembliesv4.5MySql.Data.dll' $Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.7.7.13;uid=posh;[email protected];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 = [xml]$_.ToXml() if($event) { $Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S" $File = $event.Event.EventData.Data[6]."#text" $File = $File.Replace(‘’,’|’) $User = $event.Event.EventData.Data[1]."#text" $Computer = $event.Event.System.computer $sql.CommandText = "INSERT INTO track_del (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')" $sql.ExecuteNonQuery() } } $Reader.Close() $Connection.Close()
Теперь, чтобы узнать, кто удалил файл «document1 — Copy.DOC», достаточно в консоли PowerShell выполнить следующий скрипт.
$DeletedFile = "%document1 - Copy.DOC%" Set-ExecutionPolicy RemoteSigned Add-Type –Path ‘C:Program Files (x86)MySQLMySQL Connector Net 6.9.8Assembliesv4.5MySql.Data.dll' $Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.7.7.13;uid=posh;[email protected];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 track_del where file_name LIKE '$DeletedFile'" $MYSQLDataAdapter.SelectCommand=$MYSQLCommand $NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data") foreach($DataSet in $MYSQLDataSet.tables[0]) { write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time } $Connection.Close()
В консоли получаем имя пользователя и время удаления файла.
Примечание. Т.к. была обнаружена проблема, чир символ «» не записывается в БД, мы заменили его на «|». Соответственно если нужно указать вывести полный путь к файлу , при выборке из базы можно выполнить обратную замену $DataSet.file_name.Replace(‘|’,’’). Спасибо Alex Kornev за замечание!
Скрипт сброса данных из журнала в БД можно выполнять один раз в конце дня по планировщику или повесить на событие удаления (On Event), что более ресурсоемко. Все зависит от требования к системе.
Совет. Нужно убедиться, что журнал безопасности имеет достаточный размер, чтобы в него помещались все события за день. Иначе придется запускать задания сброса данных из журнала в базу чаще, чем 1 раз в день, или вообще по триггеру. Для рабочих станция Maximum Log Size как правило стоит задать не менее 64 Мб, на северах – 262 Мб. Опцию перезаписи оставляем включенной (Overwrite events as needed).
При желании по аналогии можно реагировать простую веб страницу на php для получения информации о виновниках удаления файлов в более удобном виде. Задача решается силами любого php программиста за 1-2 часа.
Важный совет! При наличии в журнале информации об удалении файла пользователем не спешите однозначно интерпретировать его как преднамеренное или даже злонамеренное. Многие программы (особенно этим грешат программы пакета MS Office), при сохранении данных сначала создают временный файл, сохраняют документ в него, а старую версию файла удаляют. В этом случае имеет смысл дополнительной записи в БД имени процесса, которым было выполнено удаление файла (поле ProcessName события), и вести анализ удаления файлов с учетом этого факта. Либо совсем радикально отсеивать события от таких мусорных процессов, например, winword.exe, excel.exe и пр.
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.
Спасибо WinItPro
Join @AdmNtsRu on Telegram
Смотрите также:
Проверяя события доступа к объектам файловой системы, вы можете идентифицировать конкретного пользователя, который создал, удалил или изменил конкретный файл. В этой статье мы покажем вам, как настроить аудит событий для удаления объектов в общей сетевой папке на Windows Server 2016. После настройки аудита вы можете использовать информацию в журнале событий, чтобы найти пользователя, который удалил на файловом сервере.
Когда вы удаляете файл из сетевой папки, он удаляется немедленно, а не отправляется в корзину пользователя. Список файлов, открытых в сети в сетевой папке, можно получить следующим образом.
По умолчанию Windows Server не разрешает аудит событий доступа к объектам файловой системы. Аудит событий можно включить и настроить с помощью групповой политики. Если вам нужно включить политики аудита на нескольких серверах или компьютерах, вы можете использовать доменные объекты групповой политики (настраиваемые с помощью консоли управления gpmc.msc). Если вы хотите настроить аудит только на одном сервере, вы можете использовать локальную групповую политику.
- Запустить консоль редактора локальной политики –
gpedit.msc
;
- Перейдите в раздел GPO с расширенными политиками аудита. Параметры Windows -> Параметры безопасности -> Конфигурация расширенной политики аудита -> Доступ к объектам;
- Откройте политику аудита файловой системы и укажите, что вы хотите регистрировать только события успешного доступа к объектам файловой системы (настройте следующие события аудита -> Успех); Вы также можете включить аудит доступа к локальным объектам с помощью политики аудита доступа к объектам в Windows Settings -> Security Settings -> Local Policy -> Auditing Policy. Однако политика аудита файловой системы предпочтительнее, поскольку она отслеживает только события NTFS.
- Сохраните изменения и обновите параметры локальной групповой политики с помощью команды
gpupdate /force
.
Настройка аудита событий удаления файлов из конкретной папки
Теперь вам нужно настроить аудит в свойствах общей сетевой папки, доступ за которым вы хотите контролировать. Запустите проводник и откройте свойства общей папки. Перейдите на вкладку Безопасность. Нажмите кнопку «Дополнительно» -> вкладка «Управление.
Если отображается сообщение «Вы должны быть администратором или иметь соответствующие права для просмотра свойств аудита этого объекта», нажмите «Продолжить.
Затем нажмите кнопку «Добавить», чтобы указать пользователя или группу, для которых вы хотите регистрировать все события аудита. Если вы хотите отслеживать события для всех пользователей, укажите группу «Все.
Затем необходимо указать, при использовании каких разрешений на доступ к объектам необходимо записать в реестр. Чтобы сохранить в журнале событий только события удаления файлов, нажмите кнопку «Показать дополнительные разрешения». В списке событий оставьте проверку только для событий удаления папок и файлов – Удалить и Удалить подпапки и файлы.
Совет. Включение аудита доступа к объектам Windows увеличивает нагрузку на системные ресурсы. Всегда старайтесь минимизировать количество объектов управления и событий, которые вам нужно отслеживать.
Совет. Вы можете настроить проверку удаления файлов в папке с помощью PowerShell:
$ Path = "D: Public"
$ AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule ('Все', 'Удалить, DeleteSubdirectoriesAndFiles', 'Нет', 'Нет', 'Успешно')
$ Acl = Get-Acl -Path $ Путь
$ Acl.AddAuditRule ($ AuditChangesRules)
Set-Acl -Path $ Path -AclObject $ Acl
Теперь, если пользователь удаляет файл или папку в сетевой папке, в журнале безопасности системы отображается событие File System -> Audit Success с идентификатором 4663 из источника аудита безопасности Microsoft Windows.
Откройте средство просмотра событий консоли mmc (
$Path = "D: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
), разверните раздел Журналы Windows -> Безопасность. Включите фильтр событий для EventID 4663.
Откройте одно из оставшихся событий в средстве просмотра событий. Как видите, он содержит информацию об имени удаленного файла и учетной записи пользователя, который удалил файл.
была сделана попытка получить доступ к объекту. Тема: Security ID: CORP А.А.Иванов Имя учетной записи: учетная запись домена А.А.Иванова: КОРП доступ ID: Атрибуты 0x61B71716% MINIFYHTML349d26d18b665b62a6f83b02d3d29b667 %% MINIFYHTML349d26d18b665b62 MINIFYHTML349d26d18b665b62 %%% MINIFYHTML349d26d18b665b62 MINIFYHTML349d26d18b665b62a6f29b6d Объект сервер 0x7bc4 ресурсов: S: AI информации процесса: Идентификатор процесса: 0x4 Имя процесса: Информация о запросе доступа: Доступ: УДАЛЕНИЕ Маска доступа: 0x10000
После настройки элемента управления посмотрите журнал безопасности, который вы можете найти с помощью:
- Кто и когда удалил файл в сетевой папке;
- Из какого приложения был удален файл;
- В какое время следует восстанавливать резервную копию этого каталога.
Запись событий удаления файлов в SQL базу (MySQL/MSSQL)
Если после включения проверки удаления файлов в сетевой папке вы видите в журнале много событий, найти что-то в журналах может быть проблематично. Во-первых, довольно сложно найти нужную запись среди тысяч событий (в Windows нет разумных средств поиска интересующего события с возможностью гибкого фильтра), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, так как оно было перезаписано более новыми.
вы можете регистрировать все необходимые события в отдельной базе данных SQL. Вы можете использовать Microsoft SQL Server, Elasticsearch или MySQL / MariaDB для архивирования событий.
В этом примере мы покажем, как записывать события аудита в отдельную таблицу базы данных на сервере MySQL. Формат таблицы:
- Название сервера;
- Имя удаленного файла
- Время удаления;
- Имя пользователя, который удалил файл.
Запрос MySQL для создания такой таблицы будет выглядеть так:
eventvwr.msc
Примечание. О специфике работы с базой данных MySQL мы говорили в статье «Работа с базой данных MySQL PowerShell.
Если вы хотите использовать Microsoft SQL, обратитесь к статье «Как запросить сервер MSSQL из сценария PowerShell?”.
Чтобы получить события с EventID 4663 из журнала безопасности за текущий день, вы можете использовать следующий сценарий PowerShell:
$ today = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ {LogName = "Безопасность"; starttime = "$ сегодня"; id = 4663} | Для каждого {
$ event = [xml] $ _.ToXml()
если ($ событие)
{
$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6] «# Текст"
$ User = $ event.Event.EventData.Data [1]. «# Текст"
$ Computer = $ event.Event.System.computer
}
}
Следующий сценарий PowerShell запишет полученные данные в базу данных MySQL на удаленном сервере:
Set-ExecutionPolicy RemoteSigned
Тип добавления –Path 'C: Program Files (x86) MySQL MySQL Connector Net 6.9.8 Assemblies v4.5 MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ {ConnectionString = 'server = 10.7.7.13; uid = шикарный; pwd = P @ ssw0rd; база данных = aduser'}
$ Connection.Open()
$ sql = Новый объект MySql.Data.MySqlClient.MySqlCommand
$ sql.Connection = $ Соединение
$ today = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ {LogName = "Безопасность"; starttime = "$ сегодня"; id = 4663} | Для каждого {
$ event = [xml] $ _.ToXml()
если ($ событие)
{
$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6] «# Текст"
$ File = $ File.Replace(‘’,’|’)
$ User = $ event.Event.EventData.Data [1]. «# Текст"
$ Computer = $ event.Event.System.computer
$ sql.CommandText = "INSERT INTO track_del (server, file_name, dt_time, user_name) VALUES ('$ Computer', '$ File', '$ Time', '$ User')"
$ sql.ExecuteNonQuery()
}
}
$ Reader.Close()
$ Connection.Close()
После сохранения событий во внешней базе данных этот журнал можно очистить.
Теперь выясним, кто удалил файл «document1 – Copy.DOC». Просто запустите следующий скрипт в консоли PowerShell.
$ DeletedFile = "% document1 - Copy.DOC%"
Set-ExecutionPolicy RemoteSigned
Тип добавления –Path 'C: Program Files (x86) MySQL MySQL Connector Net 6.9.8 Assemblies v4.5 MySql.Data.dll'
$ Connection = [MySql.Data.MySqlClient.MySqlConnection] @ {ConnectionString = 'server = 10.7.7.13; uid = шикарный; pwd = P @ ssw0rd; база данных = aduser'}
$ Connection.Open()
$ MYSQLCommand = Новый объект MySql.Data.MySqlClient.MySqlCommand
$ MYSQLDataAdapter = Новый объект MySql.Data.MySqlClient.MySqlDataAdapter
$ MYSQLDataSet = Новый объект System.Data.DataSet
$ MYSQLCommand.Connection = $ Соединение
$ MYSQLCommand.CommandText = "ВЫБЕРИТЕ имя_пользователя, dt_time из track_del, где имя_файла LIKE '$ DeletedFile'"
$ MYSQLDataAdapter.SelectCommand = $ MYSQLCommand
$ NumberOfDataSets = $ MYSQLDataAdapter.Fill ($ MYSQLDataSet, «данные")
foreach ($ DataSet в $ MYSQLDataSet.tables [0])
{
write-host "Пользователь:" $ DataSet.user_name "в:" $ DataSet.dt_time
}
$ Connection.Close()
Отобразятся имя пользователя и время удаления файла с консоли PS.
Примечание. Возникла проблема: символ «» не был записан в базу данных, поэтому он был заменен на «|». Поэтому, если вам нужно увидеть полный путь к файлу, вы можете выполнить обратную подстановку при выборе из базы данных:
CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
. Спасибо Алексу Корневу за комментарий!
Сценарий для дампа данных из журнала в базу данных может быть запущен один раз в конце дня в соответствии с планировщиком, или вы можете заблокировать триггер для события On, что требует дополнительных ресурсов. Все зависит от системных требований.
Совет. Убедитесь, что вы установили максимальный размер журнала безопасности, достаточный для хранения всех событий дня. В противном случае вам придется выполнять задачи дампа данных из журнала в базу данных более одного раза в день или даже по триггеру. Для рабочих станций максимальный размер журнала, как правило, должен быть установлен не менее 64 МБ, на севере – 262 МБ. Опцию перезаписи старых событий следует оставить включенной (при необходимости перезаписать события).
вы можете создать простую адаптивную веб-страницу на php, чтобы получать информацию о событиях удаления файлов более удобным способом. Задача решается усилиями любого php программиста за 1-2 часа.
Важный совет. Если в журнале есть информация о том, что пользователь удалил файл, не спешите однозначно трактовать это как умышленное или даже злонамеренное. Многие программы (особенно программы MS Office) грешат этим при сохранении изменений сначала создается временный файл, в него записываются данные, а старая версия файла удаляется. В этом случае имеет смысл добавить в базу данных дополнительную запись имени процесса, с помощью которого был удален файл (поле события ProcessName), и проанализировать события удаления файла с учетом этого факта. Или вы можете отфильтровать события от некоторых процессов, например winword.exe, excel.exe и т.д.
Запись информации о событиях удаления файлов в текстовый файл
Если вы не хотите хранить отдельную базу данных, вы можете сохранить события аудита удаления файлов в текстовый файл журнала. Используйте этот сценарий PowerShell:
$ Outfile = "C: ps delete-file-log.txt"
$ today = get-date -DisplayHint date -UFormat% Y-% m-% d
Get-WinEvent -FilterHashTable @ {LogName = "Безопасность"; starttime = "$ сегодня"; id = 4663} | Для каждого {
$ event = [xml] $ _.ToXml()
если ($ событие)
{
$ Time = Get-Date $ _. TimeCreated -UFormat "% Y-% m-% d% H:% M:% S"
$ File = $ event.Event.EventData.Data [6] «# Текст"
$ User = $ event.Event.EventData.Data [1]. «# Текст"
$ strLog = $ Компьютер + "" + $ Файл + "" + $ Время + "" + $ Пользователь
$ strLog | out-file $ Outfile –append
}
}
[/ тревога]
Итак, мы предложили идею и общую основу для системы управления и хранения информации об удаленных файлах в сетевых папках, при желании ее можно легко изменить под свои нужды.
Источник изображения: winitpro.ru
- Remove From My Forums
-
Question
-
Hi,
We are having Windows 2016 shared folders with many sub folders. We need to audit and create report for the files which an end user deletes.
We need to know who deleted the file and which file was deleted.
Thanks
All replies
-
-
Edited by
Wednesday, March 7, 2018 6:45 AM
-
Edited by
-
-
Proposed as answer by
Mary Dong
Friday, March 9, 2018 9:29 AM
-
Proposed as answer by
-
Hi,
Could the above reply be of help? If yes, you may mark it as answer, if not, feel free to feed back
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com.
- Remove From My Forums
-
Question
-
Hi,
We are having Windows 2016 shared folders with many sub folders. We need to audit and create report for the files which an end user deletes.
We need to know who deleted the file and which file was deleted.
Thanks
All replies
-
-
Edited by
Wednesday, March 7, 2018 6:45 AM
-
Edited by
-
-
Proposed as answer by
Mary Dong
Friday, March 9, 2018 9:29 AM
-
Proposed as answer by
-
Hi,
Could the above reply be of help? If yes, you may mark it as answer, if not, feel free to feed back
Best Regards,
Mary
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact
tnmff@microsoft.com.