C setuid或setgid失败
我编写了这个函数:C setuid或setgid失败,c,linux,C,Linux,我编写了这个函数: 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); } 8和12是正确的ID。当setuid后面跟着setgid时,我就看到了这样的问题。但我的情况并非如此。有什么问题吗 我发现了问题所在。id为8的用户
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);
}
8和12是正确的ID。当setuid
后面跟着setgid
时,我就看到了这样的问题。但我的情况并非如此。有什么问题吗
我发现了问题所在。id为8的用户已达到其执行进程的限制。您确实应该修改程序以显示系统调用返回的错误 如果进程的EUID实际上为0,则该程序只有在没有更改UID或GID(CAP_SETUOD和CAP_SETGID功能)的权限,或者您要更改的UID已达到其进程限制,因此无法再拥有一个进程时,才能失败
我建议在调用
setuid()
或setgid()
之前,将函数更改为打印进程的euid,如果任何调用失败,则打印errno
。我发现了问题。id为8的用户已达到其已执行进程的限制。如果系统调用失败,应检查失败的进程。您可以使用打印错误或获取字符串。另外,请阅读手册和手册页面。
uid = 8
gid = 12
euid = 0
egid = 0