web-dev-qa-db-ja.com

共有フォルダから開いているファイルを一覧表示する

ネットワーク上でDebianJessie8.7を実行しているファイラーサーバーとSamba4.2.14があります。

これまで、ネットワーク全体に1つの共有フォルダーを構成しただけで、この共有に開いているファイルがあるかどうかを確認したいと思います。


  • smbstatus -Lを実行すると、開いているファイルまたはロックされているファイルに関する情報は示されません。

    $  smbstatus -L
    Registered MSG_REQ_POOL_USAGE
    Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
    No locked files
    
  • lsofを使用すると、サーバーのローカルファイルシステム上の共有オンフォルダーを使用しているプロセスに関する情報のみが表示されます。

    $ lsof | grep backup
    smbd      1432      root  cwd    DIR     8,9     4096       2 /backup/local
    
  • また、fuserを使用すると、開いているファイルまたはロックされているファイルに関する情報は提供されません。サーバーのローカルファイルシステム上の共有フォルダーを使用しているsPIDを表示するだけです。

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

次のような開いているファイルを追跡する他のオプションがいくつかあります。

  • シェルスクリプトを使用して、。doc、.docx、.xls、.xlsxなどの拡張子を持つすべてのファイルを一覧表示し、定義するためにif [ -f ".~lock.new_document.docx#" ] ; thenを作成しますMicrosoft Officeファイルが開かれているかどうかにかかわらず、これは回避策であり、私が探しているものではありません。

  • VFS Modules を使用して、共有フォルダー内のファイルの操作を監査することは、シェルスクリプトのソースになる可能性がありますが、実用的ではありません。


smbstatus -Lはこの問題のオプションではないように思われるので、Samba共有フォルダーから開いている/ロックされているファイルを一覧表示できるツールを知っている可能性のある人はいますか?

1
ivanleoncz

私の調査結果によると、VFS Modulesのおかげで、Sambaは、1つの例外を除いて、通常のファイルの種類に関係なく、共有および使用されているファイルのファイル記述子を保持しません。

開いているファイルがlsofまたはsmbstatus -Lを介して表示されることがわかった唯一の状況は、Microsoft Office 201以降のファイルを開いている場合です。

$ 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

たとえば、Microsoft Office 2007またはLibreOffice 4を介して.docxファイルを開いた場合、同じことは起こりません。


通常何が起こるか(Microsoft Office 2010以降のファイルに関する上記の状況を忘れる:クライアントマシンがSambaによって維持されている共有フォルダーからファイルを開くと、このファイルはクライアントマシンのファイルシステムにキャッシュされ、サーバーのファイルシステム。

以下に、Samba用のVFSモジュールを使用した実験中に気付いたいくつかの観察結果について説明します。

すべての共有フォルダーで実行される操作を監査できるこの機能の構成については、私の回答の最後に説明されています。


テキストドキュメント、画像、PDF、メディアファイルの場合、クライアントマシン

  • ファイルを開きます
  • データをキャッシュします
  • Serverのローカルファイルシステム上のファイルを閉じます
  • 変更を保存するとき、SambaServerに一時ファイルを作成します
  • ファイルを閉じると、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など)の場合、クライアントマシン

  • ファイルを開きます
  • データをキャッシュします
  • Serverのローカルファイルシステム上のファイルを閉じます
  • 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 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#

Samba用VFSモジュールの実装を計画している場合は、セットアップをガイドできるリンクがいくつかあります(パッケージ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
1
ivanleoncz