Cache
Kerberos 服務票證是由 mount.cifs 還是核心記憶體的?
當使用 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) 提供,因此對這些文件的所有請求都使用同一個會話。