首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setgid():不允许操作

setgid():不允许操作
EN

Stack Overflow用户
提问于 2014-05-11 12:00:55
回答 1查看 1.8K关注 0票数 1

我的任务是为系统上的所有用户列出用户所属的所有组。其想法是通过/etc/passwd,为每个用户打印自己的组。

编辑这个做了一个窍门:

代码语言:javascript
复制
if( getgrouplist(passwd->pw_name, passwd->pw_gid,
                    groups, &ngroups) < 0)
  error_fatal ("getgrouplist ()");

但我还是很好奇它不起作用的原因。

输出:

代码语言:javascript
复制
User root is a member of: root
User daemon is a member of: root
setgid(): Operation not permitted

代码:

代码语言:javascript
复制
while ((passwd = getpwent ()) != NULL) {
    uid = passwd->pw_uid;
    gid = passwd->pw_gid;

    if (setgid(gid) < 0)
        error_fatal ("setgid()");

    if (setuid(uid) < 0)
        error_fatal ("setuid()");

    if((ngroups = getgroups (0, NULL)) < 0)
        error_fatal ("getgroups ()");

    if((groups = (gid_t *) malloc (sizeof (gid_t) * ngroups)) < 0)
        error_fatal ("malloc ()");

    if (getgroups (ngroups, groups) < 0)
        error_fatal ("getgroups ()");

    printf ("User %s is a member of: ", passwd->pw_name);
    for (i = 0; i < ngroups; i++) {
        gid = groups[i];
        if((group = getgrgid (gid)) == NULL)
            error_fatal ("getgrgid ()");
        printf ("%s ", group->gr_name);
    }
    putchar ('\n');
}

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-11 12:29:31

当您的程序调用setuid()以切换到root以外的其他用户时,您的程序已经放弃了切换用户的权限,因此随后的调用将失败。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23592338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档