我的 ZFS SMB 共享在哪里?

Ste*_*e F 5 solaris zfs opensolaris server-message-block omnios

我们运行这对提供文件存储的 OpenSolaris 服务器。它们主动/被动运行,并通过每分钟左右的快照复制保持同步。最初,他们都运行 OpenIndiana,但由于 OI 的开发似乎停滞不前,我们决定切换到开发更积极的 OmniOS。

我们首先升级了备份服务器。一切都按计划进行,除了我看不到通过 SMB 从系统共享的 zfs 文件系统。

文件系统上启用 SMB 共享:

NAME        PROPERTY  VALUE                             SOURCE
zpool/data  sharesmb  abe=true,name=data,guestok=false  local
Run Code Online (Sandbox Code Playgroud)

smb/server 服务上线,以及其依赖:

fmri         svc:/network/smb/server:default
name         smbd daemon
enabled      true
state        online
next_state   none
state_time   Mon Mar  7 14:31:29 2016
logfile      /var/svc/log/network-smb-server:default.log
restarter    svc:/system/svc/restarter:default
contract_id  16253
dependency   require_any/error svc:/milestone/network (online)
dependency   require_all/error svc:/system/filesystem/local (online)
dependency   require_all/none svc:/system/idmap:default (online)
dependency   require_all/none svc:/network/smb/client:default (online)
Run Code Online (Sandbox Code Playgroud)

Sharemgr 知道共享

default nfs=()
smb smb=()
        * /var/smb/cvol
                  c$=/var/smb/cvol       smb=(abe="false" guestok="false")      "Default Share"
zfs smb=() nfs=()
    zfs/zpool/data smb=()
          /zpool/data    smb=(abe="true")
                  data=/zpool/data       smb=(guestok="false")
Run Code Online (Sandbox Code Playgroud)

在 sharemgr 中启用 SMB:

default enabled nfs
smb     enabled smb
zfs     enabled smb nfs
Run Code Online (Sandbox Code Playgroud)

但是,当我从 Windows 计算机浏览到服务器时,或者使用smbutil view.

与主服务器相比,备份服务器的 smbutil 输出为:

备份:

Share        Type       Comment
-------------------------------
c$           disk       Default Share
IPC$         IPC        Remote IPC
vss$         disk       VSS
Run Code Online (Sandbox Code Playgroud)

基本的:

Share        Type       Comment
-------------------------------
c$           disk       Default Share
data         disk
IPC$         IPC        Remote IPC
vss$         disk       VSS
Run Code Online (Sandbox Code Playgroud)

文件夹上的 ACL 正确:

d---------+821 Administrators@BUILTIN 2147483650     823 Mar  4 14:52 data
    group:Domain Users@DOMAIN:r-x---a-R-c--s:-------:allow
Run Code Online (Sandbox Code Playgroud)

共享上的 ACL 正确:

-rwxrwxrwx+  1 root     root           0 Nov 30 08:57 /zpool/data/.zfs/shares/data
              everyone@:rwxpdDaARWcCos:-------:allow
Run Code Online (Sandbox Code Playgroud)

我在同一个 zpool 中创建了另一个 ZFS 文件系统,与 SMB 共享,并成功访问它。这个文件系统似乎有问题。

这些文件系统使用 ZFS 版本 5。

编辑: smbutil view不是smbutil show

编辑:我不确定这是否相关,但我也遇到了 kerberos 问题。当我加入域时,/etc/krb5/krb5.keytab 处的 keytab 文件并未生成,kinit 仍然有效,但 idmap 似乎对此不满意:

tail /var/svc/log/system-idmap:default.log:

dc2.my.domain: additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Key table file '/etc/krb5/krb5.keytab' not found)
LDAP: dc1.my.domain:389: Local error
dc1.my.domain: Local error
dc1.my.domain: additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Key table file '/etc/krb5/krb5.keytab' not found)
LDAP: dc2.my.domain:389: Local error
dc2.my.domain: Local error
dc2.my.domain: additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Key table file '/etc/krb5/krb5.keytab' not found)
LDAP: dc1.my.domain:389: Local error
dc1.my.domain: Local error
dc1.my.domain: additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Key table file '/etc/krb5/krb5.keytab' not found)
Run Code Online (Sandbox Code Playgroud)

我的 krb5.conf:

[libdefaults]
        default_realm = MY.DOMAIN

[realms]
        MY.DOMAIN = {
                kdc = <dc1 IP>
                kdc = <dc2 IP>
                admin_server = <dc1 IP>
                kpasswd_server = <dc1 IP>
                kpasswd_protocol = SET_CHANGE
        }
[domain_realm]
        .my.domain = MY.DOMAIN
        my.domain = MY.DOMAIN
[logging]
        default = FILE:/var/krb5/kdc.log
        kdc = FILE:/var/krb5/kdc.log
        kdc_rotate = {
                period = 1d
                versions = 10
        }
[appdefaults]
        kinit = {
                renewable = true
                forwardable= true
        }
Run Code Online (Sandbox Code Playgroud)

我的/etc/resolv.conf:

search my.domain
domain my.domain
nameserver <dc1 IP>
Run Code Online (Sandbox Code Playgroud)

运行smbadm list显示已加入域:

[*] [DOMAIN]
[*] [MY.DOMAIN]
        [+dc1.MY.DOMAIN] [<dc1 IP>]
[.] [ZFS2] [S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXXX]
[*] [DOMAIN] [S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXX]
Run Code Online (Sandbox Code Playgroud)

该机器的名称是 ZFS2。我还可以看到域控制器上的计算机帐户。

Ste*_*e F 3

这是文件权限的问题。允许域用户访问文件系统的 ACL 显然足以满足 OpenIndiana 的需要,但不适用于 OmniOS。修复的是chmod 555/zpool/data 目录。

至于 kerberos 错误,我按照http://solariscat.blogspot.dk/2015/01/solaris-11-samba-zfs-configuration-with.html上的说明手动生成 keytab 文件。