Samba忽略POSIX ACL

我有一台运行Samba的Ubuntu 10.04.4 LTS服务器,并使用PBISjoin到我们的活动目录域(以前同样是开放的)。Samba被configuration为使用AD用户/组进行authentication,并且这是正常工作的。 此外,标准的Linux权限(用户,组,其他)与世界正确的Samba。 但是,Samba似乎完全忽略了使用扩展ACL设置的任何权限。

我已经尝试了各种smb.confconfiguration,我已经在其他地方推荐过,并没有一个似乎有任何效果。

机器设置:

  • 文件共享是在它自己的驱动器上。 来自/ etc / fstab的驱动器的挂载信息是:
    • UUID = 372aa637-4b7b-45cc-8340-9d028893c196 / media / news-drive ext4 user_xattr,acl 0 2
  • 机器使用PBISjoin域(以前也是开放的)
  • Sambaconfiguration的份额是:
 [共享]
   评论=, 
    nt acl support = yes
   pipe理员用户= 
   强制用户= 
   强迫组= \域^ ^用户
   创build蒙版= 0770
   目录掩码= 0770
  • 全球桑巴configuration
工作组= 
 DNS代理=否
服务器string= 
加载打印机=否
杯选项=原始
来宾帐户= pcguest
日志文件= /var/log/samba/%m.log
最大日志大小= 50
安全= ADS
 realm = 
套接字选项= TCP_NODELAY SO_RCVBUF = 8192 SO_SNDBUF = 8192
 interfaces = 172.16.0.20 10.4.1.20 127.0.0.1
只绑定接口=是
 idmap uid = 16777216-33554431
 idmap gid = 16777216-33554431
映射到guest = Bad User
  • 我也在全局configuration中使用了其中的一些,但没有成功
 idmap backend = idmap_rid:= 16777216-33554431
 nt acl support = yes
inheritanceacls =是
地图acl inherit =是
 map archive = no
地图hidden = no
地图只读=否
地图系统=否
存储dos属性=是
inheritance权限=是
模板shell = / bin / false
 winbind使用默认域= no

我在这里错过了什么,让Samba与扩展的ACL一起工作?

一个发生的例子

我有一个在桑巴共享文件夹。 共享本身在我们的域中是广泛开放的(“有效用户”设置被设置为AD域的“域用户”组)。在该共享中,我有一个在文件系统级拥有更多限制权限的文件夹由一个AD用户,将该组设置为一个AD组,其中只有几个人,并且权限chmod-ed为770)

问题是,我需要将该文件夹访问到另一个AD组,所以我运行“setfacl -mu :: rwx”来授予它们访问权限。 这在Linux内工作(如果我ssh中的哪一个用户,并导航到文件夹)…但如果我连接到SMB共享与同一用户,并尝试导航到该文件夹​​,访问被拒绝。

迟到这个问题,我仍然想指出官方的Samba文档来支持ACL 。 这对于Samba 4.0.0以上版本是有效的,在这个问题被问到的时候肯定是不可用的。 但是由于这个问题在search引擎中popup,这个链接可能会有所帮助。

基本步骤是:

1.确保文件系统支持acls(ext4默认情况下不需要额外的挂载选项)

2.确保Samba是通过ACL支持编译的。 (是的,在Ubuntu 14.04 LTS上是默认的):

smbd -b | grep HAVE_LIBACL 

3.通过在/etc/samba/smb.conf[global]部分中设置以下内容来启用ACL:

 vfs objects = acl_xattr map acl inherit = yes store dos attributes = yes 

有关详细信息,请访问上面链接的官方文档。

这是因为force userforce groupcreate maskdirectory mask强制使用传统的unix样式权限,这些权限不能与inheritanceACL相结合。 您的默认ACL必须驻留在不在samba共享上的文件夹的文件系统级别上,以便inheritance工作,但请注意,矛盾的权限总是会拒绝访问,例如。 当一个用户拥有用户的权限而不是组时,samba会禁止在使用ACL的时候访问(这在我看来就像一个bug),例如:用户nobodynogroup的成员,那么ACL需要允许nobody nogroup写权限,否则写访问是否认。 只有桑巴行为这样!

创build具有inheritance默认权限的文件夹的一种可能方式可能是:

 me@myHost:/shares$ getfacl myShare/ # file: myShare/ # owner: JohnDoe # group: domain\040users user::rwx group::rwx #effective:rx group:domain\040users:rwx #effective:rx group:domain\040admins:rwx #effective:rx mask::rwx other::rx default:user::rwx default:group::rwx default:group:domain\040users:rwx default:group:domain\040admins:rwx default:mask::rwx default:other::rx 

具有default:*default:*的部分是inheritance的有趣部分,因为任何新的文件或文件夹将在myShare文件夹内创build时获得这些部分 。 有关设置默认值:文件或文件夹上的值的详细信息,请参阅setfacls手册页。 现在,在默认情况下使用create maskdirectory mask的问题:ACL设置是samba会覆盖这些默认值,在大多数情况下,这些掩码语句只有在您需要整个文件夹时才有用,而且它的文件只包含单一的所有者和团体。 ACL很难configuration,但在Windows机器上通常提供更多的灵活性。 为了实现这些default:*:: 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 

这将允许共享,每个人都可以写入共享…但是( )并不意味着它在文件系统级别是允许的,因为myShare文件夹只允许域用户 。 无论如何,对于偏执狂来说,通过只允许特定的群体可以缩小共享权限:

  write list = @"domain users" 

这涉及到writeable=yes但仅限于在写入列表中定义的组。 确保共享和文件夹的权限没有矛盾,例如:

  write list = @"other group" 

将允许其他组写入共享,但由于myShare文件夹只允许域用户写它将明显失败。