web-dev-qa-db-ja.com

Kerberosサービスチケットはmount.cifsまたはカーネルによってキャッシュされますか?

Krbr5iを使用してCIFS共有をマウントし、その後kdestroyを使用してKerberosチケットを破棄する場合でも、同じサーバーに他の共有をマウントすることは可能です。これはどのように可能ですか? mount.cifsはサービスチケットを共有サーバーに再度送信する必要はありませんか?チケットはどこかにキャッシュされていますか?これはカーネル(またはcifs.upcall)によって処理されますか?

すべての共有をアンマウントした後、mount.cifsは失敗します(予想どおり)。

再現する手順:

$ # Aquire tgt:
$ kinit
Password for [email protected]:
$ # 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

予想通り失敗します。

1
sahisb

CIFS/SMB共有をマウントすると、セッションが作成されます(サービスへの資格情報(この場合はKerberosサービスチケット)が正しい場合)。セッションが作成された後は、自分自身を認証する必要はありません。

Share1とshare2は同じサービス(dc.domain.example.com)によって提供されるため、これらのファイルへのすべての要求は同じセッションを使用しています。

1
sahisb