список открытых файлов из общих папок

У меня есть файловый сервер, на котором запущен Debian Jessie 8.7 в моей сети с Samba 4.2.14.

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


  • При запуске smbstatus -L это не указывает любая информация о любых открытых файлах или заблокированных файлах .

     $ smbstatus -L
    Зарегистрирован MSG_REQ_POOL_USAGE
    Зарегистрированы MSG_REQ_DMALLOC_MARK и LOG_CHANGED
    Нет заблокированных файлов
    
  • Используя lsof , он дает мне только информацию о том, какой процесс использует общую папку в локальной файловой системе сервера.

     $ lsof | grep резервное копирование
    smbd 1432 root cwd DIR 8,9 4096 2 / резервное копирование / локальное
    
  • Также при использовании фьюзера он не дает никакой информации о открытых файлах или заблокированных файлах . Он просто показывает sPID, который использует общую папку в локальной файловой системе сервера.

     $ fuser / backup / local
    / резервное копирование / местное: 1432c
    

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

  • С помощью Shellscript перечислить все файлы с такими расширениями, как .doc, .docx, .xls, .xlsx и т. Д., И создайте , если [-f ". ~ lock.new_document.docx #"]; затем , чтобы определить, открыт ли файл Microsoft Office или нет, но это обходное решение не то, что я ищу.

  • Использование модулей VFS для аудита операций для любого файла внутри общей папки может быть источником Shellscript, но это непрактично.


Есть ли кто-нибудь, кто мог бы знать какие-либо инструменты, которые могли бы отображать открытые / заблокированные файлы из общих папок Samba, поскольку это smbstatus -L не не кажется ли вариант для этой проблемы?

1
задан 30 May 2017 в 22:50
1 ответ

Согласно моим выводам, благодаря VFS Modules, Samba не хранит File Descriptors для файлов, которыми обмениваются и используют, независимо от того, какой это обычный файл, за одним исключением.

Единственная ситуация, в которой я обнаружил, что открытые файлы видны через lsof или smbstatus -L, это когда у вас есть открытые файлы с Microsoft Office 2010 и далее. То же самое не происходит, например, если у вас есть файл .docx, открытый через Microsoft Office 2007 или LibreOffice 4.


Что обычно происходит (забыв вышеприведенную ситуацию с файлами из Microsoft Office 2010 и далее: как только клиентский компьютер открывает файл из общей папки, обслуживаемой Samba, этот файл кэшируется на файловой системе клиентского компьютера, закрытой на файловой системе сервера.

Ниже я описал некоторые наблюдения, которые я заметил во время моих экспериментов с VFS модулями для Samba.

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


Для текстовых документов, изображений, PDF, медиа-файлов, клиентский компьютер Клиентский компьютер :

  • открывает файл
  • кэширует данные
  • закрывает файл в локальной файловой системе сервера Сервера
  • при сохранении изменений, Samba создает временный файл на сервере Server
  • при закрытии файла, Samba удаляет исходный файл и переименовывает tmp-файл в имя исходного файла.

открытие файла на клиенте

May 30 11:13:02 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|Expedientes.txt
May 30 11:13:02 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/Expedientes.txt

сохранение файла

May 30 11:16:52 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|w|~gvfPvwn.tmp
May 30 11:16:52 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|pwrite|ok|John/~gvfPvwn.tmp
May 30 11:16:52 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/~gvfPvwn.tmp
May 30 11:16:52 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|unlink|ok|John/Expedientes.txt
May 30 11:16:52 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|rename|ok|John/~gvfPvwn.tmp|John/Expedientes.txt

закрытие файлов

Samba не записывает операции с файлами, которые закрыты на клиентских машинах. Для файлов Microsoft Office (.docx, .doc, .xls, .xlsx и т.д.), клиентский компьютер :

  • открывает файл
  • , кэширует данные
  • , закрывает файл в локальной файловой системе сервера
  • , открывает файл tmp/lock (.~lock.my_word_document. docx#) и закрывает его
  • каждый байт, вставленный на клиентской машине Client Machine, создает операцию открытия/закрытия исходного файла
  • при сохранении файла, клиентская машина Client Machine записывает изменения в файл
  • при закрытии файла, Samba удаляет tmp/lock файл

, открывающий файл на клиентской машине

May 30 11:22:14 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|w|Desktop Word John.docx
May 30 11:22:14 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/Desktop Word John.docx
May 30 11:22:14 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|Desktop Word John.docx
May 30 11:22:14 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|w|.~lock.Desktop Word John.docx#
May 30 11:22:14 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/.~lock.Desktop Word John.docx#

, записывая данные в файл (каждый записанный байт, генерирует OPEN/CLOSE ops)

May 30 11:22:44 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|Desktop Word John.docx
May 30 11:22:44 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/Desktop Word John.docx
May 30 11:22:44 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|Desktop Word John.docx
May 30 11:22:44 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/Desktop Word John.docx
May 30 11:22:45 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|Desktop Word John.docx
May 30 11:22:45 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/Desktop Word John.docx

сохранение файла закрытия

May 30 11:26:33 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|w|.~lock.Desktop Word John.docx#
May 30 11:26:33 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|pwrite|ok|John/.~lock.Desktop Word John.docx#
May 30 11:26:33 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/.~lock.Desktop Word John.docx#
May 30 11:26:33 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|Desktop Word John.docx
May 30 11:26:33 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/Desktop Word John.docx
May 30 11:26:33 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|w|Desktop Word John.docx

закрывающий файл

May 30 11:37:39 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|open|ok|r|.~lock.Desktop Word John.docx#
May 30 11:37:39 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|close|ok|John/.~lock.Desktop Word John.docx#
May 30 11:37:39 server001 smbd_audit: normal.user|192.168.1.67|win7pc|serversharedfolder|unlink|ok|John/.~lock.Desktop Word John.docx#

Если вы планируете реализовать VFS-модули для Samba, вот несколько ссылок, которые помогут вам в процессе установки (не забудьте установить пакет samba-vfs-модулей):

Вот выдержка из smb.conf, показывающая настройку функции для конкретной разделяемой папки:

...
[fileserver]
path = /bkp/local
valid users = john, jane, martin, carl
force group = sambashare
create mode = 0660
directory mode = 0770
available = yes
read only = no
writable = yes
browsable = yes
hide files = /lost+found/ 
vfs objects = full_audit
full_audit:prefix = %u|%I|%m|%S
full_audit:success = mkdir rename rmdir pwrite write unlink open close
full_audit:failure = mkdir rename rmdir pwrite write unlink open close
full_audit:facility = local7
full_audit:priority = warning
...

Не забудьте добавить сообщение на rsyslog, чтобы сгенерировать данные из разделяемой папки в лог-файл:

$ grep local7 /etc/rsyslog.conf 
local7.*            /var/log/samba/audit.log
0
ответ дан 4 December 2019 в 04:51

Теги

Похожие вопросы