通过 SMB+WinBind 为 CentOS 7 文件服务器设置Samba 扩展 ACL ( https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs#Samba_Extended_ACL_Support ) 以在 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 共享和我的测试用户添加到组中,该组具有对引用、、和连接到 smb 服务器的计算机管理 UI 的共享的读取访问权限datastore
(dataset1
根据dataset2
Samba 扩展 ACL 文档)。(我发现如果您想为较低层次结构的共享文件夹设置更细粒度的共享权限,您需要为父级文件夹授予用户 NTFS/安全权限,因为他们需要能够一直访问路径(LMK 如果这是错误的,可能会导致问题))。
在 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/安全权限访问那些以前无法访问的文件夹和文件),IDK为什么。我会注意到,在之前的测试中,我无法断开共享,现在只是我第二次尝试(因此我怀疑再次断开连接并重新连接可能有所帮助(agian,IDK 为什么如果这让任何人有预感 LMK ))。
更糟糕的是,我无法追溯查看 samba 在拒绝我时如何处理对该特定文件夹的访问请求,因为该/var/log/samba/<myclientIP>.log
文件仅包含从今天开始的日志(我目前没有遇到问题)。
将继续监控,但如果这让任何人对可能发生的事情有任何进一步的预感,请执行 LMK。