- Удаление поврежденных файлов журнала просмотра событий
- Симптомы
- Причина
- Решение
- Раздел NTFS
- Раздел FAT (альтернативный метод)
- Три способа очистить журнал событий в Windows 10
- Ручная очистка
- С помощью командной строки
- С помощью PowerShell
- Аудит удаления файлов в сетевой папке на Windows Server
- Включаем политику аудита доступа к файлам и папкам в Windows
- Настройка аудита событий удаления файлов из конкретной папки
- Запись событий удаления файлов в SQL базу (MySQL/MSSQL)
- Запись информации о событиях удаления файлов в текстовый файл
Удаление поврежденных файлов журнала просмотра событий
В этой статье описывается метод переименования или перемещения этих файлов в целях устранения неполадок.
Исходная версия продукта: Windows Server 2012 R2
Исходный номер КБ: 172156
Симптомы
При запуске просмотра событий Windows может возникнуть одно из следующих сообщений об ошибке, если один из файлов *.evt поврежден:
Д-Services.exe
Исключение: нарушение прав доступа (0xc0000005), адрес: 0x76e073d4
При выборе «ОК» или отмене сообщения об ошибке «Dr. Watson» вы также можете получить следующее сообщение об ошибке:
Средство просмотра событий
Сбой удаленного вызова процедуры
Процесс services.exe может потреблять высокий процент использования ЦП.
Причина
Файлы журнала просмотра событий (Sysevent.evt, Appevent.evt, Secevent.evt) всегда используются системой, предотвращая удаление или переименование файлов. Службу EventLog нельзя остановить, так как она необходима другим службам, поэтому файлы всегда открыты.
Решение
В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Дополнительные сведения см. в сведениях о том, как создать и восстановить реестр в Windows
Раздел NTFS
Нажмите кнопку «Начните», выберите пункт «Параметры», «Панель управления» и дважды щелкните «Службы».
Выберите службу EventLog и выберите «Запуск». Измените тип запуска на «Отключено» и выберите «ОК». Если вы не можете войти в компьютер, но можете получить удаленный доступ к реестру, можно изменить значение запуска в следующем ключе реестра на 0x4: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
Когда система запускается, может возникнуть сбой нескольких служб; Может появиться сообщение, информирующие пользователя об использовании просмотра событий для проверки ошибок.
Переименуем или переместите поврежденный файл *.evt из следующего расположения: %SystemRoot%\System32\Config
В средстве «Службы панели управления» повторно включите службу EventLog, установив для нее значение по умолчанию «Автоматический запуск» или измените значение запуска реестра на 0x2.
Раздел FAT (альтернативный метод)
Загрузок в запрос MS-DOS с помощью загрузочного диска DOS.
Переименуем или переместите поврежденный файл *.evt из следующего расположения: %SystemRoot%\System32\Config
Удалите диск и перезапустите Windows.
При перезапуске Windows файл журнала событий будет воссоздан.
Три способа очистить журнал событий в Windows 10
П ри анализе неполадок в работе Windows администраторами нередко используются сведения из системного журнала, в который автоматически записываются все более или менее важные события. Журнал Windows хранит много полезных сведений, тем не менее, у вас может возникнуть необходимость его очистить. Сделать это можно несколькими способами. Удаление записей журнала вручную используется чаще всего, так как позволяет очищать конкретные разделы.
Ручная очистка
Здесь всё предельно просто. Откройте через меню Пуск оснастку событий, разверните журнал и, кликнув правой кнопкой на нужный раздел, выберите в меню опцию «Очистить журнал…».
Данные будут удалены.
С помощью командной строки
Для быстрой очистки всех разделов сразу можно использовать командную строку. Запустите консоль от имени администратора и выполните в ней такую команду:
После нажатия Enter вы увидите, как удаляются записи.
Эта команда очищает журнал полностью, впрочем, с помощью командной строки можно также можно очистить конкретный журнал.
Сначала командой wevtutil el|more выведите список доступных журналов.
Выберите нужный и очистите его, выполнив команду следующего вида:
NameLog в данном случае — имя очищаемого журнала.
Его нужно будет заменить реальным именем, взятым из полученного ранее списка.
С помощью PowerShell
Для полной очистки журнала событий Windows 10 также можно использовать PowerShell . Запустите консоль от имени администратора и выполните в ней связку двух командлетов:
За исключением пары-тройки записей, к которым вы не имеете прямого доступа, всё содержимое журнала Windows будет полностью удалено.
Аудит удаления файлов в сетевой папке на Windows Server
С помощью аудита событий доступа к объектам файловой системы вы можете определить конкретного пользователя, который создал, удалил или изменил определенный файл. В этой статье мы покажем, как настроить аудит событий удаления объектов в общей сетевой папке на Windows Server 2016. После настройки аудита, вы можете с помощью информации в журнале событий найти пользователя, который удалил на файловом сервере.
Включаем политику аудита доступа к файлам и папкам в Windows
По умолчанию в Windows Server не включен аудит событий доступа к объектам на файловой системе. Вы можете включить и настроить аудит событий с помощью групповой политики. Если нужно включить политики аудита на нескольких серверах или компьютера, можно использовать доменные GPO (настраиваются с помощью консоли управления gpmc.msc). Если нужно настроить аудит только на одном сервере, можно воспользоваться локальной групповой политикой.
- Запустите консоль редактора локальной политики – gpedit.msc ;
- Перейдитевраздел GPO срасширенными политиками аудитаWindows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Object Access;
- Откройте политику Audit File System и укажите, что вы хотите сохранять в журнал только успешные события доступа к объектам файловой системы (Configure the following audit events -> Success);
Настройка аудита событий удаления файлов из конкретной папки
Теперь нужно настроить аудит в свойствах общей сетевой папки, доступ к которой вы хотите отслеживать. Запустите проводник и откройте свойства общей папки. Перейдите на вкладку Security. Нажмите кнопку Advanced -> вкладка Auditing.
Если появится сообщение You must be an administrator or have been given the appropriate privileges to view the audit properties of this object, нажмите кнопку Continue.
Затем нажмите кнопку Add чтобы указать пользователя или группу, для которых нужно записывать все события аудита. Если вы хотите отслеживать события для всех пользователей, укажите группу Everyone.
Затем нужно указать использование каких разрешений доступа к объекту нужно записывать в лог. Чтобы сохранять в Event Log только события удаления файлов, нажмите кнопку Show advanced permissions. В списке событий оставьте аудит только для событий удаления папок и файлов — Delete и Delete subfolders and files.
$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
Теперь, если пользователь удалит любой файл или папку в сетевой папке, в журнале безопасности системы появляется событие File System -> Audit Succes c Event ID 4663 от источника Microsoft Windows security auditing.
Откройте mmc консоль Event Viewer ( eventvwr.msc ), разверните секцию Windows Logs -> Security. Включите фильтр событий по EventID 4663.
Откройте любой их оставшихся событий в Event Viewer. Как вы видите, в нем есть информация об имени удаленного файла и учетной записи пользователя, который удалил файл.
После настройки аудита, найдите в журнале Security вы сможете найти с:
- Кто и когда удалил файл в сетевой папке;
- Из какого приложения удален файл;
- На какой момент времени нужно восстанавливать бэкап данного каталога.
Запись событий удаления файлов в SQL базу (MySQL/MSSQL)
Если после включения аудита удаления файлов в сетевой папке, вы видите в журнале много событий, найти что-то в логах бывает проблематично. Во-первых, найти нужную запись среди тысячи событий довольно сложно (в Windows отсутствуют вменяемые средства поиска интересующего события с возможностью гибкой фильтрации), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, т.к. было перезатерто более новыми.
Вы можете записывать все нужные событий в отдельную SQL базу данных. Для хранения событий можно использовать Microsoft SQL Server, Elasticsearch или MySQL/MariaDB.
В этом примере мы покажем, как записывать события аудита в отдельную таблицу БД на сервере 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));
Если вы хотите использовать Microsoft SQL, обратите внимание на статью “Как выполнить запрос к MSSQL Server из скрипта PowerShell?”.
Для получения событий с EventID 4663 из журнала Security за текущий день можно использовать такой PowerShell скрипт:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @
$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
>
>
Следующий PowerShell скрипт запишет полученные данные в БД MySQL на удаленном сервере:
Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll’
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @
$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)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll’
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@
$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()
В результате в консоли PS появится имя пользователя и время удаления файла.
Скрипт сброса данных из журнала в БД можно выполнять один раз в конце дня по планировщику или повесить триггер на событие удаления (On Event), что более ресурсоемко. Все зависит от требования к системе.
Можно создать реагировать простую веб страницу на php для получения информации о событиях удаления файлов в более удобном виде. Задача решается силами любого php программиста за 1-2 часа.
Запись информации о событиях удаления файлов в текстовый файл
Если вы не хотите вести отдельную БД, можно сохранять события аудита удалений файлов в текстовый лог файл. Воспользуйтесь таким PowerShell скриптом:
$Outfile = «C:\ps\delete-file-log.txt»
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @
$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»
$strLog = $Computer + » » + $File + » » + $Time + » » + $User
$strLog | out-file $Outfile –append
>
>
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.