外观
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 的最低协议 | 说明 |
|---|---|---|
| SMB1 | NT1 | 已弃用。选它时 OMV 还会额外允许 NTLMv1 认证,安全性很差 |
| SMB2(默认) | SMB2_02 | 现代客户端都支持 |
| SMB3 | SMB3_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)里。有三处:
- 共享表单里的:追加到这个共享自己的配置段。
设置页「高级设置」一栏里的:追加到全局配置段。设置页「主目录」一栏里的:追加到主目录共享的配置段。
规则:
- 每行写一个
参数 = 值,先查 smb.conf 手册确认参数名,并确认 OMV 的界面里没有同名选项,不要重复设置。 - 不要新开
[共享名]之类的段落,也不要去手改/etc/samba/smb.conf:OMV 每次应用都会重写整个文件,手改的内容会被覆盖。 - 写错了会怎样:应用时 OMV 先用
samba-tool testparm检查配置,不通过就不会启动或重启服务,这次应用报错。把出错的那一行删掉,再应用。 - 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 版本,见上文「最低协议版本」。
审核日志太大。 取消勾选 审核文件操作 并应用。
回收站占了很多空间。 设置 保留时间 和 文件大小限制,或者点 立即清空。
参考资料
- OMV 官方文档:Samba、OMV 是怎么工作的(应用配置时
smb.conf被重写、Samba 重启) - OMV 源码:
srv/salt/omv/deploy/samba/files/shares.j2、global.j2、cron-recyclebin-script.j2 - Samba 手册:smb.conf、vfs_recycle、vfs_full_audit