1.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 页面上的历史选项卡。
1.7.1. 添加使用 POSIX ACL 的共享
您可以创建一个名为 example
的共享,它提供 /srv/samba/example/
目录的内容,并使用 POSIX ACL。
先决条件
Samba 采用以下模式之一设置:
流程
如果不存在,请创建文件夹。例如:
# mkdir -p /srv/samba/example/
如果您在
enforcing
模式下运行 SELinux,请在目录中设置samba_share_t
上下文:# semanage fcontext -a -t samba_share_t "/srv/samba/example(/.*)?" # restorecon -Rv /srv/samba/example/
在目录中设置文件系统 ACL。详情请查看:
将示例共享添加到
/etc/samba/smb.conf
文件中。例如,添加启用了共享的写操作:[example] path = /srv/samba/example/ read only = no
注意无论文件系统 ACL 是什么;如果您没有设置
read only = no
,Samba 会以只读模式共享该目录。验证
/etc/samba/smb.conf
文件:# testparm
打开所需的端口,并使用
firewall-cmd
工具重新加载防火墙配置:# firewall-cmd --permanent --add-service=samba # firewall-cmd --reload
重启
smb
服务:# systemctl restart smb
1.7.2. 在使用 POSIX ACL 的 Samba 共享中设置标准 Linux ACL
Linux 中的标准 ACL 支持为一个所有者、一个组和所有其他未定义用户设置权限。您可以使用chown
、chgrp
和chmod
工具来更新 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)
手册页
1.7.3. 在使用 POSIX ACL 的 Samba 共享中设置扩展的 ACL
如果文件系统中保存了共享目录的支持扩展 ACL,您可以使用它们设置复杂的权限。扩展 ACL 可以包含多个用户和组群的权限。
扩展 POSIX ACL 可让您使用多个用户和组配置复杂的 ACL。但是,您只能设置以下权限:
- 无权限
- 读权限
- 写权限
- 全控制
如果您需要更细粒度的 Windows 权限,如 创建文件夹 / 追加数据
,请将共享配置为使用 Windows ACL。
请参阅 设置使用 Windows ACL 的共享。
以下流程演示了如何在共享中启用扩展 ACL。另外,它还包含有关设置扩展 ACL 的示例。
先决条件
- 存在要设置 ACL 的 Samba 共享。
流程
在
/etc/samba/smb.conf
文件中的共享部分启用以下参数,以启用扩展 ACL 的 ACL 继承:inherit acls = yes
详情请查看
smb.conf(5)
手册页中的参数描述。重启
smb
服务:# systemctl restart smb
在目录中设置 ACL。例如:
例 1.2. 设置扩展 ACL
以下步骤为
Domain Admins
组设置读、写和执行权限,为Domain Users
组设置读和执行权限,并拒绝其他人对/srv/samba/example/
目录的访问:为主用户帐户组禁用自动授予权限:
# setfacl -m group::--- /srv/samba/example/ # setfacl -m default:group::--- /srv/samba/example/
目录的主组还被映射到动态
CREATOR GROUP
主体。当您对Samba 共享使用扩展 POSIX ACL 时,主体会被自动添加,您无法将其删除。设置目录中的权限:
对
Domain Admins
组赋予读、写和执行权限:# setfacl -m group:"DOMAIN\Domain Admins":rwx /srv/samba/example/
对
Domain Users
组赋予读和执行权限:# setfacl -m group:"DOMAIN\Domain Users":r-x /srv/samba/example/
other
ACL条目设置权限,以拒绝与其他 ACL 条目不匹配的用户的访问:# setfacl -R -m other::--- /srv/samba/example/
这些设置只适用于这个目录。在 Windows 中,这些 ACL 映射到
仅此文件夹
模式。要使上一步中设置的权限被在此目录中创建的新文件系统对象继承,请执行以下操作:
# 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]
无
只限于这个文件夹
全控制
只适用于子文件夹和文件
无
只适用于子文件夹和文件
[a] Samba从othe
ACL 条目映射此主体的权限。[b] Samba 将目录的所有者映射到此条目。[c] Samba 将目录的主组群映射到这个条目。[d] 在新文件系统对象中,创建者会自动继承这个主体的权限。[e] 在使用 POSIX ACL 的共享中不支持从 ACL 配置或删除这些主体。[f] 在新文件系统对象中,创建器的主组群自动继承这个主体的权限。