gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:31 26 4
gpt4 key购买 nike

我在 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 获取用户的所有组?

最佳答案

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

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

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

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

关于linux - 如何获取 "getgroups"用户的所有组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com