Ao montar um compartilhamento CIFS usando o krbr5i e destruindo meus tickets do Kerberos com kdestroy
, ainda é possível montar outros compartilhamentos no mesmo servidor. Como isso é possível? O mount.cifs precisa enviar o ticket de serviço para o servidor de compartilhamento novamente? O bilhete está em algum lugar? Isso é tratado pelo kernel (ou cifs.upcall)?
Após desmontar todos os compartilhamentos, o mount.cifs falhará (como esperado).
Etapas para reproduzir:
$ # 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=********
Neste ponto, a lista de k ainda não consegue encontrar um cache de credenciais.
Agora vamos tentar desmontar os compartilhamentos e montá-los novamente:
$ 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
Que falha como esperado.