Concering issues others are having with Samba 3.5.10+ and group membership behavior when joined to AD as member servers

Sebastian Jürges sebastian at juerges.net
Thu May 3 07:06:36 MDT 2012


Goldberg, Neil R. <ngoldber <at> mitre.org> writes:

> 
> All:
> 
> Recently we've noticed (and Bart Janssens has written to the list most 
recently about this, " Re: [Samba]
> Samba 3.6.4 on Solaris - groups for user	Inconsistent") that there are 
inconsistencies in group
> membership for users based on context.
> 
> This was made evident since the patch that was accepted back in late 2011 
that removed the Update Sequence
> Number as the main discriminator for expiring Winbind cache entries. Now 
after 5 minutes (the default)
> the Winbind cache expires and these problems are immediately obvious.
> 
> What we were able to determine was that if a user logs into a system by way 
of PAM using the winbind module, or
> through a network logon via smbd, then the group list returned after the 
Winbind cache expires would be
> missing Domain Local groups (Aliases).
> 
> But if one were to query the membership of a user who has not logged into 
the system at all, then the group list
> returned would always contain all the groups, both Global/Universal and 
Domain Local.
> 
> But as soon as that user were to log into the system, after the Winbind 
cache expires the groups become
> truncated for that user.
> 
> We found that it was because pam_winbind and the auth subsystem of smbd 
populates the
> netsamlogon_cache.tdb with information from netr_saminfo3.
> 
> But this information is only queried by Winbind in answer to either 
query_user or lookup_groups.
> In particular, the winbind MSRPC and ADS backends specifically check the 
netsamlogon_cache when the
> winbind cache fails. And as of this time, netsamlogon_cache entries NEVER 
EXPIRE. Which means that group
> membership on the domain can change, and a user can logout of a system, and 
subsequent queries for group
> membership will always return stale, incomplete information.
> 
> And in particular, the interpretation of the "extra SIDs" from the structure 
is different when parsed from
> query_user as opposed to lookup_groups, which is why the group list appears 
truncated.
> 
> For some reason, some time ago a change was made that added an extra Boolean 
parameter to
> "sid_array_from_info3" to determine if groups of type SE_GROUP_RESOURCE 
(i.e. Domain Local groups)
> should be added to the SID array returned. And this parameter is only used 
in lookup_groups, which is
> ultimately how winbindd responds to NSS winbind requests for initgroups_dyn 
(i.e. getgroups).
> 
> There was a claim about SID filtering, which doesn't make sense because 
that's something implemented on
> Domain Controllers to deal with domains they don't fully trust but have 
trust relationships with, and it
> isn't even recommended because it breaks transitive trust.
> 
> In any case domain controllers running at 2003 functional level always 
return Domain Local groups as Extra
> SIDs instead of RIDs in the NETINFO3 response to RPC calls on SAMR pipe. So 
filtering by that type just
> removes those groups entirely, but only in that context.
> Theoretically (according to a comment) it adds them back in by looping back 
to MSRPC and querying for
> aliases on the domain, but there is a bug in this logic, as it only checks 
the machine account and BUILTIN
> account domains and omits the joined domain entirely. We believe that 
winbind caching had been masking
> this problem until recently.
> 
> So we made a patch that does several things.
> 1) Re-add the timeout for the netsamlogon_cache, deleting entries that are 
stale upon fetch (currently
> piggy-backing on the winbind timeout parameter). Apparently there was once 
an issue retrieving group
> lists as complete as the SAMR RPC calls could provide motivating the non-
expiration, but in testing we
> believe those issues have since been addressed.
> 2) Remove the resource group (domain local) group filtering from the 
sid_array_from_info3 function, as
> it was ill-advised and of questionable use.
> 3) Remove the reliance on the ADS path of winbind on netsamlogon_cache and 
have it always query LDAP if the
> winbind cache is expired.
> 
> It fixed our problem. Now our group lists are always the same, whether they 
hit the Winbind cache or not.
> 
> We did not address the potential bug (not correctly querying the domain for 
aliases) in the lookup_aliases
> portion of the MSRPC path in Winbind, because we do not understand it well 
enough.
> 
> We have a patch for samba-3.5.10 (which is of interest only to users of RHEL 
5.x) which we can provide, or we
> can apply them to any current clean release.
> 
> We welcome any feedback about our approach, assumptions, and conclusions.
> Regards,
> Neil Goldberg
> MITRE Corporation
> 
> 

I'm running into this exact problem. After the cache expires, domain local 
groups for the user are no longer correct after user login using pam_winbind.

before cache expiry:
wbinfo -r <username> | wc -l
97

after cache expiry: 
wbinfo -r <username> | wc -l
18

winbindd -V 
Version 3.6.3-0.24.4-2794-SUSE-CODE11-x86_64
(SLES 11.2)

@ngoldber:
Could you possible provide me with the patchset, so I can file a bug against 
SLES and get them to fix in their repositories ?

Regards,
Sebastian M Juerges





More information about the samba-technical mailing list