跳转到内容

SMB 进阶:回收站、隐藏文件、审计与扩展选项 ​

SMB 基础只涉及启用和添加共享。这一篇讲 SMB 共享表单和设置页里更深的选项:回收站、隐藏文件、审核文件操作、继承权限、限制主机、最低协议版本、符号链接和扩展选项。每一项都会说明它做什么、有什么代价。

应用 SMB 设置会重启 smbd,已有连接会断

  • 影响范围:OMV 部署 SMB 配置时会完全重写 smb.conf 并重启 Samba 守护进程(官方开发文档的描述)。所有客户端的 SMB 连接断开,正在复制的文件会失败。把 最低协议版本 调高,会让旧设备连不上。扩展选项写错,会导致配置检查失败,这次应用报错。
  • 前置条件:挑没人在传输大文件的时候操作;改之前记下原来的值;清楚你的客户端支持哪个 SMB 版本;一次只改一项,方便定位问题。
  • 回退:把改过的选项改回原值,或删掉扩展选项里新增的行,保存后再次点击顶部黄色提示条上的 应用(Apply)。

SMB 共享的选项在 服务 → SMB/CIFS → 共享(Services → SMB/CIFS → Shares)里,选中共享点击 编辑(Edit);全局选项在 服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)。

回收站 ​

勾选 启用回收站(Enable recycle bin)后,下面三个相关项生效:

选项默认说明
文件大小限制(Maximum file size)不限可选 1 MiB 到 4 GiB。超过限制的文件不进回收站,而是直接删除
保留时间(Retention time)0单位是天。回收站里的文件超过这么多天自动清理;0 表示不自动清理,只能手动
立即清空(Empty now)编辑已有共享时才能点的图标按钮,清空这个共享的回收站

它是这样工作的:

  • 通过 SMB 删除的文件,被移到共享文件夹里的 .recycle/<用户名>/,保留原来的目录结构,同名文件保留多个版本。临时文件(如 *.tmp、~$*)不会进回收站。
  • 只有通过 SMB 删除才会进回收站。通过 SFTP、NFS、容器或本机 shell 删除的,直接没了。
  • 它就在共享文件夹里面,占用的是同一块空间,被 rsync 备份时也会一起被带走。
  • 清理由 OMV 的每日计划任务完成,按「删除那一刻」起算保留时间。
  • .recycle 以点开头,隐藏点文件 默认勾选,所以 Windows 里要打开「显示隐藏的项目」才看得见。取回文件:连上共享,进 .recycle 复制回来;或在 OMV 的 shell 里到 <共享文件夹的绝对路径>/.recycle/<用户名>/ 找。

回收站不是备份:它只防误删,不防硬盘故障,也防不了通过其他协议的删除。备份见 备份策略。

隐藏文件 ​

  • 隐藏点文件(Hide dot files):默认勾选。把以点开头的文件标记为「隐藏」属性,Windows 默认不显示它们。取消勾选,它们就当作普通文件显示。这只影响显示,不是权限。
  • 可浏览(Browseable):控制共享本身出不出现在共享列表里,见 SMB 基础。
  • 存储 DOS 属性(Store DOS attributes):默认不勾选。勾选后,Windows 的隐藏、只读、存档、系统属性会存进文件系统的扩展属性,要求文件系统支持扩展属性。
  • 扩展属性(Extended attributes):默认勾选,允许客户端访问共享上的扩展属性。

审核文件操作 ​

勾选 审核文件操作(Audit file operations)后,Samba 的 full_audit 模块会把下面这些事件记到系统日志:

  • 成功的:新建目录、重命名、删除、写入。
  • 失败的:连接。

每条记录包含用户、客户端地址、共享名、文件路径、操作和结果。查看方法:诊断 → 系统日志 → 日志(Diagnostics → System Logs → Logs),在日志类型里选 SMB/CIFS - 审核。

要知道几件事:

  • 日志量可能很大:每次写入都记一行,大文件复制会产生很多条。
  • 日志存在 systemd 日志里。OMV 8.1.1 的更新记录写明,journald 的默认总上限是 1 GiB,并估计这相当于大约 3 个月的日志;审核日志量大时,实际保留时间会短得多,所以它不是长期审计档案。要长期留存,把日志转发到远程 syslog,见 诊断 → 系统日志 → 远程(Diagnostics → System Logs → Remote)和 查看系统日志。
  • 这是对用户行为的记录,在团队里使用前要告知大家。

继承 ACLs 与继承权限 ​

两个选项默认都不勾选。

  • 继承 ACLs(Inherit ACLs):让新建的文件和子目录遵循上级目录的默认 ACL。Samba 手册说,打开它会把 Unix 模式设为 0777,以保证默认 ACL 能传递下去。适合你已经用 ACL 做了权限设计、并希望 SMB 创建的内容也遵循它的情况。
  • 继承权限(Inherit permissions):新建的文件和目录按上级目录的权限位来,覆盖 OMV 默认的创建掩码。OMV 默认让 SMB 新建的文件是 664、目录是 775(组成员可写);打开它之后,会改成跟随上级目录。想让新内容不自动变成「组可写」,比如只读媒体库,就勾选它,见 常见权限方案。

最低协议版本 ​

设置页的 最低协议版本(Minimum protocol version)有三档:

选项对应 Samba 的最低协议说明
SMB1NT1已弃用。选它时 OMV 还会额外允许 NTLMv1 认证,安全性很差
SMB2(默认)SMB2_02现代客户端都支持
SMB3SMB3_00会拒绝只支持 SMB2.x 的旧客户端,例如 Windows 7

建议保持默认的 SMB2。只有确认所有客户端都支持 SMB3 时才提高;不要为了让老电视、老机顶盒连上而降到 SMB1,优先升级或更换那个设备,降低服务端安全不是通用解决办法。

另外,共享表单里的 传输加密(Transport encryption)可以强制该共享使用 SMB 加密,不支持加密的客户端会被拒绝访问,同时会增加一些 CPU 开销。

允许主机与拒绝主机 ​

共享表单里的 允许主机(Hosts allow)和 拒绝主机(Hosts deny)限制哪些客户端地址能访问这个共享:

  • 多个值用逗号、空格或制表符分隔,可以写主机名或 IP。例如只允许 192.168.1 网段,在 允许主机 里写 192.168.1.,具体写法见 Samba 手册里的 hosts allow。
  • 两个列表冲突时,允许优先(Samba 手册原话)。
  • 留空使用默认。

这是按地址的限制,叠加在共享权限之上。地址会变、也可能被伪造,所以它是辅助手段,不能代替账号密码;DHCP 下地址变化会让规则失效,需要固定 IP 或 DHCP 保留。

符号链接 ​

  • 跟随符号链接(Follow symlinks):默认勾选,允许共享内部的符号链接。
  • 宽链接(Wide links):默认不勾选,允许符号链接指向共享之外。只要有一个共享勾选了它,OMV 就会在全局配置里加上 allow insecure wide links = yes,客户端可能借链接访问共享之外的文件。只在确实需要、且用户可信时才开。勾选宽链接会自动勾选跟随符号链接。

扩展选项 ​

界面里没有的 Samba 参数,可以写在 扩展选项(Extra options)里。有三处:

  • 共享表单里的:追加到这个共享自己的配置段。
  • 设置 页「高级设置」一栏里的:追加到全局配置段。
  • 设置 页「主目录」一栏里的:追加到主目录共享的配置段。

规则:

  1. 每行写一个 参数 = 值,先查 smb.conf 手册确认参数名,并确认 OMV 的界面里没有同名选项,不要重复设置。
  2. 不要新开 [共享名] 之类的段落,也不要去手改 /etc/samba/smb.conf:OMV 每次应用都会重写整个文件,手改的内容会被覆盖。
  3. 写错了会怎样:应用时 OMV 先用 samba-tool testparm 检查配置,不通过就不会启动或重启服务,这次应用报错。把出错的那一行删掉,再应用。
  4. OMV 自己设置的默认值,比如新文件的掩码、回收站目录,可以用 OMV_SAMBA_* 环境变量调整,而不是在扩展选项里覆盖,见 环境变量。

一个无害的例子:在 SMB 里隐藏 Mac 和 Windows 自动产生的杂项文件。

ini
hide files = /.DS_Store/Thumbs.db/

设置页的其他选项 ​

选项说明
时间服务器、使用 sendfile、异步 I/O、日志级别和性能、排错有关,见 SMB 传输性能调优
启用 NetBIOS、启用 WINS 服务器、WINS 服务器给老系统的名称解析和发现,默认关闭,见 局域网发现

检查结果 ​

  • 回收站:通过 SMB 删一个测试文件,然后在 OMV 的 shell(SSH 或本机控制台,root 身份)里运行 ls -la <共享文件夹的绝对路径>/.recycle/,应该看到以用户名命名的目录。
  • 审核:删除后,在 诊断 → 系统日志 的 SMB 审核日志里应该有一条 unlinkat 记录。
  • 扩展选项:这次应用没有报错,并且 testparm -s 的输出里能看到你加的那一行。
  • 协议版本:在 Windows 的 PowerShell 里运行 Get-SmbConnection | Select-Object ServerName,ShareName,Dialect,在 macOS 的终端里运行 smbutil statshares -a,可以看到客户端实际协商出的 SMB 版本。

常见问题 ​

应用时报错。 十有八九是扩展选项里有语法错误。报错信息里有 testparm 的输出,找到出错的那一行删掉。

开了回收站,却找不到删掉的文件。 先确认是不是通过 SMB 删的;再确认文件没有超过 文件大小限制,也不是被排除的临时文件;最后在客户端里打开「显示隐藏的项目」。

老电视或老播放器连不上。 看它支持的 SMB 版本,见上文「最低协议版本」。

审核日志太大。 取消勾选 审核文件操作 并应用。

回收站占了很多空间。 设置 保留时间 和 文件大小限制,或者点 立即清空。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。