我们正在考虑在 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