Obtaining a TGT without unrestricted access to password.

Simo Sorce simo at redhat.com
Thu Jun 16 08:15:51 EDT 2011


On Thu, 2011-06-16 at 02:04 +0100, David Woodhouse wrote:
> I'm trying to implement automatic renewal of Kerberos tickets during the
> lifetime of a user's session.
> 
> The user's password is learned at login time and stored within the
> gnome-keyring dæmon.
> 
> We also have krb5-auth-dialog running in the background, which will
> prompt the user for a password when the TGT needs to be renewed.
> 
> You'd think it would be simple to make the latter use the password
> that's been stored by the former...  I wish it were so.
> 
> The problem is that we don't want the keyring process to actually give
> *out* the password. It's happy to perform operations for us *using* the
> password, but not just to *give* it to us.
> 
> I have three ideas, and I'm not sure how viable any of them are. I'd
> very much appreciate some pointers...
> 
> 
> My first approach was to look at using plugins. For example, we'd have a
> preauth plugin to handle KRB5_PADATA_ENC_TIMESTAMP which would farm it
> off to gnome-keyring to perform the actual operation. But that seems to
> have failed at the first hurdle because in krb5_do_preauth() we
> unconditionally try the built-in handlers *first*, before trying the
> modules. And if those match the patype and fail, the module doesn't even
> get a look in.
> 
> 
> My second thought was that perhaps the keyring could be asked for the
> result of str2key on the password. That's not the actual *password*, at
> least. But I suspect that even that is still too sensitive to be handing
> it out?
> 
> 
> The third thought is that I could call krb5int_get_init_creds() with a
> get_as_key function that returns a "special" key, where the actual
> methods on it are just PKCS#11 calls to the keyring to do the job.
> It's complicated by the fact that the method pointers aren't in the
> krb5_keyblock but are actually looked up at invocation time with
> find_enctype(). But there may be a way to make this work, perhaps?
> 
> 
> Any better ideas, or suggestions for which option to pursue?

If you are on a Linux distribution I suggest you look into sssd, it
already does all you ask for.

Simo.

-- 
Simo Sorce * Red Hat, Inc * New York




More information about the krbdev mailing list