Comment obtenir un nom de groupe quand j’ai le groupid

J’ai les parameters (en particulier l’ID utilisateur et le groupid) d’un fichier lu avec la commande stat et je travaille dans un réseau où les utilisateurs et les groupes sont spécifiés sur un serveur LDAP.

J’ai le nom d’utilisateur du résultat de la commande getent passwd userid .

Maintenant, mon idée était d’obtenir le nom de getent group groupid avec le getent group groupid , mais cela ne fonctionne pas.

Quelqu’un peut-il me dire où j’ai mon erreur ou comment je reçois le nom de groupe?

Merci!

En dehors de la possibilité que vous fournissiez un ID de groupe incorrect, cela pourrait être un bogue dans la configuration LDAP, qui se manifeste par une résolution de groupe inversée qui ne fonctionne pas. Ceci est renforcé par le fait que cela fonctionne sur une configuration “fichiers” simple.

Le getent (1) déclare:

 group When no key is provided, use setgrent(3), getgrent(3), and endgrent(3) to enumerate the group database. When one or more key arguments are provided, pass each numeric key to getgrgid(3) and each nonnumeric key to getgrnam(3) and display the result. 

Cela pourrait signifier que getgrgid (3) échoue sur votre configuration.

Pour tester cela, comstackz ce programme (getgrgid_test.c) avec “make getgrgid_test”:

 #include  #include  #include  int main(int argc, char **argv) { int gid; struct group *g; if (argc != 2) { fprintf(stderr, "Invalid number of positional arguments\n"); fprintf(stderr, "Usage getgrid_test GID\n"); return 1; } gid = atoi(argv[1]); g = getgrgid(gid); if (g == NULL) { fprintf(stderr, "gid %d not found\n", gid); return 1; } printf("%s\n", g->gr_name); return 0; } 

Ensuite, lancez-le avec votre gid comme ceci:

 getgrgid_test GID 

S’il ne génère pas de rapport de nom de groupe à vos administrateurs système.

Sinon, si cela fonctionne, mais que “getent group GID” ne fonctionne pas, c’est un bogue dans “getent”.

Vous avez probablement un problème de configuration ou vous n’avez pas de ligne comme:

 group: files ldap 

dans votre /etc/nsswitch.conf .

ou vos informations de groupe sur le serveur groupOfNames groupOfUniqueNames sous une forme qui n’a pas de numéros d’identification de groupe, par exemple de type groupOfNames , groupOfUniqueNames au lieu d’être de type posixGroup .

Seul posixGroup possède les atsortingbuts appropriés qui lui permettent d’être utilisé comme groupe valide dans linux / unix (c’est-à-dire le numéro d’identification de groupe nécessaire pour correspondre). Dans cette situation, le serveur LDAP ne renvoie pas de groupes valides.

Vous pouvez avoir une configuration LDAP parfaitement fonctionnelle sans qu’aucun ou tous les groupes distants ne soient présents dans la sortie du getent group .