13

On our box running OpenSUSE 12.2 we have installed OpenLDAP and sssd daemon. We are using these two services for user authentication. Recently we created a script which creates new web-users for our vhosts dynamically, but now we are dealing with a problem.

It seems that sssd uses some kind of cache and during getent passwd it returns users that have been deleted from LDAP. Sometimes it doesn't return recently created user immediately as it is necessary further in the script (for setting permissions with setfacl and chown).

Restarting LDAP, sssd or nscd doesn’t help, neither flushing cache with sss_cache -U. We tried lowering cache in config of sssd but it seems that it doesn’t affect anything.

We need to somehow explicitly refresh the cache after adding new user to LDAP or disable the cache at all.

Has anyone experienced similar issue?

6 Answers 6

8

Try sss_cache -E

or try stopping sssd, removing the files in /var/lib/sss/db/*, and restarting sssd

6

From the man page (sssd.conf):

NSS configuration options These options can be used to configure the Name Service Switch (NSS) service. enum_cache_timeout (integer) How many seconds should nss_sss cache enumerations (requests for info about all users) Default: 120 

I would insert something like:

[nss] enum_cache_timeout 10 

(adjust seconds as it seems fit)

4

I have expierenced similar issues

I noticed that getent passwd | grep <username> and getent passwd <username> will not return the same results,

Using strace I found that getent passwd <username> checks data in "/var/lib/sss/mc/passwd"

wheras getent passwd | grep <username> will connect to /var/lib/sss/pipes/nss and get it's data from there.

This is really confusing me, since both approaches seem to hit different caches. These caches seem to get updated when I run sudo su - <username> but seem to otherwise be valid for hours.

The result in practice is that e.g. ssh access won't work for a user a few minutes after it is removed from the ldap, but getent passwd will keep on showing it for hours, so it's hard for me to check if this users is in fact removed or not (without clearing some caches manually all the time)

Disabling caches is not an option in this case, having 2000+ users running jobs on 2000+ servers.

1
  • thanks for your tips, it's very helpful to me to fix the remove linux account cached by sssd Commented Aug 2, 2024 at 2:53
3

You could try to disable caching credentials by adding directive to /etc/sssd/sssd.conf:

[domain/default] cache_credentials = False 

You may then verify that sssd uses cache on credentials with console command:

# authconfig --test|grep credential credential caching in SSSD is disabled 
2
  • 2
    authconfig is redhat command, the problem is about OpenSUSE 12.2 Commented Nov 29, 2013 at 15:29
  • 1
    cache_credentials is about credentials; question is about caching of users lookup. Commented Nov 18, 2015 at 12:06
2
  • You can't disable caching completely with sssd.

  • You can disable sss as an authentication provider completely and just query LDAP directly if that's what you want.

For example, in /etc/nsswitch.conf, change lines like:

passwd: files sss 

to

passwd: files ldap 
  • You can force cleaning of the cache by removing /var/lib/sss/db/*
2
  • This is wrong. There's a configuration directive that controls caching. Commented May 14, 2013 at 7:14
  • 2
    Are you referring to cache_credentials? Does that disable all caching or just credentials, as the name would imply? Commented May 20, 2013 at 17:20
0

Notice that having cache_credentials = True in Fedora 30/31 gives an error that makes impossible to login using LDAP users. I haven't found a documented bug related to this so I write it here.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.