繁体   English   中英

setuid()之后如何恢复到原始状态/用户?

[英]how to get back to original status/user after setuid()?

我有一个以root用户身份运行的程序,在执行过程中,该程序将作为不同的用户来做一些事情,因此我想使用一系列setuid()。 但是,我发现在setuid(user1)之后,我成为了user1,因此没有权限执行setuid(user2)。

如何才能回到root用户,以便可以执行setuid(user2)?

谢谢。

你不能,读那个男人: setuid

但是您可以尝试对文件进行chmod修改,然后可以调用setuid(0)作为第一个uid返回

使用fork ,让子setuid并执行第二个用户需要执行的任何操作。 根父级将等待子级,并在子级完成执行后继续。

childpid = fork();
if (childpid < 0) {
    // fork failed
} 
if (childpid == 0) {
  // Child
  setuid(user1);
  prepareUser1();  // Do some stuff as user1.
  exit(0);         // Done as user1
} else {
  // parent: wait for child to finish
  waitpid(childpid);
}
// Parent continues as root...

setuid表示以下内容:

希望暂时放弃root特权,采用非root用户身份并随后重新获得root特权的set-user-ID-root程序不能使用setuid()。 您可以使用seteuid(2)完成此操作

这意味着您无法使用setuid()成为root用户,因为您是非特权用户。 您必须使用seteuid()才能成为root用户。

尝试使用此示例程序来使用seteuid并更改特权。

你不能。 根据设计,一旦放弃root特权,您将无法找回它

手册页说:

如果用户是root或程序是set-user-ID-root,则必须格外小心。 setuid()函数检查调用方的有效用户ID,如果它是超级用户,则所有与进程相关的用户ID均设置为uid。 发生这种情况后,该程序将无法重新获得root特权。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM