我在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
?
答案 0 :(得分:0)
目前还不清楚你在这做什么。你的进程是root,那么你setgid + setuid并期望getgroups给你一个类似于id提供的列表?
首先,getgroups处理当前进程的凭据,不得与/ etc / group或其他地方配置的凭据混淆。例如。当有问题的用户登录任何交易时,必须手动明确地设置所有组,这是你没有做的事情。特别是该程序执行setuid和setgid,但也做其他事情以正确设置凭据。
因此,您需要运行一个func,它提供为给定用户配置的组。你已经知道一个完成工作的工具 - 它是id。由于这是开源,您可以查看它的作用。
在这种特殊情况下,您要查找的关键字是getgrouplist。请注意,setuid / setgid有0用于查找组列表的内容。