Samba 忽略 POSIX ACL

Samba 忽略 POSIX ACL

我有一台运行 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 userforce 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"

将允许其他组写入共享,但因为我的份额文件夹仅允许域用户写它显然会失败。

相关内容