1

我在根目录下运行这个程序,我用命令得到以下结果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

4

1 回答 1

0

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

首先,getgroups 处理当前进程的凭据,不能与 /etc/group 或其他地方配置的凭据混淆。例如,当有问题的用户登录与它相关的任何事务时,必须手动显式设置所有组,这是您没有做的事情。特别是该程序执行 setuid 和 setgid,但还执行其他操作以正确设置凭据。

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

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

于 2018-02-18T07:58:25.333 回答