Восстановление утерянных или удаленных файлов
Примечание: Если вы недавно обновили Windows 10 и не можете найти файлы, см. раздел Поиск утерянных файлов после обновления до Windows 10.
Если вам не удается найти файл на компьютере или если вы случайно удалили или изменили его, то вы можете восстановить его из резервной копии (если вы используете программу архивации данных) или попытаться восстановить его предыдущую версию. Предыдущие версии — это копии файлов и папок, которые Windows автоматически сохраняет в составе точки восстановления. Предыдущие версии иногда называют теневыми копиями.
Восстановление файлов из резервной копии
Чтобы восстановить файл из резервной копии, убедитесь, что доступен носитель или диск, на который сохранена резервная копия, а затем выполните указанные ниже действия.
Восстановление файлов из резервной копии
-
Откройте функцию «Резервное копирование и восстановление», нажатием кнопки
Восстановление файлов предыдущих версий
Восстановите удаленные файлы и папки или предыдущее состояние файла или папки.
Восстановление удаленного файла или папки
-
Откройте «Компьютер», нажатием кнопки «Начните
Примечание: Чтобы восстановить прежнюю версию файла или папки, включенных в библиотеку, щелкните файл или папку правой кнопкой мыши в расположении, в котором он или она сохранены, а не в библиотеке. Например, чтобы восстановить предыдущую версию рисунка, включенного в библиотеку «Изображения», но сохраненного в папке «Мои рисунки», щелкните папку «Мои рисунки» правой кнопкой мыши, а затем — «Восстановить предыдущую версию».
Предыдущие версии файлов
- Дважды щелкните предыдущую версию папки с файлом или папкой, которую нужно восстановить. (Например, если файл был удален сегодня, выберите версию папки со вчерашнего дня, которая должна содержать файл.)
- Перетащите файл или папку, которую вы хотите восстановить, в другое место, например на рабочий стол или в другую папку.
Совет: Если вы не помните точное имя или расположение файла или папки, можно выполнить их поиск, введя часть имени в поле поиска в библиотеке «Документы».
Восстановление файла или папки в предыдущее состояние
-
Щелкните правой кнопкой мыши файл или папки и выберите Восстановить прежнюю версию.
Вы увидите список доступных предыдущих версий файла или папки. В этот список включаются и файлы, сохраненные при резервном копировании (если вы используете программу архивации данных), и точки восстановления (если доступны оба типа архивации).
Примечание: Вам не удастся открыть или скопировать предыдущие версии файлов, созданных программой архивации данных, но вы можете восстановить их.
Предупреждение: Этот файл или папка заменит текущую версию файла или папки на вашем компьютере, причем замена будет необратимой.
Примечание: Если эта кнопка «Восстановить» недоступна, вам не удастся восстановить предыдущую версию файла или папки в его или ее первоначальном расположении. Возможно, вам удастся открыть или сохранить их в другое расположение.
Аудит удаления файлов в сетевой папке на Windows Server
16.11.2022
itpro
Windows Server 2012 R2
комментариев 65
С помощью аудита событий доступа к объектам файловой системы вы можете определить конкретного пользователя, который создал, удалил или изменил определенный файл. В этой статье мы покажем, как настроить аудит событий удаления объектов в общей сетевой папке на 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);
Также можно включить аудит доступа к локальным объектам с помощью политики Audit Object Access в разделе Windows Settings -> Security Settings -> Local Policy -> Audit Policy. Однако использование политики Audit File System предпочтительнее, поскольку она отслеживает только события NTFS.
Настройка аудита событий удаления файлов из конкретной папки
Теперь нужно настроить аудит в свойствах общей сетевой папки, доступ к которой вы хотите отслеживать. Запустите проводник и откройте свойства общей папки. Перейдите на вкладку 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.
Совет. Включение аудита доступа к объектам Windows накладывает дополнительные расходы на ресурсы системы. Всегда старайтесь минимизировать количество объектов и событий аудита, которые нужно отслеживать.
Совет. Вы можете настроить аудит удаления файлов в папке с помощью через 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
Теперь, если пользователь удалит любой файл или папку в сетевой папке, в журнале безопасности системы появляется событие File System -> Audit Succes c Event ID 4663 от источника Microsoft Windows security auditing.
Откройте mmc консоль Event Viewer ( eventvwr.msc ), разверните секцию Windows Logs -> Security. Включите фильтр событий по EventID 4663.
Откройте любой их оставшихся событий в Event Viewer. Как вы видите, в нем есть информация об имени удаленного файла и учетной записи пользователя, который удалил файл.
An attempt was made to access an object. Subject: Security ID: CORP\aaivanov Account Name: aaivanov Account Domain: CORP Logon ID: 0x61B71716 Object: Object Server: Security Object Type: File Object Name: E:\Distr\Backup.rar Handle ID: 0x7bc4 Resource Attributes: S:AI Process Information: Process ID: 0x4 Process Name: Access Request Information: Accesses: DELETE Access Mask: 0x10000
После настройки аудита, найдите в журнале 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));
Примечание. Особенности работы с MySQL базой мы подробно рассматривали в статье Работаем с базой данных MySQL из PowerShell.
Если вы хотите использовать Microsoft SQL, обратите внимание на статью “Как выполнить запрос к MSSQL Server из скрипта PowerShell?”.
Для получения событий с EventID 4663 из журнала Security за текущий день можно использовать такой PowerShell скрипт:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | 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
>
>
Следующий 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 @ | 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)\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 появится имя пользователя и время удаления файла.
Примечание. Была обнаружена проблема — символ «\» не записывается в БД, поэтому мы заменили его на «|». Соответственно если нужно вывести полный путь к файлу, при выборке из базы можно выполнить обратную замену: $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 и пр.
Запись информации о событиях удаления файлов в текстовый файл
Если вы не хотите вести отдельную БД, можно сохранять события аудита удалений файлов в текстовый лог файл. Воспользуйтесь таким PowerShell скриптом:
$Outfile = «C:\ps\delete-file-log.txt»
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | 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»
$strLog = $Computer + » » + $File + » » + $Time + » » + $User
$strLog | out-file $Outfile –append
>
>
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.
Предыдущая статья Следующая статья
Как Восстановить Удаленные Файлы из Общей Папки Сетевого Диска
Корзина для общего диска не предусмотрена, поэтому вы не можете восстановить удаленные файлы из общей сетевой папки так же легко, как с локального жесткого диска компьютера. Хорошая новость в том, что существует программа для восстановления удаленных файлов, документов, изображений, видео и всех типов файлов с сетевого диска, например, Мастер Восстановления Данных EaseUS. Её удобно использовать для восстановления безвозвратно удаленных файлов в обход корзины.
Многие слышали, что если потерять или удалить файлы с сетевого диска, то восстановление практически невозможно. К счастью, мы нашли два способа восстановления удаленных файлов и папок с сетевого диска или общей папки на сетевом диске.
Реальные Решения | Пошаговое Руководство |
---|---|
Исправление 1. Использование Программного Обеспечения Для Восстановления | Если вы настроили сетевой диск на компьютере, попробуйте программу восстановления файлов EaseUS, чтобы просканировать и найти потерянные файлы. Все шаги |
Исправление 2. Восстановление Предыдущей Версии | Откройте общий сетевой диск > Щелкните правой кнопкой мыши по пустому месту и выберите «Свойства» > «Предыдущие Версии». Все шаги |
Куда Отправляются Файлы При Удалении с Сетевого Диска?
‘У меня есть сетевой диск (T), который смонтирован в папку на диске E. Несколько часов назад я случайно удалил файл из общей сетевой папки. Вскоре я понял ошибку и открыл корзину, чтобы восстановить удаленный файл. Но, к моему удивлению, его там не оказалось. Могу ли я узнать, куда отправляются файлы при удалении из общей папки сетевого диска, или как мне восстановить удаленные файлы? Если у вас есть предложения, пожалуйста, помогите мне ».
Введение в восстановление данных с сетевых дисков
Сетевой диск — это устройство хранения данных в локальной сети (LAN) в офисе или дома, и оно может быть расположено на сервере, устройстве NAS, внешнем жестком диске или одном из сетевых компьютеров.
Когда вы выбираете файл в общей папке сетевого диска и нажимаете клавишу Delete, все, что Windows действительно может сделать, — это указать Сетевой операционной системе удалить его. Поскольку Windows не выполняет удаление, файл не будет отображаться в Корзине Windows. Если вы или другие доверенные пользователи случайно удалите файл или много файлов из общей папки, созданной на сетевом диске, то мы подготовили для вас отличный способ восстановления удаленных/потерянных файлов или папок с сетевого диска. Если вы пытаетесь найти решение для восстановления данных с сетевого диска или вас просто интересует эта тема, то далее вы узнаете все подробности.
Программа для восстановления удаленных файлов с сетевого диска
Т.к. корзина для общего диска не предусмотрена, вы не сможете восстановить удаленные файлы из общей сетевой папки так же легко, как с локального жесткого диска компьютера. Но есть и хорошая новость — существует программное обеспечение, способное восстанавливать удаленные файлы, документы, изображения, видео и все типы файлов с сетевого диска, например, Мастер Восстановления Данных EaseUS. Эту мощную программу для восстановления данных удобно использовать для восстановления безвозвратно удаленных файлов в обход корзины.
Способ 1. Восстановление Удаленных Файлов с Сетевого Диска
По сравнению с восстановлением файлов из облачного хранилища, например, восстановлением безвозвратно удаленных файлов с Google Диска, гораздо проще восстановить удаленные файлы из общей сетевой папки. Как вы знаете, чтобы в операционных системах Windows открыть общий доступ к папке на компьютере нужно проделать некоторые действия.
- Найдите папки, к которым вы хотите предоставить общий доступ. Вы можете настроить общий доступ для любых пользователей на компьютере или в вашей домашней группе.
- С паролем или без него каждый, кто имеет право на доступ к файлам в вашей локальной сети, сможет просматривать, проверять или редактировать эти файлы, а также удалять их.
Windows предложит полное удаление, когда пользователь попытается удалить файл на общем диске, а это означает, что файл не попадет в корзину Windows, и навсегда исчезнет с диска. Если отмена операции с помощью Ctrl Z не удалась, то вам нужно использовать программу для восстановления жесткого диска EaseUS, и выполнить действия, указанные ниже:
1. Для домашних пользователей, которые настраивают сетевой диск на компьютере
Вернитесь к компьютеру с установленным локальным сетевым диском, например диском D, E или F, и установите EaseUS Data Recovery Wizard на любой диск, кроме сетевого.
2. Для бизнес-группы, которая настроила сетевой диск на выделенном сервере или NAS
Вам необходимо безопасно отключить жесткий диск от сервера и подключить его к компьютеру, установить на компьютер EaseUS Data Recovery Wizard для выполнения операции по восстановлению данных.
Далее следуйте инструкции по восстановлению данных: выберите сетевой диск, запустите сканирование, просмотрите результаты и восстановите удаленные файлы из общей сетевой папки.
Инструкция: Как восстановить удаленные файлы из общей папки сетевого диска
1. Загрузите и установите на свой компьютер EaseUS Data Recovery Wizard.
2. Используйте установленную программу для поиска и восстановления потерянных данных. Выберите раздел диска или папку, из которой «пропали» ваши данные. Затем нажмите кнопку «Сканировать».
3. Когда сканирование будет завершено, найдите в списке результатов нужные вам файлы и папки.
Выберите их и нажмите кнопку «Восстановить». При выборе места для сохранения восстановленных данных не следует использовать тот же диск, который вы сканировали!
Способ 2. Восстановление Файлов Удаленных с Сетевого Диска из Предыдущей Версии
Предыдущие версии — это функция резервного копирования и восстановления в Windows, которую можно использовать для восстановления удаленных, отформатированных, измененных, поврежденных или потерянных файлов и папок. С помощью этой функции вы можете восстановить удаленные файлы из общих папок сетевого диска, если существует точка восстановления, созданная до потери данных. Вот как это сделать:
Шаг 1. В том месте, где находятся файлы общей папки, щелкните правой кнопкой мыши на пустом месте и выберите ‘Свойства’.
Шаг 2. На вкладке ‘Предыдущие Версии’ должен быть список файлов или папок, резервные копии которых были созданы в разное время.
Шаг 3. Выберите нужную версию и нажмите кнопку «Восстановить», чтобы вернуть их в папку.
Последние статьи — Также в программе EaseUS
Как посмотреть кто удалил файл из общей папки
Аудит удаления файлов в сетевой папке на Windows Server
Windows Server 2012 R2
С помощью аудита событий доступа к объектам файловой системы вы можете определить конкретного пользователя, который создал, удалил или изменил определенный файл. В этой статье мы покажем, как настроить аудит событий удаления объектов в общей сетевой папке на 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);
Также можно включить аудит доступа к локальным объектам с помощью политики Audit Object Access в разделе Windows Settings -> Security Settings -> Local Policy -> Audit Policy. Однако использование политики Audit File System предпочтительнее, поскольку она отслеживает только события NTFS.
Настройка аудита событий удаления файлов из конкретной папки
Теперь нужно настроить аудит в свойствах общей сетевой папки, доступ к которой вы хотите отслеживать. Запустите проводник и откройте свойства общей папки. Перейдите на вкладку 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.
Совет. Включение аудита доступа к объектам Windows накладывает дополнительные расходы на ресурсы системы. Всегда старайтесь минимизировать количество объектов и событий аудита, которые нужно отслеживать.
Совет. Вы можете настроить аудит удаления файлов в папке с помощью через 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
Теперь, если пользователь удалит любой файл или папку в сетевой папке, в журнале безопасности системы появляется событие File System -> Audit Succes c Event ID 4663 от источника Microsoft Windows security auditing.
Откройте mmc консоль Event Viewer ( eventvwr.msc ), разверните секцию Windows Logs -> Security. Включите фильтр событий по EventID 4663.
Откройте любой их оставшихся событий в Event Viewer. Как вы видите, в нем есть информация об имени удаленного файла и учетной записи пользователя, который удалил файл.
An attempt was made to access an object. Subject: Security ID: CORP\aaivanov Account Name: aaivanov Account Domain: CORP Logon ID: 0x61B71716 Object: Object Server: Security Object Type: File Object Name: E:\Distr\Backup.rar Handle ID: 0x7bc4 Resource Attributes: S:AI Process Information: Process ID: 0x4 Process Name: Access Request Information: Accesses: DELETE Access Mask: 0x10000
После настройки аудита, найдите в журнале 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));
Примечание. Особенности работы с MySQL базой мы подробно рассматривали в статье Работаем с базой данных MySQL из PowerShell.
Если вы хотите использовать Microsoft SQL, обратите внимание на статью “Как выполнить запрос к MSSQL Server из скрипта PowerShell?”.
Для получения событий с EventID 4663 из журнала Security за текущий день можно использовать такой PowerShell скрипт:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | 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
>
>
Следующий 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 @ | 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)\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 появится имя пользователя и время удаления файла.
Примечание. Была обнаружена проблема — символ «\» не записывается в БД, поэтому мы заменили его на «|». Соответственно если нужно вывести полный путь к файлу, при выборке из базы можно выполнить обратную замену: $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 и пр.
Запись информации о событиях удаления файлов в текстовый файл
Если вы не хотите вести отдельную БД, можно сохранять события аудита удалений файлов в текстовый лог файл. Воспользуйтесь таким PowerShell скриптом:
$Outfile = «C:\ps\delete-file-log.txt»
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @ | 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»
$strLog = $Computer + » » + $File + » » + $Time + » » + $User
$strLog | out-file $Outfile –append
>
>
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.
Предыдущая статья Следующая статья
Как узнать, кто удалил файл
Работая в офисе, когда все компьютеры объединены в одну сеть, когда к папкам и файлам имеют доступ и другие сотрудники фирмы, рискуешь в один прекрасный день не найти нужный файл, папку или документ. И тогда возникает вопрос: куда он делся, кто мог его удалить? Можно ли получить информацию о том, кто удалил файл с вашего компьютера? Можно, необходимо лишь включить аудит доступа к файлам и папкам.
- Как узнать, кто удалил файл
- Как посмотреть журнал событий
- Как узнать, кто работал на моем компьютере
- Персональный компьютер, доступ от имени администратора
Для этого вам необходимо зайти в меню «Пуск» и кликнуть по опции «Панель управления». В открывшемся окне выбираете опцию «Производительность и обслуживание», в Windows 7 нужно выбрать «Система и безопасность». Перейдите по вкладке к пункту «Администрирование» и откройте его двойным щелчком левой кнопки мыши. В открывшемся окне выберите пункт «Локальная политика безопасности». Если окно не открылось при двойном клике левой кнопки мыши, то кликните правой кнопкой и откройте вход от имени администратора. В новом окне щелкаете по папке «Локальные политики» и далее выбираете папку «Политика аудита». Осталось сделать клик по пункту «Аудит доступа к объектам».
В открывшемся диалоговом окне поставьте флажки либо у опции «Успех» (с ее помощью будут отслеживаться все удачные попытки открыть файл), либо у «Отказ» (эта опция позволяет проследить неудачные попытки). Чтобы отследить все попытки доступа к файлам нужно установить два флажка. Последнее действие – нажать кнопку «Ок».
После установления аудита в «Свойствах» той папки, за операциями над которой вы хотите следить, в разделе «Безопасность» щелкните иконку «Дополнительно», выберите «Аудит» и в открывшемся окне кликните по слову «Дополнительно» и внесите имя пользователя или группы пользователей, чьи действия с данной папкой будут отслеживаться. Можно выбирать различные списки пользователей. Также стоит отметить, что данные параметры вы всегда сможете изменить, следуя аналогичному принципу работы. Теперь вы всегда будете в курсе, кто работал с файлами и по чьей неосторожности они исчезли. Данная функция пригодится людям, которые работают в различных компаниях за компьютерами.
Аудит удаления и доступа к файлам и запись событий в лог-файл средствами Powershell
Я думаю, многие сталкивались с задачей, когда к Вам приходят и спрашивают: «У нас тут файл пропал на общем ресурсе, был и не стало, похоже кто-то удалил, Вы можете проверить кто это сделал?» В лучшем случае вы говорите, что у вас нет времени, в худшем пытаетесь найти в логах упоминание данного файла. А уж когда включен файловый аудит на файловом сервере, логи там, мягко говоря «ну очень большие», и найти что-то там — нереально.
Вот и я, после очередного такого вопроса (ладно бекапы делаются несколько раз в день) и моего ответа, что: «Я не знаю кто это сделал, но файл я Вам восстановлю», решил, что меня это в корне не устраивает…
Начнем.
Для начала включим к групповых политиках возможность аудита доступа к файлам и папкам.
Локальные политики безопасности->Конфигурация расширенной политики безопасности->Доступ к объектам
Включим «Аудит файловой системы» на успех и отказ.
После этого на необходимые нам папки необходимо настроить аудит.
Проходим в свойства папки общего доступа на файловом сервере, переходим в закладку «Безопасность», жмем «Дополнительно», переходим в закладку «Аудит», жмем «Изменить» и «Добавить». Выбираем пользователей для которых вести аудит. Рекомендую выбрать «Все», иначе бессмысленно. Уровень применения «Для этой папки и ее подпапок и файлов».
Выбираем действия над которыми мы хотим вести аудит. Я выбрал «Создание файлов/дозапись данных» Успех/Отказ, «Создание папок/дозапись данных» Успех/отказ, Удаление подпапок и файлов и просто удаление, так же на Успех/Отказ.
Жмем ОК. Ждем применения политик аудита на все файлы. После этого в журнале событий безопасности, будет появляться очень много событий доступа к файлам и папкам. Количество событий прямопропорционально зависит от количества работающих пользователей с общим ресурсом, и, конечно же, от активности использования.
Итак, данные мы уже имеем в логах, остается только их оттуда вытащить, и только те, которые нас интересуют, без лишней «воды». После этого акурратно построчно занесем наши данные в текстовый файл разделяя данные симовлами табуляции, чтобы в дальнейшем, к примеру, открыть их табличным редактором.
#Задаем период, в течении которого мы будем запускать один раз скрипт, и искать нужные нам события. Здесь период задан - 1 час. Т.е. проверяются все события за последний час. $time = (get-date) - (new-timespan -min 60) #$BodyL - переменная для записи в лог-файл $BodyL = "" #$Body - переменная, в которую записываются ВСЕ события с нужным ID. $Body = Get-WinEvent -FilterHashtable @|where < ([xml]$_.ToXml()).Event.EventData.Data |where |where |where |where >|select TimeCreated, @ | %>>,@ | %>> |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 - содержит время и порядковый номер записи евента с И сортируем по порядковому номеру. #. Это важное замечание. При удалении файла создается сразу 2 записи, с и = Get-WinEvent -FilterHashtable @ | Select TimeCreated,@> |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 @|where |where< ([xml]$_.ToXml()).Event.EventData.Data |where |where |where |where >|select TimeCreated, @ | %>>,@ | %>> 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
Как оказалось при удалении файлов и удалении дескрипторов создается одно и тоже событие в логе, под При этом в теле сообщения могут быть разные значения «Операции доступа»: Запись данных (или добавление файла), 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
Т.е. не записываем информацию об удаленных временных файлах (.*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 минут. В зависимости от нагрузки на сервер.
- powershell
- мониторинг сервера
- мониторинг
Как восстановить удаленные файлы с сетевого диска из общей папки
Следуйте этим 4 способам восстановления удаленных файлов с сетевого диска, вы также можете скачать 4DDiG здесь, чтобы восстановить любые потерянные файлы с сетевого диска.
Отсутствие корзины для сетевого диска сделало восстановление данных очень трудным делом, особенно по сравнению с извлечением удаленных файлов с жесткого диска локального компьютера с помощью корзины. К счастью, технологии продвинулись до такого уровня, что теперь у нас есть стороннее программное обеспечение, специально разработанное для облегчения восстановления данных там, где это кажется невозможным. Основная цель этой статьи — рассказать вам о том, как восстановить удаленные файлы с сетевого диска. Он состоит в общей сложности из четырех методов, которые гарантированно положат конец вашим поискам методов восстановления данных с сетевых дисков. Мы также рассмотрим, куда попадают удаленные файлы при удалении с сетевого диска, а также некоторые из наиболее часто задаваемых вопросов.
- Часть 1: Куда девается удаленный файл при удалении с сетевого диска?
- Часть 2: Исправления для восстановления удаленных файлов из общей папки сетевого диска
- Исправление 1: Восстановление удаленных файлов с сетевого диска путем восстановления предыдущей версии
- Исправление 2: Восстановите удаленный файл с сетевого диска через корзину удаленного компьютера
- Исправление 3: Используйте программное обеспечение для восстановления удаленных файлов с сетевого диска HOT
- Исправление 4: Восстановление удаленных файлов с сетевого диска с помощью встроенного инструмента Windows 10
- Часто задаваемые вопросы:
Часть 1: Куда девается удаленный файл при удалении с сетевого диска?
Пользователь, у которого сетевой диск (T) указывал на папку на его диске (E), позже понял, что он случайно удалил файл из папки, которая была общей для его сети на диске. Он поспешно перешел в корзину, чтобы восстановить файл. Но, к его величайшему удивлению, файла там не оказалось. Итак, куда делся удаленный файл? Как он может восстановить удаленный файл? Устройство хранения данных в локальной сети (Local Access Network) дома или на предприятии часто называют сетевым диском. Он может быть расположен на внешнем жестком диске, устройстве NAS, одном из компьютеров, подключенных к сети, или на сервере. Когда пользователь нажимает клавишу “Удалить” на клавиатуре после выбора файла из общей папки сетевого диска, Windows автоматически подает сигнал сетевой операционной системе удалить его. Удаленный файл не будет отображаться в корзине, поскольку удаление не было произведено Windows. Таким образом, единственный способ, с помощью которого пользователь может восстановить такой файл, можно увидеть в следующем разделе этой статьи.
Часть 2: Исправления для восстановления удаленных файлов из общей папки сетевого диска
Хорошей новостью является то, что восстановление данных с сетевого диска возможно. И ниже описано, как восстановить удаленные файлы с сетевого диска.
Исправление 1: Восстановление удаленных файлов с сетевого диска путем восстановления предыдущей версии
Восстановление предыдущей версии файла — один из самых простых способов восстановить этот файл, особенно если соответствующий файл был перезаписан на вашем веб-диске или дома. Ниже приведены шаги, необходимые для восстановления файла путем восстановления его предыдущей версии.
Шаг 1: Наведите курсор на файл и щелкните по нему правой кнопкой мыши.
Шаг 2: Нажмите на кнопку ”Восстановить предыдущие версии».
Шаг 3: На вкладке “Предыдущие версии” выберите дату с версией, которую вы хотите восстановить. Обратите внимание, что пользователь может открыть разные файлы, чтобы определить тот, у которого правильная версия.
Шаг 4: Замените файл предыдущей версией, нажав на кнопку “Восстановить”. Альтернативой нажатию кнопки “Восстановить” является копирование нужной версии файла в безопасное место, нажав на кнопку “Копировать”.
Шаг 5: Выберите безопасное местоположение в следующем окне, а затем продолжайте, снова нажав на “Копировать”.
Исправление 2: Восстановите удаленный файл с сетевого диска через корзину удаленного компьютера
В общей сети удаленный компьютер является ведущим компьютером. А в корзине главного компьютера вы можете найти все файлы, удаленные в общей сети. Восстановите файл из корзины в его исходное местоположение, щелкнув по нему правой кнопкой мыши, а затем нажав “Восстановить”. Как только это будет сделано, файл теперь будет находиться на исходном сайте в общей сетевой папке.
Исправление 3: Используйте программное обеспечение для восстановления удаленных файлов с сетевого диска
Существуют сторонние программы для восстановления удаленных файлов с сетевого диска, некоторые из них бесплатны, а некоторые требуют покупки. Однако мы рекомендуем использовать программное обеспечение для восстановления данных Tenorshare 4DDiG в том виде, в каком оно есть:
- Способен восстанавливать более 1000 типов файлов, включая документы, фотографии, аудио и видео.
- Способен восстанавливать потерянные данные не только с настольных компьютеров, но и с ноутбуков, а также с внешних / внутренних накопителей, SD-карт, USB-флэш-накопителей и многого другого.
- Способен восстанавливать файлы, потерянные в результате форматирования, случайного удаления, повреждения и других действий.
Шаги, связанные с использованием программного обеспечения для восстановления данных Tenorshare 4DDiG, просты для понимания. Вы можете найти их ниже.
Похожие публикации:
- Wide color gamut что это
- Библиотека и фреймворк в чем разница
- Как настроить экран входа debian 11
- Что такое bpmn простыми словами