Share access controls

共享访问控制

可以通过多种选项控制对每个共享目录的访问。本节以 [share] 为例,介绍一些常用选项。

这些选项大多涉及用户身份验证,因此先简要说明 Samba 如何完成身份验证。

验证 Samba 用户身份

Samba 无法使用自身的原生协议直接验证现有 Linux 用户,因为这与 Linux 在系统中存储密码的方式不兼容,例如 /etc/shadow 中的密码存储方式。系统里的本地 Linux 用户不会自动成为 Samba 用户。要让一个本地 Linux 用户能够使用 Samba,必须在 Samba 凭据数据库中创建相应用户。这意味着会存在两套用户数据库:Linux 的用户数据库与 Samba 的用户数据库。

另请参阅

关于创建和管理 Linux 用户,请参阅《用户与用户组管理》。

要把现有 Linux 用户加入 Samba 用户数据库,可使用 smbpasswd 命令。例如,下面把名为 melissa 的现有 Linux 用户添加到 Samba 用户数据库:

sudo smbpasswd -a melissa

命令会要求输入密码两次以便确认,然后创建 Samba 用户。

注意

由于这是独立的用户数据库,Samba 用户的密码不必与该用户的 Linux 密码相同。事实上,以这种方式配置的 Samba 服务器通常不会为这些 Linux 用户设置有效的登录密码:创建这些用户,只是为了能够创建对应的 Samba 用户。

如果 Linux 中不存在这个用户,smbpasswd 命令就会失败。Samba 用户必须先作为 Linux 用户存在。

以后修改现有 Samba 用户的密码时,也使用同一个命令。例如:

sudo smbpasswd melissa

Samba 也有用户组的概念,但用户组本身不执行身份验证,因此无须为 Samba 组建立单独的组数据库。可以使用普通 Linux 用户组,只要组内成员同时存在于 Linux 与 Samba 的用户数据库中。

用户组

用户组是一组对特定网络资源拥有相同访问权限的用户,可以更细致地控制资源访问。例如,假设“qa”组中包含 Freda、Danika 和 Rob;另一个“support”组中包含 Danika、Jeremy 和 Vincent。允许“qa”组访问的网络资源,可以由 Freda、Danika 和 Rob 使用,但 Jeremy 与 Vincent 无法使用。Danika 同时属于“qa”和“support”两组,因此可以访问两组各自有权使用的资源。其他用户只能访问明确授予其所属用户组的资源。

在 Samba 配置文件 /etc/samba/smb.conf 中引用用户组时,应在组名前加上 @ 符号。例如,要使用名为 sysadmin 的组,在 /etc/samba/smb.conf 的某个配置段中应写为 @sysadmin。如果组名包含空格,应加上双引号,例如 "@LTS Releases"。

读写权限

读写权限明确规定计算机或用户对某个共享资源所拥有的权利。可以编辑 /etc/samba/smb.conf 文件,在共享配置段中指定这些权限。

例如,已经定义了一个名为 share 的 Samba 共享,希望让“qa”组只读,而允许“sysadmin”组以及名为“vincent”的用户写入该共享,可以编辑 /etc/samba/smb.conf 文件,在 [share] 配置段下添加以下内容:

read list = @qa
write list = @sysadmin, vincent

另一种 Samba 权限是为特定共享资源声明管理权限。获得某项资源管理权限的用户,可以读取、写入或修改该资源中的任何信息。

例如,要赋予用户 Melissa 对示例共享 share 的管理权限,可以编辑 /etc/samba/smb.conf 文件,在 [share] 配置段下添加以下行:

admin users = melissa

注意

请记住,在 smb.conf 中列出并用于这些访问控制的用户,必须同时是 Linux 用户和 Samba 用户。

编辑 /etc/samba/smb.conf 后,运行以下命令重新加载 Samba,使更改生效:

sudo smbcontrol smbd reload-config

文件系统权限

现在已经通过 Samba 配置限制了哪些用户组可以访问共享目录,还需要检查文件系统权限。

传统 Linux 文件权限无法很好地映射到 Windows NT 访问控制列表(ACL)。Ubuntu 服务器支持 POSIX ACL,能够提供更精细的控制。例如,要在 EXT3 文件系统上的 /srv 启用 ACL,可编辑 /etc/fstab 并添加 acl 选项:

UUID=66bcdd2e-8861-4fb0-b7e4-e61c569fe17d /srv  ext3    noatime,relatime,acl 0       1

然后重新挂载分区:

sudo mount -v -o remount /srv

注意

本例假定 /srv 位于独立分区。如果 /srv 或你配置的其他共享路径属于 / 分区,则可能需要重新启动。

为了匹配前面的 Samba 配置,需要授予“sysadmin”组对 /srv/samba/share 的读、写和执行权限,授予“qa”组读和执行权限,并将文件所有者设为“melissa”。在终端输入以下命令:

sudo chown -R melissa /srv/samba/share/
sudo chgrp -R sysadmin /srv/samba/share/
sudo setfacl -R -m g:qa:rx /srv/samba/share/

注意

上面的 setfacl 命令会授予 执行权限,其范围为 /srv/samba/share 目录中的所有文件;这未必符合你的实际需求。

现在,从 Windows 客户端应该可以看到新的文件权限已经生效。关于 POSIX ACL 的更多信息,请参阅 acl(5) 和 setfacl(1) 手册页。

延伸阅读

来源与版权

原文:Samba 共享访问控制。作者:Canonical Ubuntu Server 文档贡献者。

原文与示例归 Canonical 及 Ubuntu 文档贡献者所有,保留官方来源和文档许可链接。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容