![如何从 SMB3 Linux 服务器挂载 cifs 共享?](https://linux22.com/image/169985/%E5%A6%82%E4%BD%95%E4%BB%8E%20SMB3%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8C%82%E8%BD%BD%20cifs%20%E5%85%B1%E4%BA%AB%EF%BC%9F.png)
出于安全原因,我的服务器仅启用了 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