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

У меня в сети есть файл-сервер под управлением Debian Jessie 8.7 с Samba 4.2.14.

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


  • При беге smbstatus -L, он не указывает никакой информации о каких-либо открытых или заблокированных файлах.

    $  smbstatus -L
    Registered MSG_REQ_POOL_USAGE
    Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
    No locked files
    
  • С помощью lsof, он только дает мне информацию о том, какой процесс использует общую папку on, в локальной файловой системе сервера.

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

    $ fuser /backup/local
    /backup/local:  1432c
    

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

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

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


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

1 ответ

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

Единственная ситуация, в которой я обнаружил, что открытые файлы видны через lsof или же smbstatus -L, когда у вас есть открытые файлы из Microsoft Office 2010 года.

$ lsof | grep bkp
bash      1272      root  cwd       DIR      8,9         4096     651521 /bkp/local/John
smbd      2492      root  cwd       DIR      8,9         4096          2 /bkp/local
smbd      6127      root  cwd       DIR      8,9         4096          2 /bkp/local
smbd      6127      root   35r      DIR      8,9         4096     651521 /bkp/local/John
smbd      6127      root   36r      DIR      8,9         4096          2 /bkp/local
smbd      6127      root   37r      DIR      8,9         4096          2 /bkp/local
smbd      6127      root   38r      DIR      8,9         4096          2 /bkp/local
smbd      6127      root   41r      DIR      8,9         4096          2 /bkp/local
smbd      6127      root   42r      DIR      8,9         4096     651521 /bkp/local/John
smbd      6127      root   44uR     REG      8,9            0     651529 /bkp/local/John/word_john.docx
lsof      6345      root  cwd       DIR      8,9         4096     651521 /bkp/local/John
grep      6346      root  cwd       DIR      8,9         4096     651521 /bkp/local/John
lsof      6347      root  cwd       DIR      8,9         4096     651521 /bkp/local/John


$ smbstatus -L
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
Locked files:

Pid    Uid    DenyMode  Access      R/W      Oplock     SharePath     Name                     Time

6127         1001       DENY_NONE  0x100081    RDONLY     NONE        /respaldo/segeco_local   .   Tue May 30 14:10:14 2017
6127         1001       DENY_NONE  0x100081    RDONLY     NONE        /respaldo/segeco_local   .   Tue May 30 14:10:14 2017
6127         1001       DENY_NONE  0x100081    RDONLY     NONE        /respaldo/segeco_local   .   Tue May 30 14:10:14 2017
6127         1001       DENY_WRITE 0x12019f    RDWR       LEVEL_II    /respaldo/segeco_local   Susana/word_susana.docx   Tue May 30 14:10:38 
2017
6127         1001       DENY_NONE  0x100081    RDONLY     NONE        /respaldo/segeco_local   Susana   Tue May 30 14:14:25 2017
6127         1001       DENY_NONE  0x100081    RDONLY     NONE        /respaldo/segeco_local   Susana   Tue May 30 14:14:25 2017

То же самое не происходит, когда у вас есть, например, файл.docx, открытый через Microsoft Office 2007 или LibreOffice 4.


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

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

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


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

  • открывает файл
  • кеширует данные
  • закрывает файл в локальной файловой системе Сервера
  • при сохранении изменений Samba создает временный файл на сервере
  • при закрытии файла 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#) и закрывает его
  • каждый байт, вставленный на клиентский компьютер, генерирует операции открытия / закрытия исходного файла
  • при сохранении файла клиентский компьютер записывает изменения в файл
  • при закрытии файла 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)

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-modules):

Вот выдержка из 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
Другие вопросы по тегам