Samba 扩展了 ACL 来限制用户,即使他们属于共享的授权 AD 组?

Samba 扩展了 ACL 来限制用户,即使他们属于共享的授权 AD 组?

让 Samba 扩展 ACL(https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs#Samba_Extended_ACL_Support) 通过为 CentOS 7 文件服务器设置的 SMB+WinBind 在 Windows 10 桌面(具体来说,是 Citrix VDI 桌面)上挂载共享。然而,当尝试访问一些共享(但不是全部),我发现我的用户访问被拒绝(对于文件夹和文件,出现“句柄无效”或“Windows 无法访问”等错误),尽管我的测试用户是共享的 AD 组的一部分安全属性(根据文档,https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs#Setting_Share_Permissions_and_ACLs)。

当登录到 smb linux 服务器本身时,我可以看到命令的输出groups显示测试用户确实属于所有必需的 AD 组(但即使在服务器本身上,我无法访问一些我表面上具有 AD 权限的文件夹(例如,导航到较低级别的文件夹或head -n 10 <filename>在文件上运行))。

例如,我将文件夹设置为 SMB 共享,如...

/datastore    <----share
    /data
        /dataset1    <----share
            ...
            <data files and folders>
        /dataset2    <----share
            ...
            <data files and folders>
        /dataset3    <----share
            ...
            <data files and folders>

...并将/datastore和 所有/datastore/data/dataset...文件夹作为 smb 共享,并将我的测试用户添加到具有引用datastore、和 的共享的读取访问权限的组中dataset1dataset2该共享位于连接到 smb 服务器的计算机管理 UI 上(根据 Samba 扩展 ACL 文档)。(我发现,如果您想为较低层次的共享文件夹设置更细粒度的共享权限,则需要为用户提供父级文件夹的 NTFS/安全权限,因为他们需要能够访问整个路径(如果这是错误的并且可能导致问题,请告诉我))。

在 Windows 上安装datastore共享时,我发现我的测试用户可以打开 中的内容/datastore/data/dataset1,并且(如预期的那样)无法打开 中的内容/datastore/data/dataset3但也无法访问/datastore/data/dataset2。(我已仔细检查三次,确实被列为共享“安全”选项卡中列出的 AD 组的成员)。

有经验的人知道会发生什么吗?这篇文章还应该包含更多调试信息吗?

(注:我发布了一个类似的问题这里,但针对的是几乎完全相反的问题(尚未在那里发布答案,因为这是同一测试过程的一部分,因此所有这些挂断的确切诊断仍然不清楚))


以供参考...

(虽然我认为这里没有什么问题),我的/etc/samba/smb.conf文件看起来像......

[root@myserver ~]# cat /etc/samba/smb.conf
[global]

security = ads
#  password server = adcontrollerserver.myorg.local
#  dedicated keytab file = /etc/krb5.keytab
encrypt passwords = yes
log file = /var/log/samba/%m.log
log level = 3

winbind refresh tickets = yes
vfs objects = acl_xattr
map acl inherit = Yes
# the next line is only required on Samba versions less than 4.9.0
#  store dos attributes = Yes
winbind use default domain = yes
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
idmap config * : backend = tdb
idmap config * : range = 10000000-10999999
idmap config MYDOMAIN : backend = ad
idmap config MYDOMAIN : schema_mode = rfc2307
idmap config MYDOMAIN : range = 10000-20000
idmap config MYDOMAIN : unix_nss_info = yes
#  idmap config MYDOMAIN : unix_primary_group = no
username map = /usr/local/samba/etc/user.map
winbind enum users = yes
winbind enum groups = yes
# Template settings for login shell and home directory
template shell = /bin/bash
template homedir = /home/%U
kerberos method = system keytab
workgroup = MYDOMAIN
realm = MYDOMAIN.LOCAL
winbind offline logon = yes

# all the various share names, eg...
[datastore__data__dataset1]
   path = /datastore/data/dataset1
   read only = no
.
.
.

并且似乎满足所有 ACL 先决条件......

[root@myserver ~]# smbd -V
Version 4.9.1
[root@myserver ~]# smbd -b | grep HAVE_LIBACL
HAVE_LIBACL
[root@myserver ~]# cat /etc/samba/smb.conf | grep "vfs objects"
vfs objects = acl_xattr
[root@myserver ~]# cat /etc/samba/smb.conf | grep "map acl inherit"
map acl inherit = Yes

更新:

今天再次尝试安装,突然开始工作(可以根据共享的 NTFS/Secutiry 权限访问那些以前无法访问的文件夹和文件),我不知道为什么。我要指出的是,在之前的测试中,我无法断开共享,现在只是我第二次尝试(因此我怀疑断开连接并重新连接可能会有所帮助(再次,我不知道为什么,如果这让任何人有预感,请告诉我))。

更糟糕的是,当 Samba 拒绝我时,我无法追溯它如何处理对该特定文件夹的访问请求,因为该/var/log/samba/<myclientIP>.log文件仅包含今天的日志(我目前没有遇到该问题)。

将继续监控,但如果这让任何人对可能发生的事情有任何进一步的猜测,请告诉我。

答案1

并不完全是针对目前所写的这个确切的问题(更新部分中的“解决方案”仍然是我对此的最佳答案),但其他用户也遇到了类似的问题,答案是该用户的 AD 配置文件的 UNIX UID 属性设置为低于idmapsamba/etc/samba/smb.conf文件中范围的数字(如下所示:https://wiki.samba.org/index.php/Idmap_config_ad)。将用户的 AD 配置文件中的 UNIX UID 更改为该范围即可解决该问题。

相关内容