我们正在考虑在 Debian (5.0.3) 上为我们的 mac 客户端部署 SMB 家庭,而不是购买四个新的 Xserve。我们的测试服务器已构建并正常运行。Windows 客户端表现完美,但我们遇到了 OS X(10.6.x 和 10.5.x)的问题。由于采用这种方式时会出现一大堆其他问题,我们将采用这条路线而不是 Windows 文件服务器。
具体来说,在打开 unix 扩展并且远程服务器绑定到 AD 的情况下挂载 SMB 共享时,finder 无法将文件保存在共享上,而是触摸文件然后以 -36 IO 错误轰炸,文件夹创建很好。在终端中复制文件表现良好,问题似乎仅限于查找器。
问题出现了(我认为),因为在使用 unix 扩展时会传递远程 UID/GID。OS X 使用自己的 winbind idmap (odsam) 从 AD 用户和组中计算出有效的 UID/GID,而我们在服务器上使用了一个rid map。因此,发现者选择履行的所有权不匹配。
OS X 似乎如何处理这个问题是在文件权限级别使用远程 uid 和 gid(见下文),然后设置一个 OS X acl 授予本地 uid/gid 以对文件具有适当的权限。我认为查找器会触摸文件(由于 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
- 在授予 OS X GID/UID 权限的 linux 文件系统上添加 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
您可能需要查看命名流设置。苹果有一篇文章。“Mac OS X v10.5、v10.6:关于安装在 SMB 的 NAS、Mac OS X 和 Windows 服务器上的命名流;可能会出现“-36”或“-50”警报”
Apple 的另一篇文章TS1564引用了 10.3/10.4 中的较早问题,并在 SMB 共享中产生错误 -36。
显然它与明文与加密身份验证有关……还有什么要考虑的吗?
干杯,M。
该问题可能是由于 Finder 在将资源分叉作为扩展属性处理的方式中存在错误。
我会尝试:
EA支持=否
这可能会导致 ._ 文件,但在 Apple 足够关心他们的文件管理器可互操作之前,这是您必须处理的。
编辑:我刚刚注意到你确实尝试禁用它们。那是我遇到所有 Finder 问题的地方。经过一些简短的搜索后,似乎关闭 unix 扩展是唯一报告的修复。
你可以试试:unix extensions = no
澄清一下:您的解决方法是在客户端的 /etc/smb.conf 中设置 unix extensions = no,对吗?
因为我试过了,但我仍然收到 36 错误。
我自己也遇到了这个问题,并在http://osxdaily.com/2015/02/21/fix-error-code-36-finder-mac-os-x/上找到了一个更简单的解决方案。
在您的 Mac 上,打开终端并
dot_clean
针对下载文件的目标文件夹运行。例如,我将所有文件下载到
~/Downloads
文件夹中,因此我运行:dot_clean ~/Downloads
之后重新尝试下载成功。