我们正在考虑在 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
答案4
只是为了澄清:您的解决方法是在客户端的 /etc/smb.conf 中设置 unix extensions = no,对吗?
因为我尝试过了但仍然出现 36 错误。