Il problema
Durante l'esecuzione del comando "id" sugli utenti LDAP, viene visualizzato solo il gid per alcuni gruppi secondari e il nome del gruppo non viene stampato:
# id user1 uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4),56971
E l'errore seguente è stato registrato in /var/log/sssd/sssd_nss.log :
(Tue Mar 14 05:40:09 2020) [sssd[nss]] [nss_cmd_getgrgid_search] (0x0010): getgrgid call returned more than one result !?!
La soluzione
Il nuovo gruppo è stato aggiunto con lo stesso GID di quello esistente.
# id user1 uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4),56971(group6) # getent group group5 group5:*:56971: # id user1 uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4)
Lo stesso ID è mappato a 2 gruppi, gruppo5 e gruppo6. Quindi, quando facciamo id una volta otteniamo un risultato corretto per l'utente (vengono mostrati tutti i gruppi di utenti). Quindi eseguiamo getent group per l'altro gruppo:
# getent group group5
Ma dopodiché, sembra che il gruppo sia stato eliminato dai risultati dell'ID.
SSSD ha una restrizione rigida nel SysDB che può esistere un solo gruppo con un ID particolare. Quando un gruppo viene rinominato sul server, diventa un problema di ordine delle operazioni indipendentemente dal fatto che lo gestiamo correttamente o meno. Non supportiamo più voci con lo stesso GID e ciò comporterà un comportamento imprevisto.
Quindi l'errore seguente è stato registrato in /var/log/sssd/sssd_nss.log :
(Tue Mar 14 05:40:09 2020) [sssd[nss]] [nss_cmd_getgrgid_search] (0x0010): getgrgid call returned more than one result !?!
Pertanto, una volta corretta la voce nel server LDAP, sssd dovrebbe essere in grado di riprenderla correttamente. In caso contrario, attendere 300 secondi poiché il tempo predefinito per lo svuotamento della cache è di 300 secondi (ovvero cinque minuti). Inoltre puoi utilizzare il comando seguente per svuotare la cache sssd con opzioni adeguate secondo il requisito:
La -E flag può essere utilizzato per invalidare tutte le voci memorizzate nella cache. L'eccezione sono le regole sudo.
# sss_cache -E
Puoi anche invalidare un utente specifico solo dalla cache con -u flag, seguito dal nome utente.
# sss_cache -u user1
Inoltre, puoi eliminare il file sss_cache dalla directory /var/lib/sss/db/.
# service sssd stop # rm -rf /var/lib/sss/db/* # service sssd start