使用system()在C中执行sudo命令

时间:2015-04-04 01:12:57

标签: sudo root c

我正在编写一段C代码,它将在sudo函数调用中运行一些system("sudo ip route ...")命令。

此调用在主线程创建的pthread中完成,主程序在启动时使用sudo ./program执行。

当我运行该程序时,Ubuntu会提示我输入无人密码:

[sudo] password for nobody:

我也尝试直接做system("ip route ..."),但它给了我负面回报意味着它没有被执行。

我应该在线程中做些什么来允许system()调用使用从主程序继承的sudo权限?

2 个答案:

答案 0 :(得分:5)

您无需执行任何特殊操作即可继承sudo为您提供的root权限。进程通常会自动继承父进程的权限。 system(3)无效的原因可能是因为你是root用户(见下文),或者是因为你在线程上。

话虽如此,不要使用system(3)。这是因为sudo使用setuid工作,并且与system()的效果不佳。因此,请改用exec(3)系列函数(execlp()execvp()除外)。有关详细信息,请参阅man 3 system

现在,表示不要使用system(3) exec(3) 。相反,只需直接调用C API来操作IP表。当你只是简化你的程序时,为什么要浪费系统资源来产生一两个新的过程呢? (此时你已经到了Stack Overflow上你的问题所在的位置。)

答案 1 :(得分:0)

system("echo XXXX | sudo -S gedit");

XXXX你的密码。