如何设置使用execl作为root用户启动应用程序?

时间:2014-12-15 07:16:50

标签: c linux

我在由root启动的C应用程序上使用execl。 execl的目标是以应用程序事先知道的用户的身份打开另一个应用程序。

以下是代码:

pid = fork();
if (pid == 0) {
    sprintf(Cmd, "user1 -c '/usr/bin/iceweasel %s'", url);
    execl("/bin/su", "/bin/su", Cmd, NULL);
    //command is /bin/su user1 -c '/usr/bin/iceweasel <url>'
    exit(0);
}

应用程序似乎挂起执行execl。它可能期望一个密码,但在shell上运行它不会遇到任何问题。根据我的需要,我需要能够获得iceweasel的进程ID才能控制它。

1 个答案:

答案 0 :(得分:2)

使用setuid()seteuid()函数可以更改当前进程的有效和/或实际uid。在您的情况下,您应该在fork()exec()之间进行更改。

群组ID管理也是如此:setgid()setegid()