我有一个以根用户身份运行的程序,在执行过程中,这个程序会以不同的用户身份执行一些操作,所以我想使用一系列setuid()s。但是,我发现,在setuid(user1)之后,我成为user1,因此没有权限执行setuid(user2)。
如何返回到根以便执行setuid(user2)?
谢谢。

最佳答案

使用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...

关于c - setuid()之后如何恢复到原始状态/用户?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22320809/

10-10 16:22