[英]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...
你不能。 根据设计,一旦放弃root特权,您将无法找回它
手册页说:
如果用户是root或程序是set-user-ID-root,则必须格外小心。 setuid()函数检查调用方的有效用户ID,如果它是超级用户,则所有与进程相关的用户ID均设置为uid。 发生这种情况后,该程序将无法重新获得root特权。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.