如何使用" getgroups"获取用户的所有组

时间:2018-02-18 05:34:02

标签: linux group-membership

我在root中运行此程序,并使用命令id mike获得以下结果:

uid=1001(mike) gid=1002(mike) groups=1002(mike),1005(mynewgroup)

我使用以下代码获取群组:

setgid(1002)
setuid(1001)

if ((count = getgroups(NGROUPS_MAX, groupIDs)) == -1)
    perror("getgroups error");
else
    for (i = 0; i < count; i++)
        printf("Group ID %d = %d\n", i + 1, (int) groupIDs[i]);

我需要的结果是列出组1002和1005.它只是给我

Group ID 1 = 1002

如何使用getgroups

获取用户的所有群组

1 个答案:

答案 0 :(得分:0)

目前还不清楚你在这做什么。你的进程是root,那么你setgid + setuid并期望getgroups给你一个类似于id提供的列表?

首先,getgroups处理当前进程的凭据,不得与/ etc / group或其他地方配置的凭据混淆。例如。当有问题的用户登录任何交易时,必须手动明确地设置所有组,这是你没有做的事情。特别是该程序执行setuid和setgid,但也做其他事情以正确设置凭据。

因此,您需要运行一个func,它提供为给定用户配置的组。你已经知道一个完成工作的工具 - 它是id。由于这是开源,您可以查看它的作用。

在这种特殊情况下,您要查找的关键字是getgrouplist。请注意,setuid / setgid有0用于查找组列表的内容。