首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setuid或setgid失败

setuid或setgid失败
EN

Stack Overflow用户
提问于 2014-09-19 10:10:53
回答 2查看 903关注 0票数 0

我写了这个函数:

代码语言:javascript
复制
void setugid(uid_t uid, gid_t gid) {
    uid_t euid = geteuid();
    gid_t egid = getegid();

    if (setgid(gid) < 0 || setuid(uid) < 0)
        assert(0);
}

断言被执行了。在核心转储中,我发现了以下变量的值:

代码语言:javascript
复制
uid = 8

gid = 12

euid = 0

egid = 0

8和12是正确的ids。当setuid后面跟着setgid时,我已经看到了这样的问题。但不是在我的案子里。问题是什么?

我发现了这个问题。具有id 8的用户已达到其执行进程的极限。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-19 11:29:02

您应该真正修改您的程序,以显示系统调用返回的错误。

如果您的进程的EUID实际上为0,则该程序只有在没有更改UID或GID (CAP_SETUOD和CAP_SETGID功能)的权限,或者您要更改的UID已达到其进程限制,因此不能再有一个进程时,才能失败。

我建议更改函数,在调用setuid()setgid()之前打印进程的euid,如果其中任何调用失败,则打印errno

票数 2
EN

Stack Overflow用户

发布于 2014-09-19 14:48:48

我发现了这个问题。具有id 8的用户已达到其执行进程的极限。

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

https://stackoverflow.com/questions/25931470

复制
相关文章

相似问题

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