我的网络上有一个运行 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
,它只会给我有关在服务器的本地文件系统上哪个进程正在使用共享文件夹的信息。$ 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
是当您从微软 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 文件时,不会发生同样的情况:微软 Office 2007或者LibreOffice 4。
通常会发生什么(忘记上面有关 Microsoft Office 2010 及更高版本的文件的情况):一旦客户端计算机打开 Samba 维护的共享文件夹中的文件,该文件就会缓存在客户端计算机的文件系统中,并在服务器的文件系统中关闭。
下面,我描述了我在实验过程中注意到的一些现象Samba 的 VFS 模块。
此功能的配置允许审核对每个共享文件夹执行的操作,在我的答案的末尾进行了描述。
对于文本文档、图像、PDF、媒体文件,客户端计算机:
- 打开文件
- 缓存数据
- 关闭本地文件系统上的文件服务器
- 保存修改时,桑巴在上创建一个临时文件服务器
- 关闭文件时,桑巴删除原始文件并将 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#) 并将其关闭
- 插入的每个字节客户端计算机,在原始文件上生成打开/关闭操作
- 保存文件时,客户端计算机将修改写入文件
- 关闭文件时,桑巴删除 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#
如果你计划实施Samba 的 VFS 模块,这里有一些链接可以指导您完成设置(不要忘记安装包samba-vfs-modules
):
- https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/VFS.html
- https://www.samba.org/samba/docs/man/manpages-3/vfs_full_audit.8.html
以下是摘录的一部分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