跳转到内容

设置共享文件夹权限 ​

这一篇设置三层权限里的第 1 层「共享权限」:让该连的人连上并读写,其他人连不上。做完之后,你会有一个只对指定用户组开放、家长可读写、孩子只读的 SMB 共享,并且知道怎么确认它真的生效。

开始之前 ​

  • 已经有共享文件夹,并且按 SMB/CIFS 共享添加了 SMB 共享。
  • 已经按 用户与用户组建好用户和用户组。
  • 记住第 1 层只管 SMB 和 FTP。NFS、SFTP、容器不看它,见 三层权限。
  • 文件系统层保持默认(2775 root:users),并且用户都在 users 组里。否则 SMB 层放行了,文件系统层照样会挡住。

本文用的例子:共享文件夹 family,家长组 parents(alice、bob)可读写,孩子组 kids(kid1)只读,其他人连不上。

方法一:从共享文件夹入口授权 ​

  1. 打开 存储器 → 共享文件夹(Storage → Shared Folders),选中 family,点击工具栏里的 权限(Permissions)图标按钮。
  2. 页面列出所有非系统用户和用户组,每一行有三个按钮:读/写(Read/Write)、只读(Read-only)、禁止读写(No access)。一个都不选,就是「未设置」。
  3. 点 parents 行的 读/写,点 kids 行的 只读。选错了,再点一次已选中的按钮就能取消。
  4. 点击 保存(Save)。页面顶部出现黄色提示条时,点击 应用(Apply)。

页面上方的工具栏还有一个 复制权限(Copy permissions)图标按钮:选一个来源共享文件夹,点 复制(Copy),就把来源的整套共享权限拷到当前共享文件夹。注意它会立即写入,并覆盖当前共享文件夹原有的全部共享权限,不需要再点 保存。复制后先确认表格显示的是新权限;如果还是旧内容,先刷新页面,不要直接点 保存,否则页面上的旧内容会把刚复制的结果写回去。

方法二:从用户或用户组入口授权 ​

新来一个人,要给他开通很多共享文件夹时,从人的角度设置更快:

  1. 打开 用户 → 用户(Users → Users)或 用户 → 用户组(Users → Groups),选中要授权的用户或组,点击 共享文件夹权限(Shared folder permissions)图标按钮。
  2. 页面列出所有共享文件夹,在每一行为这个用户(或组)选 读/写、只读或禁止读写。
  3. 点击 保存,按需点 应用。

两个入口改的是同一份数据,只是视角不同。

同时检查 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'

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。

参考资料 ​

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