我对 setreuid 有点困惑。
场景:一个进程以普通用户身份运行(id:cateof),但在很短的时间内需要以 root 身份运行。我必须从 cateof 提升对 root 的权限,然后再恢复为普通用户。我的第一个想法是在 setreuid(0, 0); 之间嵌套我的“根调用”。和一个 setreuid(ruid, euid); 就够了,但我错了。回到普通用户的唯一方法是在“root call”之后直接调用 setreuid(ruid, euid) 两次。
这是代码:
int main(...) {
//check the permission, that the program is setuid
//become normal user
ruid = getuid ();
euid = geteuid ();
setreuid(ruid, euid);
...
setreuid(0, 0);
root_action();
setreuid(ruid, euid); //undo root #1
setreuid(geteuid(), getuid()); //undo root#2
如果我不在最后一行调用setreuid(geteuid(), getuid()),则该进程将继续以 root 身份运行。为什么我需要调用它两次???