Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C setuid或setgid失败_C_Linux - Fatal编程技术网

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