rpc.gssd picks wrong credential cache file in multi-realm setup

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

 



I have the following krb5.conf setup with two realms and an NFS4 server
at fileserver.ads.other.com@xxxxxxxxxxxxx:

[libdefaults]
        default_realm = ADS.DEFAULT.COM

[domain_realm]
        .ads.other.com = ADS.OTHER.COM


The two realms do not know of each other. Mounting the share works fine,
but the user is denied access if there are ticket caches for *both*
ADS.DEFAULT.COM and ADS.OTHER.COM:


handling gssd upcall (/run/rpc_pipefs/nfs/clnt19c)
handle_gssd_upcall: 'mech=krb5 uid=1000000 enctypes=18,17,16,23,3,1,2 '
handling krb5 upcall (/run/rpc_pipefs/nfs/clnt19c)
process_krb5_upcall: service is '<null>'
creating context using fsuid 1000000 (save_uid 0)
creating tcp client for server fileserver.ads.other.com
DEBUG: port already set to 2049
creating context with server nfs@xxxxxxxxxxxxxxxxxxxxxxxx
WARNING: Failed to create krb5 context for user with uid 1000000 for
server fileserver.ads.other.com
getting credentials for client with uid 1000000 for server
fileserver.ads.other.com
CC '/tmp/krb5cc_1000000' being considered, with preferred realm
'ADS.DEFAULT.COM'
CC 'FILE:/tmp/krb5cc_1000000'(user@xxxxxxxxxxxxx) passed all checks and
has mtime of 1425824566
CC '/tmp/krb5cc_1000000_vg0rFX' being considered, with preferred realm
'ADS.DEFAULT.COM'
CC 'FILE:/tmp/krb5cc_1000000_vg0rFX'(user@xxxxxxxxxxxxxxx) passed all
checks and has mtime of 1425822978
CC '��@:/tmp/krb5cc_1000000_vg0rFX' is our current best match with mtime
of 1425822978
using FILE:/tmp/krb5cc_1000000_vg0rFX as credentials cache for client
with uid 1000000 for server fileserver.ads.other.com
using environment variable to select krb5 ccache
FILE:/tmp/krb5cc_1000000_vg0rFX
creating context using fsuid 1000000 (save_uid 0)
creating tcp client for server fileserver.ads.other.com
DEBUG: port already set to 2049
creating context with server nfs@xxxxxxxxxxxxxxxxxxxxxxxx
WARNING: Failed to create krb5 context for user with uid 1000000 for
server fileserver.ads.other.com
getting credentials for client with uid 1000000 for server
fileserver.ads.other.com
WARNING: Failed to create krb5 context for user with uid 1000000 for
server fileserver.ads.other.com
doing error downcall


The problem is caused by gssd_setup_krb5_user_gss_ccache(uid,
servername, dirpattern) calling gssd_find_existing_krb5_ccache(uid,
dirname, &cctype, &d) which picks the wrong cache as it does not take
into account servername and will always pick the cache for preferred_realm.

My understanding of the code is limited, but it looks like caches for
the realm configured in [domain_realm] section of krb5.conf should take
precedence over preferred_realm. Other parts of the code like
find_keytab_entry() seem to be multi-realm-aware and use
krb5_get_host_realm() to locate a ticket.

As a workaround, running rpc.gssd -R ADS.OTHER.COM forces gssd to pick
the right cache, but that breaks access to ADS.DEFAULT.COM.

Note: this bug is also tracked as #94541 on Bugzilla.

Robert

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux