我有一台运行 Samba 的 Ubuntu 10.04.4 LTS 服务器,并使用 PBIS(以前称为 Likewise-open)加入我们的 Active Directory 域。Samba 配置为使用 AD 用户/组进行身份验证,并且运行正常。此外,标准 Linux 权限(用户、组、其他)与 Samba 配合良好。但是,Samba 似乎完全忽略了使用扩展 ACL 设置的任何权限。
我尝试了其他地方推荐的各种 smb.conf 配置,但似乎都没有任何效果。
机器设置:
- 文件共享位于其自己的驱动器上。驱动器的 /etc/fstab 中的挂载信息为:
- UUID=372aa637-4b7b-45cc-8340-9d028893c196 /media/news-drive ext4 user_xattr,acl 0 2
- 机器使用 PBIS(以前称为 Likewise-open)加入域
- 共享的 Samba 配置是:
[共享] 评论 =, nt acl 支持 = 是 管理员用户 = 强制用户 = 强制组 = \domain^users 创建掩码 = 0770 目录掩码 = 0770
- 全局 Samba 配置
工作组 = dns 代理 = 无 服务器字符串 = 加载打印机 = 否 杯子选项 = 原始 来宾帐户 = pcguest 日志文件 = /var/log/samba/%m.log 最大日志大小 = 50 安全性 = ADS 境界 = 套接字选项 = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 接口 = 172.16.0.20 10.4.1.20 127.0.0.1 仅绑定接口 = 是 idmap uid = 16777216-33554431 idmap gid = 16777216-33554431 映射到访客 = 坏用户
- 我也在全局配置中使用了其中一些,但没有成功
idmap 后端 = idmap_rid:=16777216-33554431 nt acl 支持 = 是 继承 acls = 是 map acl 继承 = 是 地图档案 = 无 地图隐藏 = 否 地图只读 = 否 地图系统 = 无 存储 dos 属性 = 是 继承权限 = 是 模板 shell = /bin/false winbind 使用默认域 = 否
这里我缺少什么才能让 Samba 与扩展 ACL 一起工作?
正在发生的事情的一个例子
我在 Samba 共享中有一个文件夹。共享本身在我们的域内是完全开放的(“有效用户”设置设置为 AD 域的“域用户”组。)在该共享中,我有一个在文件系统级别具有更严格权限的文件夹(由一个 AD 用户拥有,组设置为只有少数人的 AD 组,权限 chmod 为 770)
问题是,我需要向另一个 AD 组授予该文件夹的访问权限,因此我运行“setfacl -mu::rwx ”以授予他们访问权限。这在 Linux 中有效(如果我使用 ssh 访问其中一个用户并导航到该文件夹)...但如果我使用同一个用户连接到 SMB 共享,并尝试导航到该文件夹,则访问被拒绝。
答案1
虽然回答这个问题晚了,但我还是想指出官方Samba 对 ACL 的支持文档。这适用于 Samba 4.0.0 及以上版本,在提出此问题时肯定不可用。但由于此问题出现在搜索引擎中,此链接可能会有所帮助。
基本步骤如下:
1. 确保文件系统支持 acls(ext4 现在默认支持,不需要额外的挂载选项)
2. 确保 Samba 已编译 ACL 支持。(是的,Ubuntu 14.04 LTS 默认支持):
smbd -b | grep HAVE_LIBACL
[global]
3. 通过在部分中设置以下内容来启用 ACL /etc/samba/smb.conf
:
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
有关详细信息,请访问上面链接的官方文档。
答案2
这是因为force user
、force group
和强制使用传统的 unix 样式权限,而这些create mask
权限directory mask
不能与继承 ACL 结合使用。要使继承起作用,您的默认 ACL 必须位于文件夹的文件系统级别,而不是位于 samba 共享本身上,但请注意,相互矛盾的权限将始终拒绝访问,例如,当用户具有用户权限但没有组权限时,samba 将在使用 ACL 时禁止访问(在我看来这是一个错误)例如:用户没有人是...的成员无组那么 ACL 就不需要允许任何人&nogroup 写权限,否则写访问被拒绝。只有桑巴表现如此!
创建继承默认权限的文件夹的一种可能方法是:
me@myHost:/shares$ getfacl myShare/
# file: myShare/
# owner: JohnDoe
# group: domain\040users
user::rwx
group::rwx #effective:r-x
group:domain\040users:rwx #effective:r-x
group:domain\040admins:rwx #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:domain\040users:rwx
default:group:domain\040admins:rwx
default:mask::rwx
default:other::r-x
带有值的部分default:*
是继承的有趣部分,因为任何新文件或文件夹在内部创建时都会获得这些值我的份额文件夹。请参阅设置facls设置的详细信息的手册页默认:create mask
文件或文件夹上的值。现在使用或directory mask
文件夹上的问题是默认:ACL设置是 samba 将覆盖这些默认值,在大多数情况下这些面具语句仅在您希望整个文件夹及其文件仅包含一个所有者和组时才有用。 ACL 更难配置,但与 Windows 机器上通常的情况一样,提供了更大的灵活性。 要使 Samba 遵守这些default:*::
权限,inherit acls
需要在以下部分中设置[global]
:
[global]
; Important if ACLs (eg: setfacl) contain default entries
; which samba honors only if this is set to 'yes'.
inherit acls = yes
[...]
[myShare]
comment = Put your files here
path = /shares/myShare
writeable = yes
这将允许每个人都可以写入共享...但是(!)并不一定意味着它在文件系统级别被允许,因为我的份额文件夹只允许域用户无论如何,对于偏执狂来说,可以通过仅允许特定组来缩小共享权限:
write list = @"domain users"
仅writeable=yes
对于定义在写清单. 确保共享和文件夹的权限没有矛盾,例如:
write list = @"other group"
将允许其他组写入共享,但因为我的份额文件夹仅允许域用户写它显然会失败。