Кто изменил файл на сервере

Обновлено: 04.07.2024

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

Вывести список открытых файлов на файловом сервере 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 и перезагрузить сервер. После этого в список начнут попадать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).

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

Чтобы определить пользователя, который открыл (заблокировал) файл 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, но это менее удобно (консоль не предусматривает возможность поиска).

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

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции 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

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

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

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

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

$sessn = New-CIMSession –Computername mskfs01

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

Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn

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

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

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

Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn

Иногда бывает необходимо понять кто удалил/изменил/переименовал конкретный файл или папку. В ОС Windows для этого используется аудит доступа к объектам.

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

Необходимо понимать, что аудит забирает на себя.

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

В случае локальных политик необходимо запустить оснастку “Локальная политика безопасности”, для этого необходимо нажать комбинацию клавиш Win+R, в открывшееся поле ввести secpol.msc и нажать клавишу Enter.

Запуск локальной политики безопасности

В открывшейся оснастке в дереве слева необходимо перейти в раздел “Локальные политики” - “Политика аудита”.

Политика аудита

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

Выбор политики

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

Для этого необходимо открыть свойства файла или папки, перейти на вкладку “Безопасность”, нажать “Дополнительно” и “Аудит”.

Безопасность и аудит

Аудит

Нажимаем “Добавить” и начинаем настраивать аудит.

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

Сначала выбираем субъект - это чьи действия будут аудироваться (записываться в журнал аудита).

Выбор субъекта

Можно вписать туда имя пользователя или группы, если имя заранее неизвестно, то можно воспользоваться кнопкой “Дополнительно” которая открывает форму поиска где можно выбрать интересующих нас пользователей и группы. Чтобы контролировались действия всех пользователей необходимо выбрать группу “Все”.

Пользовательские группы

Далее необходимо настроить тип аудируемых событий (Успех, Отказ, Все), также область область применения для аудита папок - только эта папка, папка с подпапками, только подпапки. только файлы и т.д., а также сами события аудита.

Для папок поля такие:

Типы событий для папок

А такие для файлов:

Типы событий для файлов

После этого начнется сбор данных аудита. Все события аудита пишутся в журнал “Безопасность”. Открыть его проще всего через оснастку “Управление компьютером” compmgmt.msc.

Сбор данных аудита

В дереве слева выбрать “Просмотр событий” - “Журналы Windows” - “Безопасность”.

Просмотр событий

Каждое событие ОС Windows имеет свой код события. Список событий достаточно обширен и доступен на сайте Microsoft либо в интернете. Например события аудита можно посмотреть здесь.

Попробуем например найти событие удаления файла, для этого удалим файл на котором предварительно настроен аудит (если это не тестовые файл, то не забываем сделать его копию, так как аудит это всего лишь информация о действиях, а не разрешение/запрет этих действий). Нам нужно событие с кодом 4663 - получение доступа к объекту, у которого в поле Операции доступа Написано “DELETE” . Поиск событий в журналах Windows достаточно сложен, поэтому обычно используются специализированные средства анализа - системы мониторинга, скрипты и т.д.

Вручную можно, например, задать например такой фильтр:

Фильтры

Далее в отфильтрованных событиях необходимо найти интересующее нас по имени объекта.

Поиск нужного объекта

Открыть его двойным щелчком мыши и увидеть кто удалил данный файл в поле субъект.

Согласен, про "хранятся" я маху дал. Но все же "неудобно" или "невозможно" ? Все же вещи разные. Я вот сходу не припомню, как вообще штатными средствами просмотреть модификатора ..

NWADMIN32, закладка Facts в свойствах файла.

Андрей Тр. aka RH писал(а): Кстати, а та утилита из какого набора г-на Baird'a - бесплатного или за деньги ? Андрей Тр. aka RH писал(а): Я еще как-то спрашивал, что именно в данном контексте считается модификацией - изменение ( или просто доступ ? ) содержимого файла, или даже изменение его атрибутов или имени ?

меняет модификатора, но оставляет прежним владельца. Довольно часто в сетевом каталоге со всеобщим доступом, видел вордовские файлы (.DOC), у которых владелец не совпадал с модификатором, т.е., word тоже умеет модифицировать файл, а не полностью переписывать.

Андрей Тр. aka RH писал(а): Заодно вопрос - архиватор, этот тот, кто меняет соответствующий атрибут .. и все ?

Нет, сейчас специально проверил - whodidit показывает того же архиватора, что и был, после ручного снятия архивного бита:

J:\TMP\eksta>flag *.txt -a /fo
.
PHONES.TXT [Rw----] [-----------------] .Kyrpotin.C. N/A

Насколько я помню, архиватор устанавливался даже у файла, у которого бит "A" не сбрасывался, именно после того, как его забэкапил наш arcserver. Проверить точно смогу теперь только во вторник утром, т.к. в ночь с пятницы на субботу у нас прошёл полный бэкап со сбросом архивных битов, а первый инкрементный бэкап (который не трогает A-бит) состоится в ночь с понедельника на вторник.

Юрий aka qwerty » 23 ноя 2002, 16:10

Т.е. как я понял не затрачивая денежных средств я не могу узнать кто последним правил файл?
Бля. (слов нет) предстовляте ктото отправил от общего адреса
почтового партнерам в финляндии письмо с текстом "ХУЙ СОСИ!"-извините
есть (временно) коммутируемый доступ, почт. клиенты The Bat и общий почтовый ящик локальный на сетевом диске.
А кто виноват ? конечно информационный отдел блин.
И особеннно его руководитель , крик просто безудержный стоит.
Вот теперь и выкручиваешся блин.

Андрей Тр. aka RH » 23 ноя 2002, 17:20

Юрий, как я понимаю вместо всех наших тутошних словоизлияний ответом на вопрос являются слова Сергея о модификаторе файла :

Разумеется, речь про файлы на томе Netware.

Да, неудобно как-то у вас получилось .. но ИМХО с таким же успехом можно винить отдел кадров - что в фирме работают подобные уроды, службу безопасности - что не могут их выявить. А ИТ, теоретически, можно собрать имеющуюся информацию в кучку и посмотреть, что с ней можно сделать. Время отправки письма там, хедер у него просмотреть .. если по горячим следам, то можно также глянуть last login time у народа. Не зная подробностей вашей сети и ситуации трудно что-то конкретное советовать.

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

Собственно сабж.
Копал MSDN FileInfo и File нарыл только FileAcces, но он вряд ли подходит.
Есть еще варианты?

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Как получить имя пользователя, который открыл файл?
в VBScript пытаюсь создать подключение к excel файлу. но эта таблица лежит на сервере, иногда эта.

Можно ли и как узнать имя пользователя открывшего файл
Можно ли и как узнать имя пользователя открывшего файл? Собственно сабж.

Узнать имя пользователя, открывшего файл (в локальной сети)
Нужно узнать перед заполнением файла Excel или Word данными из Access (если он уже открыт) кто из.

Насколько мне известно - никак, так как ОС не сохраняет имя пользователя, изменившего файл, - только время изменения.
В других известных мне операционных системах картина та же.

Ну или хотя бы имя пользователя который просто изменял файл.
Событие изменения файла я уже нашел.
Имя пользователя вот это проблема.

Добавлено через 3 минуты
Ок. Т.е. для отслеживания данного момента, есть какие-нибудь костылики-решения? Мне в голову пришло только запуск программы которая уже откроет файл. а в самой программе хватать имя пользователя.

для отслеживания данного момента, есть какие-нибудь костылики-решения? Можно подключить аудит на определенную папку, тогда все доступы к файлам вместе с пользователями будут записываться в лог безопасности.
Этот лог уже можно парсить из своего приложения.
Такой вот адов костыль. В колонтитулы вставить поле LastSavedBy. Форматирование текста сделать белым шрифтом. Запретить изменение колонтитулов.
Всегда будет видно кто последним вносил изменения. Только последнего видно.

Написать командный файл, который запрашивает у пользователя имя и пароль
Написать командный файл, который: • запрашивает у пользователя имя и пароль • если имя.

Как узнать имя пользователя?
подскажите пожалуйста, как можно узнать имена учетных записей пользователей, которые которые есть.

Как узнать имя пользователя из ОС
Как узнать имя пользователя из ОС в Access-е. Какую библиотеку использовать. Как узнать какие.


Как узнать имя пользователя?
Как узнать имя текущего пользователя компьютера и сообщить его программе? Мне, к примеру, это.

Читайте также: