外观
设置共享文件夹权限
这一篇设置三层权限里的第 1 层「共享权限」:让该连的人连上并读写,其他人连不上。做完之后,你会有一个只对指定用户组开放、家长可读写、孩子只读的 SMB 共享,并且知道怎么确认它真的生效。
开始之前
- 已经有共享文件夹,并且按 SMB/CIFS 共享添加了 SMB 共享。
- 已经按 用户与用户组建好用户和用户组。
- 记住第 1 层只管 SMB 和 FTP。NFS、SFTP、容器不看它,见 三层权限。
- 文件系统层保持默认(
2775 root:users),并且用户都在users组里。否则 SMB 层放行了,文件系统层照样会挡住。
本文用的例子:共享文件夹 family,家长组 parents(alice、bob)可读写,孩子组 kids(kid1)只读,其他人连不上。
方法一:从共享文件夹入口授权
- 打开
存储器 → 共享文件夹(Storage → Shared Folders),选中family,点击工具栏里的 权限(Permissions)图标按钮。 - 页面列出所有非系统用户和用户组,每一行有三个按钮:读/写(Read/Write)、只读(Read-only)、禁止读写(No access)。一个都不选,就是「未设置」。
- 点
parents行的 读/写,点kids行的 只读。选错了,再点一次已选中的按钮就能取消。 - 点击 保存(Save)。页面顶部出现黄色提示条时,点击 应用(Apply)。
页面上方的工具栏还有一个 复制权限(Copy permissions)图标按钮:选一个来源共享文件夹,点 复制(Copy),就把来源的整套共享权限拷到当前共享文件夹。注意它会立即写入,并覆盖当前共享文件夹原有的全部共享权限,不需要再点 保存。复制后先确认表格显示的是新权限;如果还是旧内容,先刷新页面,不要直接点 保存,否则页面上的旧内容会把刚复制的结果写回去。
方法二:从用户或用户组入口授权
新来一个人,要给他开通很多共享文件夹时,从人的角度设置更快:
- 打开
用户 → 用户(Users → Users)或用户 → 用户组(Users → Groups),选中要授权的用户或组,点击 共享文件夹权限(Shared folder permissions)图标按钮。 - 页面列出所有共享文件夹,在每一行为这个用户(或组)选 读/写、只读或禁止读写。
- 点击 保存,按需点 应用。
两个入口改的是同一份数据,只是视角不同。
同时检查 SMB 共享本身的选项
共享权限要在这些 SMB 共享选项配合下才按预期工作(服务 → SMB/CIFS → 共享(Services → SMB/CIFS → Shares),选中后点编辑):
| 选项 | 应该是 | 原因 |
|---|---|---|
| 公开(Public) | 否 | 设成「允许访客」后,共享权限不再限制谁能连,「禁止读写」也失效 |
| 只读(Read-only) | 不勾 | 勾上对所有人只读,共享权限里的「读/写」覆盖不了它 |
| 允许主机(Hosts allow)、拒绝主机(Hosts deny) | 空 | 这是按客户端地址的另一道限制,叠加在共享权限之上 |
要不要同时改文件系统权限
大多数情况下不用。先确认两点:
- 目录是默认的
2775 root:users。 - 要访问的用户都在
users组里。
如果你给共享文件夹换了专用属组,或者目录权限是 770、750,就要确保目标用户所在的组在文件系统层也有权限,做法见 ACL 详解 和 常见权限方案。
检查结果
从客户端验证。 换三个账号各连一次共享:
| 账号 | 预期 |
|---|---|
alice(parents 组) | 能读,能新建和删除文件 |
kid1(kids 组) | 能看、能读,新建文件被拒 |
| 一个不在两个组里的用户 | 连不上,提示拒绝访问或反复要密码 |
换账号测试前要先断开旧连接。Windows 对同一台服务器只会保留一套凭据,处理办法见 SMB/CIFS 共享。
在 OMV 上确认配置。 在 OMV 的 shell(SSH 或本机控制台,root 身份)里运行只读命令,看 OMV 把你的授权写成了什么:
sh
testparm -s 2>/dev/null | grep -E '^\[|valid users|invalid users|read list|write list'1
family 一节里应该能看到 valid users 包含 @"parents" 和 @"kids"、read list 是 @"kids"、write list 是 @"parents"(具体的引号和空格以命令输出为准)。
看当前连接。 诊断 → 服务 → SMB/CIFS(Diagnostics → Services → SMB/CIFS)显示当前有哪台客户端机器连着哪个共享(内容来自 smbstatus -s)。
常见问题
授权了但连不上。 依次检查:是否点了应用;用户是否在授权的组里(刚改过组成员要断开重连);目录权限是不是 770 而该用户不在属组里。
孩子居然能写。 第 1 层只管 SMB 和 FTP。孩子是不是同时在 parents 组里?是不是用 SFTP 或 NFS 在写?共享上有没有勾「只读」之外的例外?这些情况都要在文件系统层限制。
没授权的人也连得上。 一种可能是这个共享文件夹还没有任何「读/写」或「只读」条目(没有条目时所有已认证用户都能连);另一种是 SMB 共享的 公开 设成了「允许访客」。
列表里找不到 users 组。 users 是系统组,不在这里列出,请用自己建的组授权。
要精确到某个子目录。 共享权限只作用于整个共享,子目录要用 ACL。
参考资料
- OMV 官方文档:共享文件夹的 Permissions、用户页的 Shared Folder Permissions
- OMV 源码:
ShareMgmt::getPrivileges、setPrivileges、copyPrivileges;Samba 模板shares.j2里共享权限变成valid users等项的规则