如何从 SMB3 Linux 服务器挂载 cifs 共享?

如何从 SMB3 Linux 服务器挂载 cifs 共享?

出于安全原因,我的服务器仅启用了 SMB3 协议。

server min protocol = SMB3
client max protocol = SMB3

客户端也有相同的设置。 smbclient工作正常,问题是:无法用mount.cifs挂载。给我错误-95

我尝试过使用kerberos

mount -t cifs -o vers=3.0,username=myuser,rw,soft,sec=krb5i  //myserver/Myshare /mnt

并通过通行证

mount -t cifs -o vers=3.0,username=myuser,password=mypass,rw,soft  //myserver/Myshare /mnt

但在这两种情况下都给我同样的错误-95

 CIFS VFS: Dialect not supported by server. Consider specifying vers=1.0 or vers=2.0 on mount for accessing older servers
CIFS VFS: cifs_mount failed w/return code = -95

答案1

至少针对 kerberos 和版本 3.1.1 找到了解决方案

假设我的用户名为“pino”,首先我们必须在 AD 服务器(Windows、Samba4 等)上为假用户“cifs1”创建密钥表。

ssh samba4.ad.server
samba-tool user delete cifs1
samba-tool user create cifs1 --random-password
samba-tool spn add cifs/yourclient.fqdn cifs1
samba-tool domain exportkeytab cifs1.keytab --principal=cifs/yourclient.fqdn

然后我们编辑文件 /etc/request.key.conf 并添加这两行

create  cifs.spnego    *        *               /usr/sbin/cifs.upcall %k
create  dns_resolver   *        *               /usr/sbin/cifs.upcall %k

然后我们将密钥表从广告服务器安全地复制到我们的客户端,并与客户端上的密钥表 krb5.keytab 合并

(echo rkt cifs1.keytab ; echo wkt /etc/krb5.keytab )|ktutil

用户“pino”已通过身份验证,但出于安全原因,我们重做 kinit

echo passofpino|kinit

现在终于可以用 version=3.1.1 挂载我们的共享了,最重要的部分是“cruid”,否则会失败

sudo mount.cifs -vvv //client.fqdn/Publicshare -o sec=krb5,user=pino,cruid=pino,vers=3.1.1 /mnt

返回

mount.cifs kernel mount options: ip=192.168.0.2,unc=\\client.fqdn\Publicshare,sec=krb5,vers=3.1.1,cruid=10003,user=pino,pass=********

如果我尝试使用普通密码而不是 krb5 返回错误,但使用 kerberos 更安全,所以不是问题。如果你想在共享中写入,则该行是

sudo mount.cifs -vvv //client.fqdn/Publicshare -o sec=krb5,user=pino,cruid=pino,vers=3.1.1,forceuid,forcegid,uid=$(id -u pino),gid=$(id -g pino) /mnt

相关内容