Red Hat Training

A Red Hat training course is available for RHEL 8

3.7. 设置使用 POSIX ACL 的 Samba 文件共享

作为 Linux 服务,Samba 支持与 POSIX ACL 的共享。它们允许您使用诸如chmod等工具在 Samba 服务器上本地管理权限。如果共享是存储在支持扩展属性的文件系统中,您可以使用多个用户和组定义 ACL。

注意

如果您需要使用精细的 Windows ACL,请参阅 设置使用 Windows ACL 的共享

这个部分的内容基于 Samba Wiki 中发布的 Setting up a Share Using POSIX ACLs 文档。许可证: CC BY 4.0。作者和贡献者:请参阅 Wiki 页面上的历史选项卡。

3.7.1. 添加使用 POSIX ACL 的共享

您可以创建一个名为 example 的共享,它提供 /srv/samba/example/ 目录的内容,并使用 POSIX ACL。

先决条件

Samba 采用以下模式之一设置:

流程

  1. 如果不存在,请创建文件夹。例如:

    # mkdir -p /srv/samba/example/
  2. 如果您在enforcing模式下运行 SELinux,请在目录中设置samba_share_t上下文:

    # semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?"
    # restorecon -Rv /srv/samba/example/
  3. 在目录中设置文件系统 ACL。详情请查看:

  4. 将示例共享添加到/etc/samba/smb.conf文件中。例如,添加启用了共享的写操作:

    [example]
    	path = /srv/samba/example/
    	read only = no
    注意

    无论文件系统 ACL 是什么;如果您没有设置read only = no,Samba 会以只读模式共享该目录。

  5. 验证/etc/samba/smb.conf文件:

    # testparm
  6. 打开所需的端口,并使用firewall-cmd工具重新加载防火墙配置:

    # firewall-cmd --permanent --add-service=samba
    # firewall-cmd --reload
  7. 重启 smb 服务:

    # systemctl restart smb

3.7.2. 在使用 POSIX ACL 的 Samba 共享中设置标准 Linux ACL

Linux 中的标准 ACL 支持为一个所有者、一个组和所有其他未定义用户设置权限。您可以使用chownchgrpchmod工具来更新 ACL。如果需要精确控制,请使用更复杂的 POSIX ACL,请参阅

在使用 POSIX ACL 的 Samba 共享上设置扩展 ACL

以下步骤将/srv/samba/example/目录的所有者设置为root用户,将读写权限赋予Domain Users 组,并拒绝所有其他用户的访问。

先决条件

  • 存在要设置 ACL 的 Samba 共享。

流程

# chown root:"Domain Users" /srv/samba/example/
# chmod 2770 /srv/samba/example/

注意

对目录启用 set-group-ID(SGID)位会自动对目录组的所有新文件和子目录设置默认组,而不是通常的行为,将其设置为创建新目录条目的用户的主组。

其它资源

  • chown(1)chmod(1) 手册页

3.7.3. 在使用 POSIX ACL 的 Samba 共享中设置扩展的 ACL

如果文件系统中保存了共享目录的支持扩展 ACL,您可以使用它们设置复杂的权限。扩展 ACL 可以包含多个用户和组群的权限。

扩展 POSIX ACL 可让您使用多个用户和组配置复杂的 ACL。但是,您只能设置以下权限:

  • 无权限
  • 读权限
  • 写权限
  • 全控制

如果您需要更细粒度的 Windows 权限,如 创建文件夹 / 追加数据,请将共享配置为使用 Windows ACL。请参阅 设置使用 Windows ACL 的共享

以下流程演示了如何在共享中启用扩展 ACL。另外,它还包含有关设置扩展 ACL 的示例。

先决条件

  • 存在要设置 ACL 的 Samba 共享。

流程

  1. /etc/samba/smb.conf文件中的共享部分启用以下参数,以启用扩展 ACL 的 ACL 继承:

    inherit acls = yes

    详情请查看 smb.conf(5)手册页中的参数描述。

  2. 重启 smb 服务:

    # systemctl restart smb
  3. 在目录中设置 ACL。例如:

    例 3.2. 设置扩展 ACL

    以下步骤为Domain Admins组设置读、写和执行权限,为Domain Users组设置读和执行权限,并拒绝其他人对/srv/samba/example/目录的访问:

    1. 为主用户帐户组禁用自动授予权限:

      # setfacl -m group::--- /srv/samba/example/
      # setfacl -m default:group::--- /srv/samba/example/

      目录的主组还被映射到动态CREATOR GROUP主体。当您对Samba 共享使用扩展 POSIX ACL 时,主体会被自动添加,您无法将其删除。

    2. 设置目录中的权限:

      1. Domain Admins组赋予读、写和执行权限:

        # setfacl -m group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
      2. Domain Users组赋予读和执行权限:

        # setfacl -m group:"DOMAIN\Domain Users":r-x /srv/samba/example/
      3. other ACL条目设置权限,以拒绝与其他 ACL 条目不匹配的用户的访问:

        # setfacl -R -m other::--- /srv/samba/example/

      这些设置只适用于这个目录。在 Windows 中,这些 ACL 映射到仅此文件夹模式。

    3. 要使上一步中设置的权限被在此目录中创建的新文件系统对象继承,请执行以下操作:

      # setfacl -m default:group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
      # setfacl -m default:group:"DOMAIN\Domain Users":r-x /srv/samba/example/
      # setfacl -m default:other::--- /srv/samba/example/

      使用这些设置,现在将主体的仅此文件夹模式设置为此文件夹、子文件夹和文件模式。

    Samba 将流程中设置的权限映射到以下 Windows ACL:

    主体权限适用于

    domain\DomainAdmins

    全控制

    这个文件夹、子文件夹和文件

    Domain\Domain Users

    读和执行

    这个文件夹、子文件夹和文件

    每个人 [a]

    这个文件夹、子文件夹和文件

    所有者Unix 用户\所有者[b]

    全控制

    只限于这个文件夹

    primary_group (Unix 用户\primary_group) [c]

    只限于这个文件夹

    创建者所有者 [d] [e]

    全控制

    只适用于子文件夹和文件

    创建者组 [e] [f]

    只适用于子文件夹和文件

    [a] Samba从othe ACL 条目映射此主体的权限。
    [b] Samba 将目录的所有者映射到此条目。
    [c] Samba 将目录的主组群映射到这个条目。
    [d] 在新文件系统对象中,创建者会自动继承这个主体的权限。
    [e] 在使用 POSIX ACL 的共享中不支持从 ACL 配置或删除这些主体。
    [f] 在新文件系统对象中,创建器的主组群自动继承这个主体的权限。