Setuid 和 setgid 不起作用

Setuid 和 setgid 不起作用

我在 setuid 和 setgid 方面遇到了问题。我编写了以下 C 代码:

int main() {
    setuid(0);
    setgid(0);
    system("/path/to/script.sh");
    return 0;
}

使用 gcc 进行编译:

gcc test.c -o test

然后我使用了chmod +s。里面script.sh只有id命令。以下是可执行文件的权限test

-rwxr-sr-x  1 root   root   8464 mag 15 20:14 test

当我执行该程序时,我得到以下输出:

uid=1000(user) gid=1000(user) gruppi=1000(user)

id为什么我没有得到root 执行的输出?

答案1

您不能使用 setuid 和 setgid 以其他用户身份运行 shell 脚本。这是一项安全功能,您可以阅读更多相关信息在对这个 UL 帖子的非常全面的最佳回答中。

答案2

摘自 MAN 页面setuid()

因此,如果一个 set-user-ID-root 程序想要暂时放弃 root 权限,假设其为非特权用户,然后重新获得 root 权限,则不能使用 setuid()。您可以使用 seteuid(2) 来实现这一点。

如果成功,则返回零。如果出错,则返回 -1,并适当设置 errno。

   Note:  there  are cases where setuid() can fail even when the caller is
   UID 0; it is a grave security error to  omit  checking  for  a  failure
   return from setuid().

除其他事项外,这意味着用户无法root通过此命令成为。

如果发布的代码检查了这些命令的返回值,就会发现命令失败了。

相关内容