[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: TGT forwarding when cross-realm auth?





vadim wrote:
> Hi Douglas,
> 
> Thanx a lot again for your help. As it looks like I have to apply the
> modification to the client code, which you have mentioned. It will help
> me however a lot, if you will give a hint of where I'll have to start to
> dig ...

In the Heimdal code it looks like it would be in lib/krb5/get_for_creds.c
at around line 130. The krb5_build_principal is called.


    130      ret = krb5_build_principal(context,
    131                     &creds.server,
    132                     strlen(client_realm),
    133                     client_realm,
    134                     KRB5_TGS_NAME,
    135                     client_realm,
    136                     NULL);

In its simpilist form it would be something like this
to get a krbtgt/<server.realm>@<client.realm>  but see below.

    130      ret = krb5_build_principal(context,
    131                     &creds.server,
    132                     strlen(client_realm),
    133                     client_realm,
    134                     KRB5_TGS_NAME,
    135                     krb5_principal_get_realm(context,server),
    136                     NULL);

A better mod  would test the krb5.conf for something like:
[realms]
REALM = {
  ...
  limited_trust = 1
  }

Then in the krb5.conf file in the user's machine, list the realms
you don't trust sending a full tgt too.

*BUT* If there are more then 2 realms then this will not work, as what
you really want is to get the a tgt from one of the realms along
the path for the next realm on the path to the server.

If you had four realms in a path,  A, B, C, D where the user
is in A and the server is in D, these tickets would be used:

  krbtgt/A@A   (kinit or what is usually forwarded)
  krbtgt/B@A    first cross realm tgt, good at B issued by A.
  krbtgt/C@B    Second good at C issued by B
  krbtgt/D@C    Third good at D issued by C
  host/server@D isued by D.

Note that there is no krbtgt/D@A i.e. krbtgt/<server.realm>@<user.realm>
to forward. But krbtgt/B@A , krbtgt/C@B or krbtgt/D@C could be.









> 
> Thanx a lot in advance and best regards, vadim tarassov.
> 
> On Mon, 2005-06-06 at 10:30 -0500, Douglas E. Engert wrote:
> 
>>Thats not the way it works, as others have pointed out. Currently delegation
>>is an an all or nothing thing. The user's full TGT is delegated with no
>>restrictions.
>>
>>
>>This is one of the areas where Kerberos needs improvement as it becomes
>>more and more popular, some way to limit the damage of a stolen
>>delegate ticket is needed, as I pointed out in a presentation in the
>>last ietf-krb-wg that I co-chaired.
>>
>>
>>vadim wrote:
>>
>>
>>>Hallo everybody,
>>>
>>>First time in my life I managed to establish trust between two realms,
>>>realm A and realm B. Trust is one-way, where B trusts A. 
>>>
>>>Now when I do ssh from unix box from realm A to unix box in realm B, my
>>>TGT from realm A gets forwarded to box in realm B. My principal remains
>>>me@A.
>>>
>>>This is however not the functionality I am looking for. Instead of
>>>forwarding krbtgt/A@A, I would like to get krbtgt/B@B in my credential
>>>cache on unix box in realm B once ssh'ed in it from unix box in realm A.
>>>And I would my principal to become me@B instead of me@A.
>>>
>>
>>You don't have to go as far as to get krbtgt/B@B, but could forward a
>>krbtgt/B@A while still keeping the user as me@A.
>>
>>If you are willing you could make some modifications to the
>>client side that would forward the krbtgt/B@A ticket rather then what
>>it does now forwarding a krbtgt/A@A.  The krbtgt/B@A is good only for
>>services in realm B and any other realms that trust A via B.
>>
>>Even if you had trust setup both ways it would not be allow a
>>a krbtgt/A@B to be issued using the krtgt/B@A this as it would violate
>>the cross-realm trust assumptions because the user is still me@A.
>>Realm A expects the user@A to use the krbtgt/A@A for services in in A.
>>
>>
>>
>>
>>
>>>Reason one I am looking for such functionality is 
>>>
>>>1) we (realm A) do not trust realm B and do not want credentials from
>>>realm A to be saved on that filesystem.
>>>
>>>2) we however still want users to login from A to B without entering
>>>passwords.
>>>
>>>Could you please tell me how I could get such functionality?
>>>
>>>thanx a lot and best regards, vadim tarassov.
>>>
>>

-- 

  Douglas E. Engert  <DEEngert@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444