OS X:在绑定到 AD 的 Samba 服务器上使用 SMB 共享时出现 Finder 错误 -36

OS X:在绑定到 AD 的 Samba 服务器上使用 SMB 共享时出现 Finder 错误 -36

我们正在考虑在 Debian (5.0.3) 上为我们的 Mac 客户端部署 SMB home,而不是购买四个新的 Xserves。我们已经构建了测试服务器并正常运行。Windows 客户端运行正常,但我们遇到了 OS X (10.6.x 和 10.5.x) 的问题。我们选择这种方式而不是 Windows 文件服务器,因为这样做会出现一大堆其他问题。

具体来说,当安装 SMB 共享并启用 unix 扩展并将远程服务器绑定到 AD 时,finder 无法将文件保存在共享上,而是接触文件然后因 -36 IO 错误而失败,文件夹创建正常。在终端中复制文件表现良好,问题似乎仅限于 finder。

我认为,问题出现是因为使用 unix 扩展时传递了远程 UID/GID。OS X 使用自己的 winbind idmap (odsam) 来计算来自 AD 用户和组的有效 UID/GID,而我们在服务器上使用 rid 映射。因此,发现者选择尊重所有权,但所有权不匹配。

OS X 处理这个问题的方式似乎是在文件权限级别使用远程 uid 和 gid(见下文),然后设置一个 OS X acl,授予本地 uid/gid 对文件的适当权限。我认为 finder 接触了文件(由于 ACL,内核允许这样做),然后检查文件系统权限并因 IO 错误而退出。

在客户端上

fc-003353-d:homes2 root# ls -led test/
drwx------+ 2 135978  100513  16384 Feb  3 15:14 test/
 0: user:jfrench allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit
 1: group:ARTS\domain users allow 
 2: group:everyone allow 
 3: group:owner allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit,only_inherit
 4: group:group allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit,only_inherit
 5: group:everyone allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit,only_inherit

我们尝试了以下方法,但都失败了:

  • 设置 Linux 端文件所有者以匹配 OS X GID/UID
  • 在 Linux 文件系统上添加授予 OS X GID/UID 权限的 ACL
  • 禁用扩展属性
  • 在客户端的 /etc/nsmb.conf 中设置 steams=no

我们目前正在运行一种解决方法,即关闭 unix 扩展,这会强制 mac 以具有 u=rwx 权限的本地用户身份挂载共享。这适用于大多数情况,但会导致一些需要某些权限的应用程序以微妙的方式中断。最坏的情况是我们将继续以这种方式运行,但我们希望启用 unix 扩展。

问候。


相关 SMB 配置如下:

[global]
        workgroup = ARTS
        realm = *snip*
        security = ADS
        password server = *snip*
        unix extensions = yes
        panic action = /usr/share/panic-action %d
        idmap backend = rid:ARTS=100000-10000000
        idmap uid = 100000-10000000
        idmap gid = 100000-10000000
        winbind enum users = Yes
        winbind enum groups = Yes
        veto files = /lost+found/aquota.*/
        hide files = /desktop.ini/$RECYCLE.BIN/.*/AppData/Library/
        ea support = yes
        store dos attributes = yes
        map system = no
        map archive = no
        map readonly = no

答案1

该问题很可能是由于 Finder 在将资源分支作为扩展属性处理时存在错误而引起的。

我会尝试:

ea 支持 = 否

这可能会导致 ._ 文件,但直到 Apple 足够关心让他们的文件管理器可互操作之前,这都是你必须处理的问题。

编辑:我刚刚注意到你确实尝试禁用它们。这就是我遇到所有 Finder 问题的地方。经过一些简短的搜索,似乎关闭 unix 扩展是唯一报告的修复方法。

答案2

您可能需要查看命名流的设置。苹果有一篇文章“Mac OS X v10.5、v10.6:关于 SMB 安装的 NAS、Mac OS X 和 Windows 服务器上的命名流;可能会出现“-36”或“-50”警报”

答案3

另一篇 Apple 文章TS1564引用 10.3/10.4 中早期的问题,该问题导致 SMB 共享产生错误 -36。

显然,它与明文与加密身份验证有关......还有其他需要考虑的吗?

干杯,M。

答案4

只是为了澄清:您的解决方法是在客户端的 /etc/smb.conf 中设置 unix extensions = no,对吗?

因为我尝试过了但仍然出现 36 错误。

相关内容