![Samba 扩展了 ACL 来限制用户,即使他们属于共享的授权 AD 组?](https://linux22.com/image/764253/Samba%20%E6%89%A9%E5%B1%95%E4%BA%86%20ACL%20%E6%9D%A5%E9%99%90%E5%88%B6%E7%94%A8%E6%88%B7%EF%BC%8C%E5%8D%B3%E4%BD%BF%E4%BB%96%E4%BB%AC%E5%B1%9E%E4%BA%8E%E5%85%B1%E4%BA%AB%E7%9A%84%E6%8E%88%E6%9D%83%20AD%20%E7%BB%84%EF%BC%9F.png)
让 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
、和 的共享的读取访问权限的组中dataset1
,dataset2
该共享位于连接到 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 属性设置为低于idmap
samba/etc/samba/smb.conf
文件中范围的数字(如下所示:https://wiki.samba.org/index.php/Idmap_config_ad)。将用户的 AD 配置文件中的 UNIX UID 更改为该范围即可解决该问题。