我的网络上有一个运行 Debian Jessie 8.7 的 Filer Server,带有 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
,它只为我提供有关在服务器的本地文件系统上使用共享文件夹的进程的信息。$ 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
似乎不是解决这个问题的选项?
根据我的发现,感谢VFS 模块,Samba 不会为正在共享和使用的文件保留文件描述符,无论它是哪种普通文件,只有一个例外。
lsof
我发现通过或可以看到打开文件的唯一情况smbstatus -L
是,当您从Microsoft Office 2010开始打开文件时。例如,当您通过Microsoft Office 2007或LibreOffice 4打开一个 .docx 文件时,同样的情况不会发生。
通常会发生什么(忘记上面关于 Microsoft Office 2010 以后的文件的情况:一旦客户端计算机从 Samba 维护的共享文件夹中打开一个文件,该文件将缓存在客户端计算机的文件系统上,然后在服务器的文件系统。
下面,我描述了我在使用VFS Modules for Samba进行实验时注意到的一些观察结果。
此功能的配置允许审核在每个共享文件夹上执行的操作,在我的答案末尾进行了描述。
对于文本文档、图像、PDF、媒体文件、客户端计算机:
在客户端打开文件
保存文件
关闭文件
对于 Microsoft Office 文件(.docx、.doc、.xls、.xlsx 等),客户端计算机:
在客户端打开文件
将数据写入文件(每个写入的字节,生成 OPEN/CLOSE 操作)
保存文件
关闭文件
如果您计划为 Samba 实现 VFS 模块,这里有一些链接可以指导您完成设置(不要忘记安装包
samba-vfs-modules
):以下是 的摘录
smb.conf
,显示了特定共享文件夹的功能设置:不要忘记添加一条语句
rsyslog
,以便将共享文件夹中的数据生成到日志文件中: