Командная строка – команда OpenFiles

Включаем расширенный аудит файлов и папок на файловых серверах

Добрый день, друзья и коллеги. Сегодня поговорим о том, как же все-таки отслеживать изменения на ваших файловых серверах, а именно кто и что делал с файлом; не удалил ли случайно; создал зачем-то ненужный файл и т.д. Конечно же, с этой темой тесно связаны как минимум три вещи: документальное описание файловых шар, применение файловых фильтров (запрет на определенный тип файлов) и систему ограничения размера хранилища (система квот).

Для опытных админов, которые подобные вещи уже делали, ничего сверх нового вы здесь не найдете. Технологии аудита появились очень давно. Я просто поделюсь своим опытом и выскажу мнение о некоторых вещах, которые, на мой взгляд, просто необходимы на файловых серверах в доменной сети.

Для начала нам необходимо включить через групповую политику расширенный аудит и применить ее к нужным серверам. Я буду проделывать на тестовом сервере Windows Server 2008 R2, у себя в сети все проделал на 2022 R2. Принцип и интерфейс примерно тот же.

Вообще система аудита появилась еще со времен Windows Server 2000 (может даже и в NT, но не суть важно), его активно используют и применяют многие админы. С версии 2008 в строю начал стоять еще и расширенный аудит (Advanced audit). Я использовал у себя как старый аудит, так и новый, пока не заметил прям сильных инноваций.

Но в целом новый аудит более гибок в управлении и настройках. Самый главный плюс этой технологии – возможность ведения аудита только на том ресурсе, который нам необходим. Отсюда практически все события безопасности отображаются в журнале в нужном нам порядке, где нет ничего лишнего. Отсюда и размер журнала существенно меньше.

В управлении групповых политик переходим в раздел групповых политик и создаем там новый GPO:

Обозвали, нажали ОК. Теперь надо перейти в свойства нового объекта. Все, что касается аудита и другой безопасности, практически всегда находится в пределах конфигурации компьютера, поэтому туда-то мы сразу и идем (см. скриншот):

Редактор управления групповыми политиками

В параметрах безопасности нам необходимо “подрегулировать” параметры журнала безопасности (в разделе “Журнал событий”) и настроить, собственно, сам аудит (в разделе “Конфигурация расширенной политики аудита”):

Длительность хранения записей журнала безопасности

Объясню по минимуму, т.к. все сугубо индивидуально. Ставим размер (100-200 Мб за глаза скорее всего, в зависимости от размера сетевой папки и количества пользователей), ставим максимальный срок хранения событий (мне 2 недели вполне достаточно), метод сохранения “по дням” подставляется автоматом. Думаю, здесь ничего сложного. Теперь настроим аудит, самое главное для нас:

Как до него добраться: лучше всего увидеть глазами на скриншоте. Обращаю внимание, что несмотря на то, что мы будем вести аудит общего файлового ресурса, нам необходимо выбрать все же “Аудит файловой системы”. Сейчас постараюсь объяснить почему. Дело в том, что если выбрать “Аудит сведений об общем файловом ресурсе”, что, казалось бы, логичнее, то будет вестись очень (повторяю – “очень”) подробный аудит ВСЕХ сетевых папок ВСЕХ событий, в т.ч. просто просмотров, сетевых синхронизаций, чтения атрибутов и много-много других событий.

Лично у меня журнал рос примерно так: один час = 50-100 МБ журнала днем, ночь при нулевой активности = 30 Мб. В общем, я настоятельно не рекомендую включать эту галочку. Нас интересует конкретная папка и конкретные события (изменение/создание/удаление), поэтому выбираем файловую систему.

Именно этот момент (процесс выбора аудита) мало описан в интернете, все указано поверхностно. Даже в официальном учебнике я не нашел объяснения всех нюансов. Тип событий “успех” (когда операция с файлом и папкой удалась), хотя можно вести аудит и “неудач”, т.е. попыток что-то сделать при отсутствии прав. Тут уже смотрите сами.

Теперь оптимизируем политику. Сначала применяем ее к серверу. В моем случае я делаю все на контроллере домена и поэтому применяю к подразделению Domain Controllers. Файловые службы работают на контроллере домена, что не есть хорошо. Но в силу причин так сложилось.

Прошедшие проверку

Нажимаем “Добавить”, указываем тип объектов “Компьютеры” и прописываем туда имя нашего сервера:

Типы объектов

Отшлифуем политику еще круче. Для того, чтобы ускорить применение политик, Microsoft рекомендует всегда указывать, какие конфигурации применять, а какие нет. Иначе идет попытка применить конфигурации сразу и компьютера, и пользователя. У нас политика применяется на компьютер, поэтому в состоянии политики можем это указать. В технете пишут, что таким образом мы разгружаем контроллер домена.

:/>  Не запускается управление компьютером windows 10

Отключить параметры конфигурации пользователя

Результирующая политика

Контрольная проверка политики. Сверяем результаты:Первая часть выполнена. Теперь идем на файловый сервер. Убедимся, что папка настроена на сетевой общий доступ:

Общие папки Windows

.. и идем во вкладку “Безопасность”, а точнее в раздел “дополнительно”:

Настройки аудита

Нас интересует вкладка “Аудит”:

Настройки аудита

Там сейчас пусто, потому что ничего не настроено. Сейчас мы добавим так называемый список SACL (системные списки управления доступом). От NTFS’ного ACL он отличается тем, что это только аудит, никаких прав на папку мы по сути не даем, поэтому не стоит относиться к этому списку как к списку реального доступа к папке. Помните, что это совсем другое. Поэтому я и добавляю группу Все и даю нужный критерий аудита:

Добавляем параметры аудита

Галочку “Добавить элементы аудита, наследуемые…” я убираю, на будущее может пригодиться. Ведь мы можем в будущем вести аудит сетевой шары в другой шаре. Если оставите галку, ничего страшного.

Выбираем нужные типы событий

По типу аудита тоже смотрите сами. Мне необходим аудит по изменению файлов, можно сделать еще более гибким, но вы должны помнить про увеличение нагрузки на сервер и размер журнала.

Настройки аудита на папку могут применяться какое-то время (появляется окно применения статуса). После всех этих дествий давайте перейдем к третьей части – проверке.

Применяем на файловом сервере новую политику и смотрим, применилась ли она (команды gpupdate /force и gpresult /r):

Просмотр результирующей политики

У меня применилось. Теперь я иду в журнал безопасности и чищу его:

Смотрим журнал аудита

Теперь самое интересное. Пробую с другого ПК зайти на папку по сети и что-нибудь поменять. По идее сразу после этого появляется событие типа “кто сделал/что сделал/когда и т.д.”:

В событии все отображается. Но когда событий много, пользоваться журналом не так удобно. Поэтому рекомендуется сохранить журнал в удобный формат (csv, txt, evtx, xml) и уже сформировавшийся файл мучить дальше. На этом все. Пользуйтесь аудитом, коллеги. Когда на руках есть доказательство чьей-то вины, это очень полезно и сильно прикрывает админу одно место.

Обновлено: Друзья, вы должны понимать, что аудит нагружает сервер, с ним производительность может немного упасть. Из личного опыта я рекомендую через недельку эксплуатации зайти на сервер и проверить размер журнала, а также тип событий. Вдруг журнал сильно вырос и вашего размера в GPO мало. Или вообще аудит перестал работать. В общем, мониторьте хоть изредка работу аудита.

Друзья! Вступайте в нашу группу Вконтакте, чтобы не пропустить новые статьи! Хотите сказать спасибо? Ставьте Like, делайте репост! Это лучшая награда для меня от вас! Так я узнаю о том, что статьи подобного рода вам интересны и пишу чаще и с большим энтузиазмом!

Вывести список открытых файлов на файловом сервере windows

Список открытых пользователями файлов на файловом сервере Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).

Запустите на файловом сервере консоль Computer Management (или подключитесь к нему удаленно консолью со своего компьютера) и перейдите в секцию System Tools -> Shared Folders -> Open files (Служебные программы ->

Общие папки -> Открыты файлы). В правой части окна отображается список файлов сервера, открытых удаленно . Список содержит локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write Read).

Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles . Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:

Openfiles /Query /fo csv |more

При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия, определяющая данное подключение. Управление подключениями пользователей осуществляется именно через эти идентификаторы сессий.

Эту же команду можно выполнить удаленно, например, нужен список открытых файлов на файловом сервере mskfs01:

Openfiles /Query /s mskfs01 /fo csv

У команды Openfiles есть еще одна интересная возможность просмотра списка локально открытых файлов. Для ее использования нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого в список начнут попадать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).

:/>  Переустановка, загрузка, откат к прежним ОС

Как закрыть открытый файл

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open File и в контекстном меню выбрать пункт « Close Open File ».

Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles . Как мы уже говорили, она возвращает ID сессии открытого файла. Именно по этому ID сессии, файл можно принудительно закрыть, сбросив подключение. Находим ID нужного файла:

Openfiles /Query /s mskfs01 /fo csv | find /i “farm”| find /i “.xlsx”

Отключаем от него пользователя по полученному идентфикатору:

Openfiles /Disconnect /s mskfs01 /ID 67109098

Как определить какой пользователь открыл файл

Чтобы определить пользователя, который открыл (заблокировал) файл cons.adm на сервере, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i “cons.adm”

Ключ /i используется, чтобы выполнялся регистронезависимый поиск

Естественно, можно указать только часть имени файла. К примеру, нам нужно узнать кто открыл xlsx файл, в имени которого есть строка farm, воспользуемся таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i “farm”| find /i “xlsx”

Можно, конечно найти файл и в графической консоли Computer Management, но это менее удобно (консоль не предусматривает возможность поиска).

Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в windows server

Администраторы файловых серверов Windows часто сталкиваются с необходимостью принудительного закрытия файлов, открытых пользователями. Такая задача возникает при одновременной работы с одним файлом нескольких пользователей. Часто при некорректной работе ПО или неправильном завершении сессии пользователем, файлы в сетевой папке оказываются открытыми и заблокированными, и остальные пользователи не могут вносить в него изменения.

Как принудительно закрыть открытый файл в windows?

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open Files и в контекстном меню выбрать пункт “CloseOpenFile”.

Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles. Как мы уже говорили, она возвращает ID сессии открытого файла. Вы можете принудительно закрыть файл и сбросить подключение пользователя по ID SMB сессии. Сначала нужно определить ID сессии открытого файла:

Openfiles /Query /s mskfs01 /fo csv | find /i “farm”| find /i “.xlsx”

Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:

Openfiles /Disconnect /s mskfs01 /ID 67109098

Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:

openfiles /disconnect /s mskfs01 /u corpaivanova /id *

Как удаленно закрыть открытые smb файлы с помощью powershell?

Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:

$sessn = New-CIMSession –Computername mskfs01

Следующая команда найдет SMB сессию для открытого файла *pubs.docx и завершит ее.

Get-SMBOpenFile -CIMSession $sessn | where <$_.Path –like “*pubs.docx”>| Close-SMBOpenFile -CIMSession $sessn

Подтвердите закрытие файла, нажав Y . В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.

С помощью PowerShell вы можете закрыть и разблокировать на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:

Как удаленно закрыть открытые файлы с помощью powershell

В Windows Server 2022 / Windows 8 в PowerShell появились командлеты для работы с шарами и файлами на SMB сервере. Данные командлеты можно использовать для удаленного сброса подключений к открытому файлу.

Список открытых файлов можно получить с помощью командлетов Get- SMBOpenFile , а закрыть файл (сбросить подключение) с помощью Close-SmbOpenFile .

Итак, подключаемся к удаленному серверу:

$sessn = New-CIMSession –Computername mskfs01

Находим и закрываем открытый файл pubs.docx одной командой:

Get-SMBOpenFile -CIMSession $sessn | where <$_.Path –like “*pubs.docx”>| Close-SMBOpenFile -CIMSession $sessn

Подтверждаем закрытие файла, нажав Y.

Чтобы убрать подтверждение принудительного закрытия файла на сервере, используйте ключ -Force

Эти же команды можно использовать, к примеру, чтобы закрыть все файлы, открытые некоторым пользователем (пользователь ушел домой и не освободил файлы). К примеру, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните

:/>  Виндовс не может проверить диск который в данный момент используется что делать

Определяем пользователя, который открыл файл в сетевой папке с помощью openfiles

Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i “cons.adm”

Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i “farm”| find /i “xlsx”

Можно, конечно найти открытый файл и в графической консоли Computer Management, но это менее удобно (в консоли нет возможности поиска).

Расшифровка значений

/s Устройство


Требуется прописать название устройства или IP-адрес, в случае удаленного компьютера.

/u доменюзер

Осуществление указанной команды происходит от имени конкретного пользователя.

/p пароль_учетной_записи


Чтобы исполнение команды могло произойти, необходимо ввести код доступа для прописанной ранее учетной записи.

/id код_открытого_файла

Чтобы можно было осуществить разъединение документа, его нужно открыть с применением особого цифрового параметра «код_открытого_файла».

/a имя_юзера


Позволяет провести разъединение для всех файлов, к которым юзер получал доступ на устройстве, заданным параметром /s.

/o режим_открытия

Разъединение будет проведено в отношении всех открытых документов, обладающих параметром «режим_открытия».

/se название_сессии


Можно указать конкретную сессию и все документы, которые были открыты в ходе её осуществления, будут разъединены.

/op название_открытого_документа

Произойдет разъединение уже открытого документа, создание которого произошло с использованием параметра «название_открытого_документа».

Синтаксис disconnect

openfiles.exe /disconnect [/s Устройство [/u доменюзер [/p пароль_учетной_записи]]] {[/id код_открытого_файла]|[/a имя_юзера]|[/o режим_открытия]} [/se название_сессии] [/op название_открытого_документа]

Синтаксис query

openfiles.exe /query [/s устройство [/u доменюзер [/p пароль_учетной_записи]]] [/fo {TABLE|LIST|CSV}] [/nh] [/v]

Управление открытыми файлами на файловом сервере windows (smb)

Если вы администрируете общие сетевые папки Windows, скорее всего вы периодически сталкиваетесь с просьбами пользователей принудительно закрыть файлы, открытые (заблокированные) в сетевых папках другими пользователями. Обычно это связано с некорректной работой программы, неправильном завершении сессии пользователя или ситуациях, когда пользователь открыл файл и забыл закрыть его (ушел домой, в отпуск и т.д.).

В этой статье мы покажем, как получить список открытых файлов на файловом сервере Windows, узнать какие пользователи их используют, и способы сброса файловых сессий для разблокировки открытых файлов.

Вывод списка открытых файлов в сетевой папке windows

Список открытых по сети файлов в Windows можно получить с помощью стандартной графической консоли ComputerManagement (Управление компьютером — compmgmt.msc ).

Запустите на файловом сервере консоль Computer Management (или подключитесь к нему консолью удаленно со своего компьютера) и перейдите в раздел SystemTools -> SharedFolders -> Openfiles (Служебные программы ->

Общие папки -> Открыты файлы). В правой части окна отображается список файлов на сервере, открытых удаленно. В данном списке указан локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write Read).

Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles. Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:

Openfiles /Query /fo csv |more

Вы можете вывести список открытых файлов на сервере удаленно. Например, чтобы вывести все открытые по сети файлы на сервере mskfs01, выполните:

Openfiles /Query /s mskfs01 /fo csv

Get-smbopenfile: вывод списка открытых по сети файлов в powershell

В версии PowerShell в Windows Server 2022/Windows 8 появились командлеты для управления сетевыми файлами и папками на SMB сервере. Эти командлеты можно использовать чтобы удаленно закрыть открытые по сети файлы.

Список открытых файлов можно получить с помощью командлета Get-SMBOpenFile. Чтобы закрыть файл (сбросить подключение), используется Close-SmbOpenFile.

Для вывода полного списка открытых файлов на сервере, выполните команду:

Команда возвращает ID файла, ID сессии и полное имя файла.

Можно вывести список открытых файлов с именами пользователей и компьютеров (IP адресами):

Можно вывести все файлы, открытые определенным пользователем: