setuid创建一个子进程

时间:2018-08-14 11:40:19

标签: c++ c linux

当我尝试在程序中setuid时,它将创建2个进程。一个是父进程,另一个是子进程。

int isRoot()
{
        if (getuid() != 0)
        {
                return 0;
        }
        else
        {
                return 1;
        }
}

int main()
{
    printf("%s \n \n",getUserName());
    printf("%d\n",getuid());

    if(!isRoot())
    {
        printf("This program must be run as root/sudo user!!");
        exit(0);
    }
    seteuid(1000);
    while (1) {}
    printf("%s \n \n",getUserName());
}

当我使用ps命令检查时,它显示了两个不同的过程:

sagar@sagar-desktop:~$ ps -aef | grep a.out
root     20293 18135  0 15:36 pts/7    00:00:00 sudo ./a.out
sagar    20294 20293 99 15:36 pts/7    00:00:17 ./a.out

谁能告诉我为什么它创建两个进程而不是一个?

2 个答案:

答案 0 :(得分:3)

您误会了。 sudo x就是这样做的。它在新进程中以根的身份调用x ,并等待它,因此出现了两个进程。

答案 1 :(得分:2)

不,您的过程只有一个副本。

root     20293 18135  0 15:36 pts/7    00:00:00 sudo ./a.out

这是sudo,而不是您的进程:./ a.out是其命令行参数。然后,您将流程作为子流程生成:

sagar    20294 20293 99 15:36 pts/7    00:00:17 ./a.out