gpt4 book ai didi

c - setuid 或 setgid 失败

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:40 24 4
gpt4 key购买 nike

我写了这个函数:

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);
}

断言已执行。在核心转储中,我发现了这个变量值:

uid = 8

gid = 12

euid = 0

egid = 0

8 和 12 是正确的 ID。当 setuid 后跟 setgid 时,我看到过这样的问题。但不是我的情况。可能是什么问题?

我发现了问题。 id 为 8 的用户已达到其执行进程的限制。

最佳答案

你真的应该修改你的程序来显示系统调用返回的错误。

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

我建议在调用 setuid()setgid() 之前更改您的函数以打印进程的 euid,并打印 errno如果这些调用中的任何一个失败。

关于c - setuid 或 setgid 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25931470/

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