Cifs

如何從 SMB3 linux 伺服器掛載 cifs 共享?

  • January 14, 2021

出於安全原因,我的伺服器僅啟用了 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

至少為 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

然後我們將 keytab 從廣告伺服器安全複製到我們的客戶端並與客戶端上的 keytab 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

引用自:https://unix.stackexchange.com/questions/575468