Le problème
Lors de l'exécution de la commande "id" sur les utilisateurs LDAP, elle n'affiche que le gid de certains groupes secondaires et le nom du groupe n'est pas imprimé :
# id user1 uid=48254(user1) gid=100(users) groups=100(users),5002(group1),5001(group2),41257(group3),856(group4),56971
Et, l'erreur ci-dessous a été enregistrée dans /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 solution
Le nouveau groupe a été ajouté avec le même GID que celui du groupe existant.
# 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)
Le même ID est mappé à 2 groupes, group5 et group6. Ainsi, lorsque nous identifions une fois, nous obtenons un résultat correct pour l'utilisateur (tous les groupes d'utilisateurs sont affichés). Ensuite, nous exécutons getent group pour l'autre groupe :
# getent group group5
Mais après cela, il semble que le groupe soit supprimé des résultats de l'identifiant.
SSSD a une restriction stricte dans la SysDB selon laquelle un seul groupe peut exister avec un ID particulier. Lorsqu'un groupe est renommé sur le serveur, cela devient un problème d'ordre des opérations, que nous le traitions correctement ou non. Nous ne prenons pas en charge plusieurs entrées avec le même GID et cela entraînerait un comportement inattendu.
L'erreur ci-dessous a donc été enregistrée dans /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 !?!
Ainsi, une fois que vous avez corrigé l'entrée dans le serveur LDAP, le sssd devrait pouvoir la récupérer correctement. Si ce n'est pas le cas, attendez 300 secondes car le temps par défaut pour que ce cache se vide est de 300 secondes (c'est-à-dire cinq minutes). Vous pouvez également utiliser la commande ci-dessous pour vider le cache sssd avec les options appropriées selon l'exigence :
Le -E flag peut être utilisé pour invalider toutes les entrées mises en cache. L'exception est les règles sudo.
# sss_cache -E
Vous pouvez également invalider un utilisateur spécifique uniquement à partir du cache avec le -u drapeau, suivi du nom d'utilisateur.
# sss_cache -u user1
Vous pouvez également supprimer le fichier sss_cache du répertoire /var/lib/sss/db/.
# service sssd stop # rm -rf /var/lib/sss/db/* # service sssd start