Cache

Kerberos 服務票證是由 mount.cifs 還是核心記憶體的?

  • June 6, 2018

當使用 krbr5i 安裝 CIFS 共享並銷毀我的 Kerberos 票證時kdestroy,它仍然可以在同一伺服器上安裝其他共享。這怎麼可能?mount.cifs 是不是要再次發送服務票證到共享伺服器?票是否記憶體在某個地方?這是由核心(或 cifs.upcall)處理的嗎?

解除安裝所有共享後,mount.cifs 將失敗(如預期的那樣)。

重現步驟:

$ # Aquire tgt:
$ kinit
Password for sahisb@DOMAIN.EXAMPLE.COM:
$ # Mount share1 and get cifs ticket:
$ sudo mount.cifs -v -o sec=krb5i,cache=strict,rw,user=sahisb,cruid=$UID,cifsacl,nounix,multiuser,vers=2.1 //dc.domain.example.com/share1 /share1
mount.cifs kernel mount options: ip=[redacted],unc=\\dc.domain.example.com\share1,sec=krb5i,cache=strict,cifsacl,nounix,multiuser,vers=2.1,cruid=1297401199,user=sahisb,pass=********
$ # Destroy tgt and cifs ticket:
$ kdestroy
$ # Mount share2. I expected this to fail but it will succeed:
$ sudo mount.cifs -v -o sec=krb5i,cache=strict,rw,user=sahisb,cruid=$UID,cifsacl,nounix,multiuser,vers=2.1 //dc.domain.example.com/share2 /share2
mount.cifs kernel mount options: ip=[redacted],unc=\\dc.domain.example.com\share2,sec=krb5i,cache=strict,cifsacl,nounix,multiuser,vers=2.1,cruid=1297401199,user=sahisb,pass=********

此時 klist 仍然找不到憑據記憶體。現在讓我們嘗試解除安裝共享並再次安裝它們:

$ umount /share1
$ umount /share2
$ sudo mount.cifs -v -o sec=krb5i,cache=strict,rw,user=sahisb,cruid=$UID,cifsacl,nounix,multiuser,vers=2.1 //dc.domain.example.com/share2 /share2
mount.cifs kernel mount options: ip=[redacted],unc=\\dc.domain.example.com\share2,sec=krb5i,cache=strict,cifsacl,nounix,multiuser,vers=2.1,cruid=1297401199,user=sahisb,pass=********
mount error(126): Required key not available

正如預期的那樣失敗。

安裝 CIFS/SMB 共享時,會創建一個會話(如果憑據 - 在本例中為 kerberos 服務票證 - 到該服務的憑據是正確的)。創建會話後,我們不再需要對自己進行身份驗證。

由於 share1 和 share2 由同一個服務 (dc.domain.example.com) 提供,因此對這些文件的所有請求都使用同一個會話。

引用自:https://serverfault.com/questions/915134